From d69395a117bb37fe2e403f5fe77fdef11421d46b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Salom=C3=A3o?= Date: Mon, 14 Jun 2021 12:57:49 -0300 Subject: [PATCH] cache fixes --- .../appeng/parts/misc/ItemHandlerAdapter.java | 16 +++++++++++----- .../parts/misc/ItemRepositoryAdapter.java | 17 +++++++++++------ 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java index 4fdb5b686..ae534e0a5 100644 --- a/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java +++ b/src/main/java/appeng/parts/misc/ItemHandlerAdapter.java @@ -304,6 +304,8 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor newCachedAeStacks = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList(); + Iterator cachedAeStacksIterator = cachedAeStacks.iterator(); while ( cachedAeStacksIterator.hasNext() ) { @@ -313,9 +315,13 @@ class ItemHandlerAdapter implements IMEInventory, IBaseMonitor, IBaseMonitor, IBaseMonitor, IBaseMonitor< IItemList storage = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList(); this.iItemRepository.getAllItems().stream().map( s -> AEItemStack.fromItemStack( s.itemPrototype ).setStackSize( s.count ) ).forEach( storage::add ); + IItemList newCachedAeStacks = AEApi.instance().storage().getStorageChannel( IItemStorageChannel.class ).createList(); + Iterator cachedAeStacksIterator = cachedAeStacks.iterator(); while ( cachedAeStacksIterator.hasNext() ) { @@ -213,11 +215,14 @@ class ItemRepositoryAdapter implements IMEInventory, IBaseMonitor< if( storedStack == null ) { changes.add( cachedStack.setStackSize( -cachedStack.getStackSize() ) ); - cachedAeStacksIterator.remove(); } - else if( cachedStack.getStackSize() != storedStack.getStackSize() ) + else { - handleStackSizeChanged( cachedStack, storedStack, changes ); + newCachedAeStacks.add( storedStack ); + if( cachedStack.getStackSize() != storedStack.getStackSize() ) + { + handleStackSizeChanged( cachedStack, storedStack, changes ); + } } } @@ -225,11 +230,13 @@ class ItemRepositoryAdapter implements IMEInventory, IBaseMonitor< { if( cachedAeStacks.findPrecise( storedStack ) == null ) { - cachedAeStacks.add( storedStack ); + newCachedAeStacks.add( storedStack ); changes.add( storedStack.copy() ); } } + this.cachedAeStacks = newCachedAeStacks; + return changes; } @@ -240,8 +247,6 @@ class ItemRepositoryAdapter implements IMEInventory, IBaseMonitor< if( diff != 0 ) { - cachedStack.setStackSize( storedStack.getStackSize() ); - final IAEItemStack diffStack = cachedStack.copy(); diffStack.setStackSize( diff ); changes.add( diffStack );