From d424265cdabb35ac5537d62b9bb075cdd189de62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Mon, 17 Jan 2022 21:17:29 +0100 Subject: [PATCH] Make sure robots can't be used for recursive item storage. --- .../container/RobotInventoryContainer.java | 3 +-- .../li/cil/oc2/common/container/RobotSlot.java | 16 ++++++++++++++++ .../common/container/RobotTerminalContainer.java | 3 +-- .../java/li/cil/oc2/common/item/RobotItem.java | 5 +++++ 4 files changed, 23 insertions(+), 4 deletions(-) create mode 100644 src/main/java/li/cil/oc2/common/container/RobotSlot.java diff --git a/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java b/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java index f0987999..5eea1698 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotInventoryContainer.java @@ -14,7 +14,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.network.NetworkHooks; public final class RobotInventoryContainer extends AbstractRobotContainer { @@ -77,7 +76,7 @@ public final class RobotInventoryContainer extends AbstractRobotContainer { for (int slot = 0; slot < inventory.getSlots(); slot++) { final int x = 116 + (slot % 3) * SLOT_SIZE; final int y = 24 + (slot / 3) * SLOT_SIZE; - addSlot(new SlotItemHandler(inventory, slot, x, y)); + addSlot(new RobotSlot(inventory, slot, x, y)); } createPlayerInventoryAndHotbarSlots(player.getInventory(), 8, 115); diff --git a/src/main/java/li/cil/oc2/common/container/RobotSlot.java b/src/main/java/li/cil/oc2/common/container/RobotSlot.java new file mode 100644 index 00000000..3e39332b --- /dev/null +++ b/src/main/java/li/cil/oc2/common/container/RobotSlot.java @@ -0,0 +1,16 @@ +package li.cil.oc2.common.container; + +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.items.IItemHandler; +import net.minecraftforge.items.SlotItemHandler; + +public final class RobotSlot extends SlotItemHandler { + public RobotSlot(final IItemHandler itemHandler, final int index, final int xPosition, final int yPosition) { + super(itemHandler, index, xPosition, yPosition); + } + + @Override + public boolean mayPlace(final ItemStack stack) { + return super.mayPlace(stack) && stack.getItem().canFitInsideContainerItems(); + } +} diff --git a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java index d97e947d..d2f06093 100644 --- a/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java +++ b/src/main/java/li/cil/oc2/common/container/RobotTerminalContainer.java @@ -13,7 +13,6 @@ import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraftforge.items.ItemStackHandler; -import net.minecraftforge.items.SlotItemHandler; import net.minecraftforge.network.NetworkHooks; public final class RobotTerminalContainer extends AbstractRobotContainer { @@ -54,7 +53,7 @@ public final class RobotTerminalContainer extends AbstractRobotContainer { final ItemStackHandler inventory = robot.getInventory(); for (int slot = 0; slot < inventory.getSlots(); slot++) { final int x = (terminalScreenWidth - inventory.getSlots() * SLOT_SIZE) / 2 + 1 + slot * SLOT_SIZE; - addSlot(new SlotItemHandler(inventory, slot, x, terminalScreenHeight + 4)); + addSlot(new RobotSlot(inventory, slot, x, terminalScreenHeight + 4)); } } } diff --git a/src/main/java/li/cil/oc2/common/item/RobotItem.java b/src/main/java/li/cil/oc2/common/item/RobotItem.java index 874057cc..b01f308e 100644 --- a/src/main/java/li/cil/oc2/common/item/RobotItem.java +++ b/src/main/java/li/cil/oc2/common/item/RobotItem.java @@ -107,6 +107,11 @@ public final class RobotItem extends ModItem { return InteractionResult.sidedSuccess(level.isClientSide()); } + @Override + public boolean canFitInsideContainerItems() { + return false; + } + /////////////////////////////////////////////////////////////////// @Override