ModuleInventory optimization

This commit is contained in:
skippyall
2025-06-20 23:39:13 +02:00
parent ec31e090b9
commit 2d64426496
@@ -4,6 +4,9 @@ import io.github.skippyall.minions.module.command.Command;
import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer; import io.github.skippyall.minions.minion.fakeplayer.MinionFakePlayer;
import io.github.skippyall.minions.module.ModuleItem; import io.github.skippyall.minions.module.ModuleItem;
import io.github.skippyall.minions.program.block.CodeBlock; import io.github.skippyall.minions.program.block.CodeBlock;
import net.fabricmc.fabric.impl.transfer.item.ComposterWrapper;
import net.fabricmc.fabric.mixin.transfer.JukeboxBlockEntityMixin;
import net.minecraft.block.ComposterBlock;
import net.minecraft.inventory.Inventories; import net.minecraft.inventory.Inventories;
import net.minecraft.inventory.SimpleInventory; import net.minecraft.inventory.SimpleInventory;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@@ -14,9 +17,13 @@ import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.text.Text; import net.minecraft.text.Text;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
public class ModuleInventory extends SimpleInventory { public class ModuleInventory extends SimpleInventory {
private final Set<ModuleItem> modules = new HashSet<>();
public ModuleInventory() { public ModuleInventory() {
super(27); super(27);
} }
@@ -35,8 +42,24 @@ public class ModuleInventory extends SimpleInventory {
return (stack.getCount() <= getMaxCountPerStack()) && stack.getItem() instanceof ModuleItem; return (stack.getCount() <= getMaxCountPerStack()) && stack.getItem() instanceof ModuleItem;
} }
@Override
public void markDirty() {
super.markDirty();
updateModules();
}
public void updateModules() {
modules.clear();
for (ItemStack heldStack : heldStacks) {
if(heldStack.getItem() instanceof ModuleItem moduleItem) {
modules.add(moduleItem);
}
}
}
public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup lookup) { public void readNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup lookup) {
Inventories.readNbt(nbt, heldStacks, lookup); Inventories.readNbt(nbt, heldStacks, lookup);
updateModules();
} }
public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup lookup) { public NbtCompound writeNbt(NbtCompound nbt, RegistryWrapper.WrapperLookup lookup) {
@@ -44,21 +67,10 @@ public class ModuleInventory extends SimpleInventory {
} }
public boolean hasModule(ModuleItem module) { public boolean hasModule(ModuleItem module) {
for(ItemStack stack : heldStacks) { return modules.contains(module);
if(stack.getItem() instanceof ModuleItem module2 && module2 == module) {
return true;
}
}
return false;
} }
public List<ModuleItem> getModuleItems() { public Collection<ModuleItem> getModuleItems() {
ArrayList<ModuleItem> modules = new ArrayList<>();
for(ItemStack stack : heldStacks) {
if(stack.getItem() instanceof ModuleItem module) {
modules.add(module);
}
}
return modules; return modules;
} }