From cd4c8da7f71538b38790522008bbf92f921293a1 Mon Sep 17 00:00:00 2001 From: NichtStudioCode <51272202+NichtStudioCode@users.noreply.github.com> Date: Sat, 24 Jul 2021 21:55:22 +0200 Subject: [PATCH] Improved VirtualInventory shift-click logic --- .../de/studiocode/invui/gui/impl/BaseGUI.java | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/InvUI/src/main/java/de/studiocode/invui/gui/impl/BaseGUI.java b/InvUI/src/main/java/de/studiocode/invui/gui/impl/BaseGUI.java index 2f82028..5096421 100644 --- a/InvUI/src/main/java/de/studiocode/invui/gui/impl/BaseGUI.java +++ b/InvUI/src/main/java/de/studiocode/invui/gui/impl/BaseGUI.java @@ -220,7 +220,7 @@ public abstract class BaseGUI implements GUI { otherGui = this; } - leftOverAmount = ((BaseGUI) otherGui).putIntoVirtualInventories(updateReason, clicked, inventory); + leftOverAmount = ((BaseGUI) otherGui).putIntoFirstVirtualInventory(updateReason, clicked, inventory); } else { leftOverAmount = 0; HashMap leftover = event.getWhoClicked().getInventory().addItem(inventory.getItemStack(slot)); @@ -315,31 +315,26 @@ public abstract class BaseGUI implements GUI { UpdateReason updateReason = new PlayerUpdateReason(player, event); - int amountLeft = putIntoVirtualInventories(updateReason, clicked); + int amountLeft = putIntoFirstVirtualInventory(updateReason, clicked); if (amountLeft != clicked.getAmount()) { if (amountLeft != 0) event.getCurrentItem().setAmount(amountLeft); else event.getClickedInventory().setItem(event.getSlot(), null); } } - private int putIntoVirtualInventories(UpdateReason updateReason, ItemStack itemStack, VirtualInventory... ignored) { - if (itemStack.getAmount() <= 0) throw new IllegalArgumentException("Illegal ItemStack amount"); + private int putIntoFirstVirtualInventory(UpdateReason updateReason, ItemStack itemStack, VirtualInventory... ignored) { + List inventories = getAllVirtualInventories(ignored); + int originalAmount = itemStack.getAmount(); - List virtualInventories = getAllVirtualInventories(ignored); - if (virtualInventories.size() > 0) { - int amountLeft = itemStack.getAmount(); - for (VirtualInventory virtualInventory : virtualInventories) { - ItemStack toAdd = itemStack.clone(); - toAdd.setAmount(amountLeft); - amountLeft = virtualInventory.addItem(updateReason, toAdd); - - if (amountLeft == 0) break; + if (inventories.size() > 0) { + for (VirtualInventory inventory : inventories) { + int amountLeft = inventory.addItem(updateReason, itemStack); + if (originalAmount != amountLeft) + return amountLeft; } - - return amountLeft; } - return itemStack.getAmount(); + return originalAmount; } private List getAllVirtualInventories(VirtualInventory... ignored) {