diff --git a/src/main/java/com/buuz135/functionalstorage/block/tile/CompactingDrawerTile.java b/src/main/java/com/buuz135/functionalstorage/block/tile/CompactingDrawerTile.java index d7761e0c..7d09b376 100644 --- a/src/main/java/com/buuz135/functionalstorage/block/tile/CompactingDrawerTile.java +++ b/src/main/java/com/buuz135/functionalstorage/block/tile/CompactingDrawerTile.java @@ -120,6 +120,13 @@ public IItemHandler getStorage() { return handler; } + @Override + protected boolean canChangeMultiplier(long newSizeMultiplier) { + var stack = getStorage().getStackInSlot(2); + if (stack.isEmpty()) return true; + return stack.getCount() <= Math.min(Integer.MAX_VALUE, stack.getMaxStackSize() * newSizeMultiplier); + } + @NotNull @Override public CompactingDrawerTile getSelf() { diff --git a/src/main/java/com/buuz135/functionalstorage/block/tile/ItemControllableDrawerTile.java b/src/main/java/com/buuz135/functionalstorage/block/tile/ItemControllableDrawerTile.java index 29bf37d4..e2de733b 100644 --- a/src/main/java/com/buuz135/functionalstorage/block/tile/ItemControllableDrawerTile.java +++ b/src/main/java/com/buuz135/functionalstorage/block/tile/ItemControllableDrawerTile.java @@ -106,11 +106,8 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { replacement[slot] = stack; var newSize = (long) SizeProvider.calculate(this, FSAttachments.ITEM_STORAGE_MODIFIER, baseSize, replacement); - for (int i = 0; i < getStorage().getSlots(); i++) { - var stored = getStorage().getStackInSlot(i); - if (stored.getCount() > Math.min(Integer.MAX_VALUE, newSize * stored.getMaxStackSize())) { - return ItemStack.EMPTY; - } + if (!canChangeMultiplier(newSize)) { + return ItemStack.EMPTY; } } return super.extractItem(slot, amount, simulate); @@ -125,11 +122,8 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { replacement[integer] = stack; var newSize = (long) SizeProvider.calculate(getStorageUpgrades(), FSAttachments.ITEM_STORAGE_MODIFIER, baseSize, replacement); - for (int i = 0; i < getStorage().getSlots(); i++) { - var stored = getStorage().getStackInSlot(i); - if (stored.getCount() > Math.min(Integer.MAX_VALUE, newSize * stored.getMaxStackSize())) { - return false; - } + if (!canChangeMultiplier(newSize)) { + return false; } return true; @@ -140,6 +134,16 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { .setSlotLimit(1); } + protected boolean canChangeMultiplier(long newSizeMultiplier) { + for (int i = 0; i < getStorage().getSlots(); i++) { + var stored = getStorage().getStackInSlot(i); + if (!stored.isEmpty() && stored.getCount() > Math.min(Integer.MAX_VALUE, newSizeMultiplier * stored.getMaxStackSize())) { + return false; + } + } + return true; + } + public boolean isEverythingEmpty() { for (int i = 0; i < getStorage().getSlots(); i++) { if (!getStorage().getStackInSlot(i).isEmpty()) { diff --git a/src/main/java/com/buuz135/functionalstorage/block/tile/SimpleCompactingDrawerTile.java b/src/main/java/com/buuz135/functionalstorage/block/tile/SimpleCompactingDrawerTile.java index 5b86dc82..e7e23e3b 100644 --- a/src/main/java/com/buuz135/functionalstorage/block/tile/SimpleCompactingDrawerTile.java +++ b/src/main/java/com/buuz135/functionalstorage/block/tile/SimpleCompactingDrawerTile.java @@ -120,6 +120,12 @@ public IItemHandler getStorage() { return handler; } + @Override + protected boolean canChangeMultiplier(long newSizeMultiplier) { + var stack = getStorage().getStackInSlot(1); + if (stack.isEmpty()) return true; + return stack.getCount() <= Math.min(Integer.MAX_VALUE, stack.getMaxStackSize() * newSizeMultiplier); + } @NotNull @Override