Improved VirtualInventory shift-click logic

This commit is contained in:
NichtStudioCode 2021-07-24 21:55:22 +02:00
parent b465bbc7de
commit cd4c8da7f7

@ -220,7 +220,7 @@ public abstract class BaseGUI implements GUI {
otherGui = this; otherGui = this;
} }
leftOverAmount = ((BaseGUI) otherGui).putIntoVirtualInventories(updateReason, clicked, inventory); leftOverAmount = ((BaseGUI) otherGui).putIntoFirstVirtualInventory(updateReason, clicked, inventory);
} else { } else {
leftOverAmount = 0; leftOverAmount = 0;
HashMap<Integer, ItemStack> leftover = event.getWhoClicked().getInventory().addItem(inventory.getItemStack(slot)); HashMap<Integer, ItemStack> leftover = event.getWhoClicked().getInventory().addItem(inventory.getItemStack(slot));
@ -315,31 +315,26 @@ public abstract class BaseGUI implements GUI {
UpdateReason updateReason = new PlayerUpdateReason(player, event); UpdateReason updateReason = new PlayerUpdateReason(player, event);
int amountLeft = putIntoVirtualInventories(updateReason, clicked); int amountLeft = putIntoFirstVirtualInventory(updateReason, clicked);
if (amountLeft != clicked.getAmount()) { if (amountLeft != clicked.getAmount()) {
if (amountLeft != 0) event.getCurrentItem().setAmount(amountLeft); if (amountLeft != 0) event.getCurrentItem().setAmount(amountLeft);
else event.getClickedInventory().setItem(event.getSlot(), null); else event.getClickedInventory().setItem(event.getSlot(), null);
} }
} }
private int putIntoVirtualInventories(UpdateReason updateReason, ItemStack itemStack, VirtualInventory... ignored) { private int putIntoFirstVirtualInventory(UpdateReason updateReason, ItemStack itemStack, VirtualInventory... ignored) {
if (itemStack.getAmount() <= 0) throw new IllegalArgumentException("Illegal ItemStack amount"); List<VirtualInventory> inventories = getAllVirtualInventories(ignored);
int originalAmount = itemStack.getAmount();
List<VirtualInventory> virtualInventories = getAllVirtualInventories(ignored); if (inventories.size() > 0) {
if (virtualInventories.size() > 0) { for (VirtualInventory inventory : inventories) {
int amountLeft = itemStack.getAmount(); int amountLeft = inventory.addItem(updateReason, itemStack);
for (VirtualInventory virtualInventory : virtualInventories) { if (originalAmount != amountLeft)
ItemStack toAdd = itemStack.clone(); return amountLeft;
toAdd.setAmount(amountLeft);
amountLeft = virtualInventory.addItem(updateReason, toAdd);
if (amountLeft == 0) break;
} }
return amountLeft;
} }
return itemStack.getAmount(); return originalAmount;
} }
private List<VirtualInventory> getAllVirtualInventories(VirtualInventory... ignored) { private List<VirtualInventory> getAllVirtualInventories(VirtualInventory... ignored) {