diff --git a/gradle.properties b/gradle.properties index f39e0ac64..900f981ef 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ aechannel=stable aebuild=7 aegroup=appeng aebasename=appliedenergistics2 -trousers=omni-fixes-v49i +trousers=omni-fixes-v49j ######################################################### # Versions # diff --git a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java index 2599e8d20..56b706e8b 100644 --- a/src/main/java/appeng/fluids/helper/DualityFluidInterface.java +++ b/src/main/java/appeng/fluids/helper/DualityFluidInterface.java @@ -458,6 +458,7 @@ public class DualityFluidInterface implements IGridTickable, IStorageMonitorable if( cfg != hasConfig ) { resetConfigCache = true; + this.notifyNeighbors(); } } else if( inventory == this.tanks ) diff --git a/src/main/java/appeng/helpers/DualityInterface.java b/src/main/java/appeng/helpers/DualityInterface.java index 83b37d240..12e7f02a8 100644 --- a/src/main/java/appeng/helpers/DualityInterface.java +++ b/src/main/java/appeng/helpers/DualityInterface.java @@ -185,6 +185,7 @@ public class DualityInterface implements IGridTickable, IStorageMonitorable, IIn if( cfg != hasConfig ) { resetConfigCache = true; + this.notifyNeighbors(); } } else if( inv == this.patterns && ( !removed.isEmpty() || !added.isEmpty() ) ) diff --git a/src/main/java/appeng/me/cache/GridStorageCache.java b/src/main/java/appeng/me/cache/GridStorageCache.java index cb48619e9..c0b8564b3 100644 --- a/src/main/java/appeng/me/cache/GridStorageCache.java +++ b/src/main/java/appeng/me/cache/GridStorageCache.java @@ -247,10 +247,9 @@ public class GridStorageCache implements IStorageGrid this.removeCellProvider( cc, tracker ); } } + tracker.applyChanges(); this.storageMonitors.forEach( ( channel, monitor ) -> monitor.forceUpdate() ); - - tracker.applyChanges(); } private , C extends IStorageChannel> void postChangesToNetwork( final C chan, final int upOrDown, final IItemList availableItems, final IActionSource src ) diff --git a/src/main/java/appeng/me/cache/NetworkMonitor.java b/src/main/java/appeng/me/cache/NetworkMonitor.java index 8bf9fecc5..54ad910e2 100644 --- a/src/main/java/appeng/me/cache/NetworkMonitor.java +++ b/src/main/java/appeng/me/cache/NetworkMonitor.java @@ -45,7 +45,7 @@ import java.util.Map.Entry; public class NetworkMonitor> implements IMEMonitor { @Nonnull - private static final HashMap>> src2MonitorsMap = new HashMap<>(); + private static final HashMap>> src2MonitorsMap = new HashMap<>(); private static final Set nestingSources = new HashSet<>(); protected boolean wasNested = false; @@ -61,7 +61,6 @@ public class NetworkMonitor> implements IMEMonitor private final Object2ObjectMap, Object> listeners; private boolean sendEvent = false; - private boolean forceUpdate = false; private long gridItemCount; private long gridFluidCount; @@ -226,19 +225,14 @@ public class NetworkMonitor> implements IMEMonitor protected void postChange( final boolean add, final Iterable changes, final IActionSource src ) { - src2MonitorsMap.putIfAbsent( src, new HashSet<>() ); - isNested = false; - if( nestingSources.contains( src ) ) - { - forceUpdate = true; - } - if( !src2MonitorsMap.get( src ).add( this ) ) + src2MonitorsMap.putIfAbsent( src, new LinkedList<>() ); + if( src2MonitorsMap.get( src ).contains( this ) ) { nestingSources.add( src ); - forceUpdate = true; - src2MonitorsMap.get( src ).forEach( networkMonitor -> networkMonitor.isNested = true ); return; } + src2MonitorsMap.get( src ).add( this ); + isNested = false; this.sendEvent = true; @@ -282,23 +276,25 @@ public class NetworkMonitor> implements IMEMonitor this.notifyListenersOfChange( changes, src ); - src2MonitorsMap.get( src ).remove( this ); - if( src2MonitorsMap.get( src ).isEmpty() ) + if( src2MonitorsMap.get( src ).getFirst() == this ) { + boolean nested = nestingSources.contains( src ); + src2MonitorsMap.get( src ).forEach( networkMonitor -> networkMonitor.isNested = nested ); + + src2MonitorsMap.get( src ).forEach( networkMonitor -> { + if( networkMonitor.isNested != networkMonitor.wasNested ) + { + networkMonitor.wasNested = networkMonitor.isNested; + networkMonitor.forceUpdate(); + } + } ); src2MonitorsMap.remove( src ); nestingSources.remove( src ); } - - if( isNested != wasNested || forceUpdate ) - { - wasNested = isNested; - forceUpdate(); - } } void forceUpdate() { - forceUpdate = false; this.cachedList.resetStatus(); this.getAvailableItems( this.cachedList ); diff --git a/src/main/java/appeng/parts/misc/PartSharedStorageBus.java b/src/main/java/appeng/parts/misc/PartSharedStorageBus.java index 696e1a29f..594133c04 100644 --- a/src/main/java/appeng/parts/misc/PartSharedStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartSharedStorageBus.java @@ -23,6 +23,7 @@ import java.util.Collections; import java.util.List; import appeng.api.config.AccessRestriction; +import appeng.api.parts.IPart; import appeng.fluids.parts.PartFluidInterface; import appeng.fluids.tile.TileFluidInterface; import appeng.tile.misc.TileInterface; @@ -174,7 +175,8 @@ public abstract class PartSharedStorageBus extends PartUpgradeable implements IG // In case the TE was destroyed, we have to do a full reset immediately. if( te instanceof TileCableBus ) { - if( ( (TileCableBus) te ).getPart( this.getSide().getOpposite() ) instanceof PartFluidInterface ) + IPart iPart = ( (TileCableBus) te ).getPart( this.getSide().getOpposite() ); + if( iPart == null || iPart instanceof PartFluidInterface ) { this.resetCache( true ); this.resetCache(); diff --git a/src/main/java/appeng/parts/misc/PartStorageBus.java b/src/main/java/appeng/parts/misc/PartStorageBus.java index 171f4ed33..1dcf6f1fd 100644 --- a/src/main/java/appeng/parts/misc/PartStorageBus.java +++ b/src/main/java/appeng/parts/misc/PartStorageBus.java @@ -24,6 +24,7 @@ import java.util.List; import java.util.Objects; import appeng.api.networking.storage.IStorageGrid; +import appeng.api.parts.IPart; import appeng.me.cache.GridStorageCache; import appeng.tile.misc.TileInterface; import appeng.tile.networking.TileCableBus; @@ -326,7 +327,8 @@ public class PartStorageBus extends PartUpgradeable implements IGridTickable, IC // In case the TE was destroyed, we have to do a full reset immediately. if( te instanceof TileCableBus ) { - if( ( (TileCableBus) te ).getPart( this.getSide().getOpposite() ) instanceof PartInterface ) + IPart iPart = ( (TileCableBus) te ).getPart( this.getSide().getOpposite() ); + if( iPart == null || iPart instanceof PartInterface ) { this.resetCache( true ); this.resetCache();