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);
|
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.IGridStorage;
|
||||||
import appeng.api.networking.events.MENetworkEventSubscribe;
|
import appeng.api.networking.events.MENetworkEventSubscribe;
|
||||||
import appeng.api.networking.events.MENetworkPostCacheConstruction;
|
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.IRequestGrid;
|
||||||
import appeng.api.networking.request.IRequestProvider;
|
import appeng.api.networking.request.IRequestProvider;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.BaseActionSource;
|
||||||
|
@ -32,13 +32,21 @@ public class RequestGridCache
|
||||||
private IStorageGrid storageGrid;
|
private IStorageGrid storageGrid;
|
||||||
private Map<IAEItemStack, Requestable> requestable = new HashMap<>();
|
private Map<IAEItemStack, Requestable> requestable = new HashMap<>();
|
||||||
private Set<IRequestProvider> requestProviders = new HashSet<>();
|
private Set<IRequestProvider> requestProviders = new HashSet<>();
|
||||||
|
private int tickSinceRefresh = 0;
|
||||||
|
|
||||||
public RequestGridCache(IGrid grid) {
|
public RequestGridCache(IGrid grid) {
|
||||||
this.grid = grid;
|
this.grid = grid;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onUpdateTick() {}
|
public void onUpdateTick() {
|
||||||
|
if (requestProviders.isEmpty()) return;
|
||||||
|
if (tickSinceRefresh % 10 == 0) {
|
||||||
|
tickSinceRefresh = 0;
|
||||||
|
recalcRequestable();
|
||||||
|
}
|
||||||
|
tickSinceRefresh++;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void removeNode(IGridNode gridNode, IGridHost machine) {
|
public void removeNode(IGridNode gridNode, IGridHost machine) {
|
||||||
|
@ -51,8 +59,10 @@ public class RequestGridCache
|
||||||
@Override
|
@Override
|
||||||
public void addNode(IGridNode gridNode, IGridHost machine) {
|
public void addNode(IGridNode gridNode, IGridHost machine) {
|
||||||
if (machine instanceof IRequestProvider) {
|
if (machine instanceof IRequestProvider) {
|
||||||
requestProviders.add((IRequestProvider) machine);
|
if (((IRequestProvider)machine).isActive()) {
|
||||||
recalcRequestable();
|
requestProviders.add((IRequestProvider) machine);
|
||||||
|
recalcRequestable();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,7 +76,12 @@ public class RequestGridCache
|
||||||
public void populateGridStorage(IGridStorage destinationStorage) {}
|
public void populateGridStorage(IGridStorage destinationStorage) {}
|
||||||
|
|
||||||
@MENetworkEventSubscribe
|
@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();
|
recalcRequestable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,7 @@ import appeng.api.networking.energy.IEnergyGrid;
|
||||||
import appeng.api.networking.events.MENetworkChannelsChanged;
|
import appeng.api.networking.events.MENetworkChannelsChanged;
|
||||||
import appeng.api.networking.events.MENetworkEventSubscribe;
|
import appeng.api.networking.events.MENetworkEventSubscribe;
|
||||||
import appeng.api.networking.events.MENetworkPowerStatusChange;
|
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.request.IRequestProvider;
|
||||||
import appeng.api.networking.security.BaseActionSource;
|
import appeng.api.networking.security.BaseActionSource;
|
||||||
import appeng.api.networking.ticking.IGridTickable;
|
import appeng.api.networking.ticking.IGridTickable;
|
||||||
|
@ -82,9 +82,6 @@ public class TileInterface extends AENetworkInvTile
|
||||||
private ForgeDirection pointAt = ForgeDirection.UNKNOWN;
|
private ForgeDirection pointAt = ForgeDirection.UNKNOWN;
|
||||||
private ILogisticsPipes logisticsPipes = null;
|
private ILogisticsPipes logisticsPipes = null;
|
||||||
private TileEntity requestPipe = null;
|
private TileEntity requestPipe = null;
|
||||||
private int ticksSinceRefresh = 0;
|
|
||||||
private Set<IAEItemStack> requestable = new HashSet<>();
|
|
||||||
private Set<IAEItemStack> prevRequestable = new HashSet<>();
|
|
||||||
|
|
||||||
|
|
||||||
@MENetworkEventSubscribe
|
@MENetworkEventSubscribe
|
||||||
|
@ -313,16 +310,6 @@ public class TileInterface extends AENetworkInvTile
|
||||||
this.duality.setPriority(newValue);
|
this.duality.setPriority(newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
@TileEvent(TileEventType.TICK)
|
|
||||||
public void tickEvent() {
|
|
||||||
if (logisticsPipes == null) return;
|
|
||||||
if (ticksSinceRefresh >= 10) {
|
|
||||||
refreshRequestable();
|
|
||||||
ticksSinceRefresh = 0;
|
|
||||||
}
|
|
||||||
ticksSinceRefresh++;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void refreshRequestPipe() {
|
public void refreshRequestPipe() {
|
||||||
if (logisticsPipes != null) {
|
if (logisticsPipes != null) {
|
||||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||||
|
@ -330,35 +317,29 @@ public class TileInterface extends AENetworkInvTile
|
||||||
if (logisticsPipes.isRequestPipe(te)) {
|
if (logisticsPipes.isRequestPipe(te)) {
|
||||||
if (requestPipe != te) {
|
if (requestPipe != te) {
|
||||||
requestPipe = te;
|
requestPipe = te;
|
||||||
this.refreshRequestable();
|
try {
|
||||||
|
this.getProxy().getGrid().postEvent(new MENetworkRequestProviderChange(this));
|
||||||
|
} catch (GridAccessException e) {
|
||||||
|
// :P
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return;
|
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
|
@Override
|
||||||
public Set<IAEItemStack> getRequestableItems() {
|
public Set<IAEItemStack> getRequestableItems() {
|
||||||
return requestable;
|
return logisticsPipes.getRequestableItems(requestPipe);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -433,4 +414,9 @@ public class TileInterface extends AENetworkInvTile
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isActive() {
|
||||||
|
return this.requestPipe != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue