From 686190f232e9b79d9a529d917f70bf07ee339ea9 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sat, 2 Jan 2021 11:23:18 +0100 Subject: [PATCH] cache filled disks fixes #2771 (#2786) * cache filled disks fixes #2771 * cache item count instead of fullness * track itemcount instead of caching --- .../apiimpl/storage/disk/ItemStorageDisk.java | 17 +++++++++++++---- .../disk/factory/ItemStorageDiskFactory.java | 2 ++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java index 0a13d838f..f67425d0f 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/ItemStorageDisk.java @@ -35,6 +35,7 @@ public class ItemStorageDisk implements IStorageDisk { private final int capacity; private final Multimap stacks = ArrayListMultimap.create(); private final UUID owner; + private int itemCount; @Nullable private IStorageDiskListener listener; @@ -80,7 +81,7 @@ public class ItemStorageDisk implements IStorageDisk { @Override @Nonnull public ItemStack insert(@Nonnull ItemStack stack, int size, Action action) { - if (stack.isEmpty()) { + if (stack.isEmpty() || itemCount == capacity) { return stack; } @@ -95,7 +96,7 @@ public class ItemStorageDisk implements IStorageDisk { if (action == Action.PERFORM) { otherStack.grow(remainingSpace); - + itemCount += remainingSpace; onChanged(); } @@ -103,6 +104,7 @@ public class ItemStorageDisk implements IStorageDisk { } else { if (action == Action.PERFORM) { otherStack.grow(size); + itemCount += size; onChanged(); } @@ -121,7 +123,7 @@ public class ItemStorageDisk implements IStorageDisk { if (action == Action.PERFORM) { stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, remainingSpace)); - + itemCount += remainingSpace; onChanged(); } @@ -129,6 +131,7 @@ public class ItemStorageDisk implements IStorageDisk { } else { if (action == Action.PERFORM) { stacks.put(stack.getItem(), ItemHandlerHelper.copyStackWithSize(stack, size)); + itemCount += size; onChanged(); } @@ -157,6 +160,8 @@ public class ItemStorageDisk implements IStorageDisk { otherStack.shrink(size); } + itemCount -= size; + onChanged(); } @@ -169,7 +174,7 @@ public class ItemStorageDisk implements IStorageDisk { @Override public int getStored() { - return stacks.values().stream().mapToInt(ItemStack::getCount).sum(); + return itemCount; } @Override @@ -221,4 +226,8 @@ public class ItemStorageDisk implements IStorageDisk { API.instance().getStorageDiskManager(world).markForSaving(); } } + + public void updateItemCount() { + itemCount = stacks.values().stream().mapToInt(ItemStack::getCount).sum(); + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java index 5582273f3..ed368cdd4 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/storage/disk/factory/ItemStorageDiskFactory.java @@ -39,6 +39,8 @@ public class ItemStorageDiskFactory implements IStorageDiskFactory { } } + disk.updateItemCount(); + return disk; }