From d22b76baab1d31a676c0b94770c92bb195c4c784 Mon Sep 17 00:00:00 2001 From: Una Kearney Date: Wed, 17 Dec 2025 17:56:05 -0500 Subject: [PATCH] Honor inventory-specific max stack sizes in InventoryHelper --- .../spectrum/helpers/InventoryHelper.java | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java index b6d6e3746b..1eaec1eb45 100644 --- a/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java +++ b/src/main/java/de/dafuqs/spectrum/helpers/InventoryHelper.java @@ -142,27 +142,30 @@ public static ItemStack smartAddToInventory(ItemStack itemStack, Inventory inven public static ItemStack setOrCombineStack(Inventory inventory, int slot, ItemStack addingStack) { ItemStack existingStack = inventory.getStack(slot); + int max = Math.min(addingStack.getMaxCount(), inventory.getMaxCountPerStack()); if (existingStack.isEmpty()) { - if (addingStack.getCount() > addingStack.getMaxCount()) { - int amount = addingStack.getMaxCount(); - amount = Math.min(amount, inventory.getMaxCountPerStack()); + if (addingStack.getCount() > max) { ItemStack newStack = addingStack.copy(); - newStack.setCount(amount); - addingStack.decrement(amount); + newStack.setCount(max); + addingStack.decrement(max); inventory.setStack(slot, newStack); } else { inventory.setStack(slot, addingStack); return ItemStack.EMPTY; } } else { - combineStacks(existingStack, addingStack); + combineStacks(existingStack, addingStack, max); } return addingStack; } - + public static void combineStacks(ItemStack originalStack, ItemStack addingStack) { + combineStacks(originalStack, addingStack, originalStack.getMaxCount()); + } + + public static void combineStacks(ItemStack originalStack, ItemStack addingStack, int max) { if (ItemStack.canCombine(originalStack, addingStack)) { - int leftOverAmountInExistingStack = originalStack.getMaxCount() - originalStack.getCount(); + int leftOverAmountInExistingStack = max - originalStack.getCount(); if (leftOverAmountInExistingStack > 0) { int addAmount = Math.min(leftOverAmountInExistingStack, addingStack.getCount()); originalStack.increment(addAmount); @@ -187,7 +190,7 @@ public static boolean addToInventory(Inventory inventory, ItemStack stackToAdd, inventory.setStack(i, stackToAdd); return true; } else if (stackToAdd.isStackable()) { - combineStacks(currentStack, stackToAdd); + combineStacks(currentStack, stackToAdd, inventory.getMaxCountPerStack()); if (stackToAdd.isEmpty()) { return true; } @@ -218,7 +221,7 @@ public static boolean addToInventory(Inventory inventory, List stacks for (int j = 0; j < stacksToAdd.size(); j++) { ItemStack stackToAdd = stacksToAdd.get(j); if (stackToAdd.isStackable()) { - combineStacks(inventoryStack, stackToAdd); + combineStacks(inventoryStack, stackToAdd, inventory.getMaxCountPerStack()); if (stackToAdd.isEmpty()) { stacksToAdd.remove(j); if (stacksToAdd.isEmpty()) {