From d7f34288245a7384f6bdceada2365886e4d19a93 Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Mon, 24 Jan 2022 13:19:31 -0300 Subject: [PATCH] fix for infinite loop while loading --- src/main/java/appeng/helpers/DualityInterface.java | 2 -- src/main/java/appeng/me/cache/GridStorageCache.java | 8 +++++++- .../appeng/tile/inventory/AppEngInternalInventory.java | 5 +++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 73a8c1e6a..e5bd77b2e 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -417,8 +417,6 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn // :P } } - - this.notifyNeighbors(); } private void updateCraftingList() diff --git a/src/main/java/appeng/me/cache/GridStorageCache.java b/src/main/java/appeng/me/cache/GridStorageCache.java index 7e06bf809..3014a3ef0 100644 --- a/src/main/java/appeng/me/cache/GridStorageCache.java +++ b/src/main/java/appeng/me/cache/GridStorageCache.java @@ -68,6 +68,7 @@ public class GridStorageCache implements IStorageGrid private final HashMap watchers = new HashMap<>(); private final Map, NetworkInventoryHandler> storageNetworks; private final Map, NetworkMonitor> storageMonitors; + private int localDepth; public GridStorageCache( final IGrid g ) { @@ -212,6 +213,11 @@ public class GridStorageCache implements IStorageGrid @MENetworkEventSubscribe public void cellUpdate( final MENetworkCellArrayUpdate ev ) { + if( localDepth > 0 ) + { + return; + } + localDepth++; this.storageNetworks.clear(); final List ll = new ArrayList(); @@ -247,7 +253,7 @@ public class GridStorageCache implements IStorageGrid } } tracker.applyChanges(); - + localDepth--; this.storageMonitors.forEach( ( channel, monitor ) -> monitor.setForceUpdate( true ) ); } diff --git a/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java b/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java index 90b7a41a9..45278557f 100644 --- a/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java +++ b/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java @@ -119,14 +119,15 @@ public class AppEngInternalInventory extends ItemStackHandler implements Iterabl if( this.getTileEntity() != null && this.eventsEnabled() && !this.dirtyFlag ) { this.dirtyFlag = true; - ItemStack newStack = this.getStackInSlot( slot ).copy(); + ItemStack newStack = this.getStackInSlot( slot ); ItemStack oldStack = this.previousStack; InvOperation op = InvOperation.SET; - if( newStack.isEmpty() || oldStack.isEmpty() || ( oldStack.getCount() < oldStack.getMaxStackSize() && oldStack.getCount() < this.getSlotLimit( slot ) && ItemStack.areItemsEqual( newStack, oldStack ) ) ) + if( newStack.isEmpty() || oldStack.isEmpty() || oldStack.getCount() != newStack.getCount() && ItemStack.areItemsEqual( newStack, oldStack ) ) { if( newStack.getCount() > oldStack.getCount() ) { + newStack = newStack.copy(); newStack.shrink( oldStack.getCount() ); oldStack = ItemStack.EMPTY; op = InvOperation.INSERT;