From c34176f392d257bf0dfe96891ed0edd2e645be56 Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Tue, 23 Nov 2021 20:25:05 -0300 Subject: [PATCH] fix (?) item desync issues --- gradle.properties | 2 +- .../java/appeng/me/cache/NetworkMonitor.java | 52 +++++++------------ 2 files changed, 21 insertions(+), 33 deletions(-) diff --git a/gradle.properties b/gradle.properties index 926bcc73e..e9e88d83f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ aechannel=stable aebuild=7 aegroup=appeng aebasename=appliedenergistics2 -trousers=omni-fixes-v49f +trousers=omni-fixes-v49h ######################################################### # Versions # diff --git a/src/main/java/appeng/me/cache/NetworkMonitor.java b/src/main/java/appeng/me/cache/NetworkMonitor.java index f4f8c1ac8..8bf9fecc5 100644 --- a/src/main/java/appeng/me/cache/NetworkMonitor.java +++ b/src/main/java/appeng/me/cache/NetworkMonitor.java @@ -19,7 +19,6 @@ package appeng.me.cache; -import javax.annotation.Nonnegative; import javax.annotation.Nonnull; import javax.annotation.Nullable; import appeng.api.AEApi; @@ -36,7 +35,6 @@ import appeng.api.storage.channels.IItemStorageChannel; import appeng.api.storage.data.IAEStack; import appeng.api.storage.data.IItemList; import appeng.me.storage.ItemWatcher; -import com.google.common.collect.Queues; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -47,9 +45,10 @@ import java.util.Map.Entry; public class NetworkMonitor> implements IMEMonitor { @Nonnull - private static final Set> NESTED_MONITORS = new HashSet<>(); - private static final HashMap>> sourceSetHashMap = new HashMap<>(); - protected static boolean nested = false; + private static final HashMap>> src2MonitorsMap = new HashMap<>(); + private static final Set nestingSources = new HashSet<>(); + + protected boolean wasNested = false; protected boolean isNested = false; @Nonnull @@ -63,8 +62,6 @@ public class NetworkMonitor> implements IMEMonitor private boolean sendEvent = false; private boolean forceUpdate = false; - @Nonnegative - private int localDepthSemaphore = 0; private long gridItemCount; private long gridFluidCount; @@ -229,17 +226,20 @@ public class NetworkMonitor> implements IMEMonitor protected void postChange( final boolean add, final Iterable changes, final IActionSource src ) { - - if( sourceSetHashMap.get( src ) != null && sourceSetHashMap.get( src ).contains( this ) ) + src2MonitorsMap.putIfAbsent( src, new HashSet<>() ); + isNested = false; + if( nestingSources.contains( src ) ) { - NESTED_MONITORS.add( this ); - nested = true; + forceUpdate = true; + } + if( !src2MonitorsMap.get( src ).add( this ) ) + { + nestingSources.add( src ); + forceUpdate = true; + src2MonitorsMap.get( src ).forEach( networkMonitor -> networkMonitor.isNested = true ); return; } - sourceSetHashMap.putIfAbsent( src, new HashSet<>() ); - sourceSetHashMap.get( src ).add( this ); - this.sendEvent = true; for( final T change : changes ) @@ -282,28 +282,16 @@ public class NetworkMonitor> implements IMEMonitor this.notifyListenersOfChange( changes, src ); - sourceSetHashMap.get( src ).remove( this ); - if( sourceSetHashMap.get( src ).isEmpty() ) + src2MonitorsMap.get( src ).remove( this ); + if( src2MonitorsMap.get( src ).isEmpty() ) { - sourceSetHashMap.remove( src ); + src2MonitorsMap.remove( src ); + nestingSources.remove( src ); } - if( sourceSetHashMap.isEmpty() ) + if( isNested != wasNested || forceUpdate ) { - for( NetworkMonitor nm : NESTED_MONITORS ) - { - nm.setupForceUpdate(); - } - nested = false; - NESTED_MONITORS.clear(); - } - } - - void setupForceUpdate() - { - if( nested != isNested ) - { - isNested = nested; + wasNested = isNested; forceUpdate(); } }