fix: correctly sync requestable count
This commit is contained in:
parent
df89a2a2d1
commit
0b182ae608
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +0,0 @@
|
|||
package appeng.api.networking.events;
|
||||
|
||||
public class MENetworkRequestableChange extends MENetworkEvent {
|
||||
|
||||
}
|
|
@ -11,4 +11,6 @@ public interface IRequestProvider {
|
|||
|
||||
IAEItemStack requestStack(IAEItemStack stack, Actionable actionable);
|
||||
|
||||
boolean isActive();
|
||||
|
||||
}
|
||||
|
|
|
@ -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<IAEItemStack, Requestable> requestable = new HashMap<>();
|
||||
private Set<IRequestProvider> 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,10 +59,12 @@ public class RequestGridCache
|
|||
@Override
|
||||
public void addNode(IGridNode gridNode, IGridHost machine) {
|
||||
if (machine instanceof IRequestProvider) {
|
||||
if (((IRequestProvider)machine).isActive()) {
|
||||
requestProviders.add((IRequestProvider) machine);
|
||||
recalcRequestable();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSplit(IGridStorage destinationStorage) {}
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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<IAEItemStack> requestable = new HashSet<>();
|
||||
private Set<IAEItemStack> 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (requestPipe != null) {
|
||||
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());
|
||||
this.getProxy().getGrid().postEvent(new MENetworkRequestProviderChange(this));
|
||||
} catch (GridAccessException e) {
|
||||
// :P
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<IAEItemStack> 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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue