items can be taken from backpack

This commit is contained in:
Jörg Henke 2020-08-22 16:58:50 +02:00
parent 737c4bd31a
commit 1696a5fc84
2 changed files with 16 additions and 12 deletions

View File

@ -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

View File

@ -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() {