From 88c01d9de7efd13be705d33c3fd06183159153de Mon Sep 17 00:00:00 2001 From: Reece Mackie <20544390+Rover656@users.noreply.github.com> Date: Fri, 27 Sep 2024 00:34:37 +0100 Subject: [PATCH] fix: Item duplication with filters Modifies Ferri's solution from GH-814 to also fix duplication using the 1-9 keys. Also applies the number key fix to the machine menus. Co-authored-by: ferriarnus <61201275+ferriarnus@users.noreply.github.com> Ported-From: e2d537ce5c09ecd4703709f434bb893198d73f39 --- .../base/common/menu/FluidFilterMenu.java | 15 ++++++++----- .../base/common/menu/ItemFilterMenu.java | 15 ++++++++----- .../mods/mekanism/ChemicalFilterMenu.java | 15 ++++++++----- .../common/menu/base/MachineMenu.java | 22 +++++++++++-------- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/enderio-base/src/main/java/com/enderio/base/common/menu/FluidFilterMenu.java b/enderio-base/src/main/java/com/enderio/base/common/menu/FluidFilterMenu.java index 1307c7051c..fd8c7b6f41 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/menu/FluidFilterMenu.java +++ b/enderio-base/src/main/java/com/enderio/base/common/menu/FluidFilterMenu.java @@ -91,12 +91,17 @@ public void setInverted(Boolean inverted) { } @Override - public void clicked(int pSlotId, int pButton, ClickType pClickType, Player pPlayer) { - if (pSlotId > 0 && pSlotId < capability.size()) { - if (!capability.getEntry(pSlotId).isEmpty()) { - capability.setEntry(pSlotId, FluidStack.EMPTY); + public void doClick(int slotId, int button, ClickType clickType, Player player) { + if (slotId >= 0 && slotId < capability.size()) { + if (clickType == ClickType.PICKUP) { + if (!capability.getEntry(slotId).isEmpty()) { + capability.setEntry(slotId, FluidStack.EMPTY); + } + } else if (clickType == ClickType.SWAP) { + return; } } - super.clicked(pSlotId, pButton, pClickType, pPlayer); + + super.doClick(slotId, button, clickType, player); } } diff --git a/enderio-base/src/main/java/com/enderio/base/common/menu/ItemFilterMenu.java b/enderio-base/src/main/java/com/enderio/base/common/menu/ItemFilterMenu.java index 31624e1a0d..60bbeaac2c 100644 --- a/enderio-base/src/main/java/com/enderio/base/common/menu/ItemFilterMenu.java +++ b/enderio-base/src/main/java/com/enderio/base/common/menu/ItemFilterMenu.java @@ -92,12 +92,17 @@ public void setInverted(Boolean inverted) { } @Override - public void clicked(int pSlotId, int pButton, ClickType pClickType, Player pPlayer) { - if (pSlotId > 0 && pSlotId < capability.size()) { - if (!capability.getEntry(pSlotId).isEmpty()) { - capability.setEntry(pSlotId, ItemStack.EMPTY); + public void doClick(int slotId, int button, ClickType clickType, Player player) { + if (slotId >= 0 && slotId < capability.size()) { + if (clickType == ClickType.PICKUP) { + if (!capability.getEntry(slotId).isEmpty()) { + capability.setEntry(slotId, ItemStack.EMPTY); + } + } else if (clickType == ClickType.SWAP) { + return; } } - super.clicked(pSlotId, pButton, pClickType, pPlayer); + + super.doClick(slotId, button, clickType, player); } } diff --git a/enderio-conduits-modded/src/main/java/com/enderio/modconduits/mods/mekanism/ChemicalFilterMenu.java b/enderio-conduits-modded/src/main/java/com/enderio/modconduits/mods/mekanism/ChemicalFilterMenu.java index 2104ba2038..1ae1700146 100644 --- a/enderio-conduits-modded/src/main/java/com/enderio/modconduits/mods/mekanism/ChemicalFilterMenu.java +++ b/enderio-conduits-modded/src/main/java/com/enderio/modconduits/mods/mekanism/ChemicalFilterMenu.java @@ -82,12 +82,17 @@ public void setInverted(Boolean inverted) { } @Override - public void clicked(int pSlotId, int pButton, ClickType pClickType, Player pPlayer) { - if (pSlotId > 0 && pSlotId < capability.size()) { - if (!capability.getEntry(pSlotId).isEmpty()) { - capability.setEntry(pSlotId, ChemicalStack.EMPTY); + public void doClick(int slotId, int button, ClickType clickType, Player player) { + if (slotId >= 0 && slotId < capability.size()) { + if (clickType == ClickType.PICKUP) { + if (!capability.getEntry(slotId).isEmpty()) { + capability.setEntry(slotId, ChemicalStack.EMPTY); + } + } else if (clickType == ClickType.SWAP) { + return; } } - super.clicked(pSlotId, pButton, pClickType, pPlayer); + + super.doClick(slotId, button, clickType, player); } } diff --git a/enderio-machines/src/main/java/com/enderio/machines/common/menu/base/MachineMenu.java b/enderio-machines/src/main/java/com/enderio/machines/common/menu/base/MachineMenu.java index f50c018179..291fe4d190 100644 --- a/enderio-machines/src/main/java/com/enderio/machines/common/menu/base/MachineMenu.java +++ b/enderio-machines/src/main/java/com/enderio/machines/common/menu/base/MachineMenu.java @@ -229,16 +229,20 @@ protected boolean moveItemStackTo(ItemStack stack, int startIndex, int endIndex, // Overrides the swapping behaviour. Required for ghost slots to prevent duping @Override public void doClick(int slotId, int button, ClickType clickType, Player player) { - if(slotId >= 0 && clickType == ClickType.PICKUP && this.slots.get(slotId) instanceof GhostMachineSlot ghostSlot) { - ItemStack slotItem = ghostSlot.getItem(); - ItemStack carriedItem = this.getCarried(); - if(!slotItem.isEmpty() && !carriedItem.isEmpty() && ghostSlot.mayPlace(carriedItem)){ - if(!ItemStack.isSameItemSameComponents(slotItem, carriedItem)){ - int count = Math.min(carriedItem.getCount(), ghostSlot.getMaxStackSize(carriedItem)); - ghostSlot.setByPlayer(carriedItem.copyWithCount(count)); - ghostSlot.setChanged(); - return; + if(slotId >= 0 && this.slots.get(slotId) instanceof GhostMachineSlot ghostSlot) { + if (clickType == ClickType.PICKUP) { + ItemStack slotItem = ghostSlot.getItem(); + ItemStack carriedItem = this.getCarried(); + if(!slotItem.isEmpty() && !carriedItem.isEmpty() && ghostSlot.mayPlace(carriedItem)){ + if(!ItemStack.isSameItemSameComponents(slotItem, carriedItem)){ + int count = Math.min(carriedItem.getCount(), ghostSlot.getMaxStackSize(carriedItem)); + ghostSlot.setByPlayer(carriedItem.copyWithCount(count)); + ghostSlot.setChanged(); + return; + } } + } else if (clickType == ClickType.SWAP) { + return; } } super.doClick(slotId, button, clickType, player);