From 71d6c20312d281a677df11e4a58ff4f7ed95d4e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9a=20Gris?= Date: Sun, 23 Feb 2020 19:48:37 +0100 Subject: [PATCH] feat(input slot): add item validation Add Item validation to input slot, so that only chisellable items can be inserted. Prevents insertion of random items and abuse of Chisels as a single-slot backpack. --- .../chisel/inventory/ContainerChisel.java | 31 ++++++++++++------- .../chisel/inventory/SlotChiselInput.java | 8 ++--- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/team/chisel/inventory/ContainerChisel.java b/src/main/java/team/chisel/inventory/ContainerChisel.java index 892c6113..0b3ff40d 100644 --- a/src/main/java/team/chisel/inventory/ContainerChisel.java +++ b/src/main/java/team/chisel/inventory/ContainerChisel.java @@ -1,16 +1,15 @@ package team.chisel.inventory; import com.cricketcraft.chisel.api.carving.ICarvingRegistry; - -import team.chisel.carving.Carving; -import team.chisel.item.chisel.ItemChisel; -import team.chisel.utils.General; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import team.chisel.carving.Carving; +import team.chisel.item.chisel.ItemChisel; +import team.chisel.utils.General; public class ContainerChisel extends Container { @@ -98,12 +97,10 @@ public class ContainerChisel extends Container { return null; } } else { - if (slotIdx < InventoryChiselSelection.normalSlots + 1 && itemstack1 != null) { - entity.inventory.setItemStack(itemstack1.copy()); - slot.onPickupFromSlot(entity, itemstack1); - itemstack1 = entity.inventory.getItemStack(); - entity.inventory.setItemStack(null); - } + entity.inventory.setItemStack(itemstack1.copy()); + slot.onPickupFromSlot(entity, itemstack1); + itemstack1 = entity.inventory.getItemStack(); + entity.inventory.setItemStack(null); if (!this.mergeItemStack(itemstack1, InventoryChiselSelection.normalSlots + 1, InventoryChiselSelection.normalSlots + 1 + 36, false)) { return null; @@ -112,7 +109,7 @@ public class ContainerChisel extends Container { slot.onSlotChange(itemstack1, itemstack); if (itemstack1.stackSize == 0) { - slot.putStack((ItemStack) null); + slot.putStack(null); } else { slot.putStack(itemstack1); slot.onSlotChanged(); @@ -131,6 +128,18 @@ public class ContainerChisel extends Container { return itemstack; } + /** + * Added validation of slot input + * Only Chiselable allowed + * + * @author Léa Gris + */ + @Override + protected boolean mergeItemStack(ItemStack par1ItemStack, int fromIndex, int toIndex, boolean reversOrder) { + return ((Slot) this.inventorySlots.get(reversOrder ? toIndex - 1 : fromIndex)).isItemValid(par1ItemStack) + && super.mergeItemStack(par1ItemStack, fromIndex, toIndex, reversOrder); + } + public void onChiselSlotChanged() { ItemStack stack = playerInventory.mainInventory[chiselSlot]; if (stack == null || !stack.isItemEqual(chisel)) diff --git a/src/main/java/team/chisel/inventory/SlotChiselInput.java b/src/main/java/team/chisel/inventory/SlotChiselInput.java index 39b742d1..24aaedc6 100644 --- a/src/main/java/team/chisel/inventory/SlotChiselInput.java +++ b/src/main/java/team/chisel/inventory/SlotChiselInput.java @@ -14,16 +14,14 @@ public class SlotChiselInput extends Slot { @Override public boolean isItemValid(ItemStack itemstack) { - if (container.finished) - return false; - - return super.isItemValid(itemstack); + return !container.finished + && !container.carving.getItemsForChiseling(itemstack).isEmpty() + && super.isItemValid(itemstack); } @Override public boolean canTakeStack(EntityPlayer par1EntityPlayer) { return !container.finished && super.canTakeStack(par1EntityPlayer); - } @Override