From 0b182ae608c0d16061b4703dbb950b82c0ad0ff2 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Thu, 26 Jan 2023 19:01:45 +0100 Subject: [PATCH] fix: correctly sync requestable count --- .../MENetworkRequestProviderChange.java | 13 +++++ .../events/MENetworkRequestableChange.java | 5 -- .../networking/request/IRequestProvider.java | 2 + .../appeng/me/cache/RequestGridCache.java | 25 +++++++-- .../java/appeng/tile/misc/TileInterface.java | 56 +++++++------------ 5 files changed, 56 insertions(+), 45 deletions(-) create mode 100644 src/api/java/appeng/api/networking/events/MENetworkRequestProviderChange.java delete mode 100644 src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java diff --git a/src/api/java/appeng/api/networking/events/MENetworkRequestProviderChange.java b/src/api/java/appeng/api/networking/events/MENetworkRequestProviderChange.java new file mode 100644 index 00000000..6054394a --- /dev/null +++ b/src/api/java/appeng/api/networking/events/MENetworkRequestProviderChange.java @@ -0,0 +1,13 @@ +package appeng.api.networking.events; + +import appeng.api.networking.request.IRequestProvider; + +public class MENetworkRequestProviderChange extends MENetworkEvent { + + public IRequestProvider provider; + + public MENetworkRequestProviderChange(IRequestProvider provider) { + this.provider = provider; + } + +} diff --git a/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java b/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java deleted file mode 100644 index 13c7bae0..00000000 --- a/src/api/java/appeng/api/networking/events/MENetworkRequestableChange.java +++ /dev/null @@ -1,5 +0,0 @@ -package appeng.api.networking.events; - -public class MENetworkRequestableChange extends MENetworkEvent { - -} diff --git a/src/api/java/appeng/api/networking/request/IRequestProvider.java b/src/api/java/appeng/api/networking/request/IRequestProvider.java index 53062514..9d2df20e 100644 --- a/src/api/java/appeng/api/networking/request/IRequestProvider.java +++ b/src/api/java/appeng/api/networking/request/IRequestProvider.java @@ -11,4 +11,6 @@ public interface IRequestProvider { IAEItemStack requestStack(IAEItemStack stack, Actionable actionable); + boolean isActive(); + } diff --git a/src/main/java/appeng/me/cache/RequestGridCache.java b/src/main/java/appeng/me/cache/RequestGridCache.java index 50913d95..c87a08ba 100644 --- a/src/main/java/appeng/me/cache/RequestGridCache.java +++ b/src/main/java/appeng/me/cache/RequestGridCache.java @@ -15,7 +15,7 @@ import appeng.api.networking.IGridNode; import appeng.api.networking.IGridStorage; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPostCacheConstruction; -import appeng.api.networking.events.MENetworkRequestableChange; +import appeng.api.networking.events.MENetworkRequestProviderChange; import appeng.api.networking.request.IRequestGrid; import appeng.api.networking.request.IRequestProvider; import appeng.api.networking.security.BaseActionSource; @@ -32,13 +32,21 @@ public class RequestGridCache private IStorageGrid storageGrid; private Map requestable = new HashMap<>(); private Set requestProviders = new HashSet<>(); + private int tickSinceRefresh = 0; public RequestGridCache(IGrid grid) { this.grid = grid; } @Override - public void onUpdateTick() {} + public void onUpdateTick() { + if (requestProviders.isEmpty()) return; + if (tickSinceRefresh % 10 == 0) { + tickSinceRefresh = 0; + recalcRequestable(); + } + tickSinceRefresh++; + } @Override public void removeNode(IGridNode gridNode, IGridHost machine) { @@ -51,8 +59,10 @@ public class RequestGridCache @Override public void addNode(IGridNode gridNode, IGridHost machine) { if (machine instanceof IRequestProvider) { - requestProviders.add((IRequestProvider) machine); - recalcRequestable(); + if (((IRequestProvider)machine).isActive()) { + requestProviders.add((IRequestProvider) machine); + recalcRequestable(); + } } } @@ -66,7 +76,12 @@ public class RequestGridCache public void populateGridStorage(IGridStorage destinationStorage) {} @MENetworkEventSubscribe - public void requestableChange(MENetworkRequestableChange event) { + public void requestProviderChange(MENetworkRequestProviderChange event) { + if (event.provider.isActive()) { + requestProviders.add(event.provider); + } else { + requestProviders.remove(event.provider); + } recalcRequestable(); } diff --git a/src/main/java/appeng/tile/misc/TileInterface.java b/src/main/java/appeng/tile/misc/TileInterface.java index 8adc6210..27ea2618 100644 --- a/src/main/java/appeng/tile/misc/TileInterface.java +++ b/src/main/java/appeng/tile/misc/TileInterface.java @@ -35,7 +35,7 @@ import appeng.api.networking.energy.IEnergyGrid; import appeng.api.networking.events.MENetworkChannelsChanged; import appeng.api.networking.events.MENetworkEventSubscribe; import appeng.api.networking.events.MENetworkPowerStatusChange; -import appeng.api.networking.events.MENetworkRequestableChange; +import appeng.api.networking.events.MENetworkRequestProviderChange; import appeng.api.networking.request.IRequestProvider; import appeng.api.networking.security.BaseActionSource; import appeng.api.networking.ticking.IGridTickable; @@ -82,9 +82,6 @@ public class TileInterface extends AENetworkInvTile private ForgeDirection pointAt = ForgeDirection.UNKNOWN; private ILogisticsPipes logisticsPipes = null; private TileEntity requestPipe = null; - private int ticksSinceRefresh = 0; - private Set requestable = new HashSet<>(); - private Set prevRequestable = new HashSet<>(); @MENetworkEventSubscribe @@ -313,16 +310,6 @@ public class TileInterface extends AENetworkInvTile this.duality.setPriority(newValue); } - @TileEvent(TileEventType.TICK) - public void tickEvent() { - if (logisticsPipes == null) return; - if (ticksSinceRefresh >= 10) { - refreshRequestable(); - ticksSinceRefresh = 0; - } - ticksSinceRefresh++; - } - public void refreshRequestPipe() { if (logisticsPipes != null) { for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { @@ -330,35 +317,29 @@ public class TileInterface extends AENetworkInvTile if (logisticsPipes.isRequestPipe(te)) { if (requestPipe != te) { requestPipe = te; - this.refreshRequestable(); + try { + this.getProxy().getGrid().postEvent(new MENetworkRequestProviderChange(this)); + } catch (GridAccessException e) { + // :P + } } return; } - } - } - requestPipe = null; - this.refreshRequestable(); - } - - public void refreshRequestable() { - requestable.clear(); - if (logisticsPipes != null && requestPipe != null) { - requestable.addAll(logisticsPipes.getRequestableItems(requestPipe)); - } - if (!requestable.equals(prevRequestable)) { // TODO: post event when amount changes - prevRequestable.clear(); - prevRequestable.addAll(requestable); - try { - this.getProxy().getGrid().postEvent(new MENetworkRequestableChange()); - } catch (GridAccessException e) { - // :P } - } + if (requestPipe != null) { + requestPipe = null; + try { + this.getProxy().getGrid().postEvent(new MENetworkRequestProviderChange(this)); + } catch (GridAccessException e) { + // :P + } + } + } } @Override public Set getRequestableItems() { - return requestable; + return logisticsPipes.getRequestableItems(requestPipe); } @Override @@ -433,4 +414,9 @@ public class TileInterface extends AENetworkInvTile return 0; } } + + @Override + public boolean isActive() { + return this.requestPipe != null; + } }