diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java index dffa1ba..ab5fec1 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackInventory.java @@ -67,12 +67,7 @@ public class BackpackInventory implements Inventory { @Override public boolean isEmpty() { - for (ItemStack stack : stacks) { - if (!stack.isEmpty()) { - return false; - } - } - return true; + return this.stacks.stream().allMatch(ItemStack::isEmpty); } @Override @@ -82,11 +77,7 @@ public class BackpackInventory implements Inventory { @Override public ItemStack removeStack(int slot, int amount) { - ItemStack stack = this.stacks.get(slot); - stack.decrement(amount); - this.stacks.set(slot, stack); - markDirty(); - return stack; + return Inventories.splitStack(stacks, slot, amount); } @Override diff --git a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java index 5457453..815c6ad 100644 --- a/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java +++ b/src/main/java/de/jottyfan/minecraft/quickiefabric/container/BackpackScreenHandler.java @@ -1,5 +1,8 @@ package de.jottyfan.minecraft.quickiefabric.container; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import de.jottyfan.minecraft.quickiefabric.init.RegistryManager; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -10,16 +13,20 @@ import net.minecraft.item.ItemStack; import net.minecraft.network.PacketByteBuf; import net.minecraft.screen.ScreenHandler; import net.minecraft.screen.slot.Slot; +import net.minecraft.screen.slot.SlotActionType; import net.minecraft.util.Hand; public class BackpackScreenHandler extends ScreenHandler { - + private final Logger LOGGER = LogManager.getLogger(BackpackScreenHandler.class); + private final BackpackInventory backpackInventory; private final PlayerEntity player; + private final PlayerInventory playerInventory; private final Hand hand; public BackpackScreenHandler(int syncId, PlayerInventory playerInventory, PacketByteBuf buf) { super(RegistryManager.BACKPACK_SCREEN_HANDLER, syncId); + this.playerInventory = playerInventory; this.player = playerInventory.player; ItemStack stack = buf.readItemStack(); this.hand = buf.readByte() > 0 ? Hand.MAIN_HAND : Hand.OFF_HAND; @@ -86,6 +93,12 @@ public class BackpackScreenHandler extends ScreenHandler { return copy; } + @Override + public ItemStack onSlotClick(int i, int j, SlotActionType actionType, PlayerEntity playerEntity) { + LOGGER.info("click on slot at {},{} with actionType {} by {}", i, j, actionType, playerEntity); + // TODO: prevent the one slot that contains the active backpack item + return super.onSlotClick(i, j, actionType, playerEntity); + } @Environment(EnvType.CLIENT) public int getRows() {