diff --git a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java index d9b710bfd..94e96b317 100644 --- a/src/main/java/com/hbm/tileentity/network/RequestNetwork.java +++ b/src/main/java/com/hbm/tileentity/network/RequestNetwork.java @@ -70,10 +70,11 @@ public class RequestNetwork { public static class PathNode { public BlockPos pos; public long lease; - public HashedSet reachableNodes = new HashedSet(); + public boolean active = true; + public HashedSet reachableNodes; public PathNode(BlockPos pos, HashedSet reachableNodes) { this.pos = pos; - this.reachableNodes = new HashedSet(reachableNodes); + this.reachableNodes = new HashedSet<>(reachableNodes); this.lease = System.currentTimeMillis(); } @@ -108,7 +109,6 @@ public class RequestNetwork { /** Node created by requesters, lists requested AStacks */ public static class RequestNode extends PathNode { public List request; - public int droneCount; public RequestNode(BlockPos pos, HashedSet reachableNodes, List request) { super(pos, reachableNodes); this.request = request; diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java index 9ae25a045..0ab0a73b7 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityDroneDock.java @@ -64,7 +64,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple // simply pick the first request node that has unfulfilled requests for(RequestNode request : requests) { - if(!request.request.isEmpty()) { + if(request.active && !request.request.isEmpty()) { firstRequest = request; break; } @@ -78,7 +78,7 @@ public class TileEntityDroneDock extends TileEntityRequestNetworkContainer imple outer: for(OfferNode offer : offers) { for(ItemStack stack : offer.offer) { - if(stack != null && request.matchesRecipe(stack, true)) { + if(offer.active && stack != null && request.matchesRecipe(stack, true)) { if(tryEmbark(own, firstRequest, offer, request, localNodes)) break attempt; // if the drone can be pathed and spawned, stop doing more attempts break outer; // if not, simply continue iterating over offer nodes } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java index 645374a1e..9da1cfa2a 100644 --- a/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java +++ b/src/main/java/com/hbm/tileentity/network/TileEntityRequestNetwork.java @@ -37,14 +37,18 @@ public abstract class TileEntityRequestNetwork extends TileEntity { if(worldObj.getTotalWorldTime() % 20 == 0) { BlockPos pos = getCoord(); + + PathNode newNode = createNode(pos); + if(this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) newNode.active = false; // push new node - push(worldObj, createNode(pos)); + push(worldObj, newNode); // remove known nodes that no longer exist // since we can assume a sane number of nodes to exist at any given time, we can run this check in full every second Iterator it = knownNodes.iterator(); HashedSet localNodes = this.getAllLocalNodes(worldObj, xCoord, zCoord, 2); // this bit may spiral into multiple nested hashtable lookups but it's limited to only a few chunks so it shouldn't be an issue localNodes.remove(pos); + while(it.hasNext()) { PathNode node = it.next(); if(!localNodes.contains(node)) {