diff --git a/CHANGELOG.md b/CHANGELOG.md index c92f48cdb..d7915fe1c 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Refined Storage Changelog +### 0.8.6 +**Bugfixes** +- Huge performance improvements to large networks + ### 0.8.5 **Bugfixes** - Fixed crash when Tesla API is not installed diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index aa857ed55..403aabde0 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -53,10 +53,15 @@ public interface INetworkNode { boolean isConnected(); /** - * @return If {@link INetworkNode#canUpdate()} can get called. Typically checks for connection status and redstone mode. + * @return If {@link INetworkNode#canUpdate()} can get called, typically checks for connection status and redstone mode */ boolean canUpdate(); + /** + * @return Whether this node can conduct a network signal + */ + boolean canConduct(); + /** * @return The network */ diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 9d9bf8f08..983538e77 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -45,15 +45,15 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr onConnectionChange(network, update); } - if (isActive()) { - updateNode(); - } - if (active != isActive() && canSendConnectivityUpdate()) { RefinedStorageUtils.updateBlock(worldObj, pos); active = isActive(); } + + if (isActive()) { + updateNode(); + } } super.update(); @@ -80,6 +80,11 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr // NO OP } + @Override + public boolean canConduct() { + return true; + } + @Override public INetworkMaster getNetwork() { return network; diff --git a/src/main/java/refinedstorage/tile/TileRelay.java b/src/main/java/refinedstorage/tile/TileRelay.java index 61c01910a..07c1a9df9 100755 --- a/src/main/java/refinedstorage/tile/TileRelay.java +++ b/src/main/java/refinedstorage/tile/TileRelay.java @@ -2,7 +2,6 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; -import refinedstorage.RefinedStorageBlocks; import refinedstorage.container.ContainerRelay; import refinedstorage.tile.config.RedstoneMode; @@ -25,13 +24,18 @@ public class TileRelay extends TileNode { public void update() { super.update(); - if (connected && couldUpdate != canUpdate()) { + if (network != null && couldUpdate != canUpdate()) { couldUpdate = canUpdate(); - worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.RELAY); + network.rebuildNodes(); } } + @Override + public boolean canConduct() { + return canUpdate(); + } + @Override public Class getContainer() { return ContainerRelay.class; diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index c999ff12f..e05f7b5bb 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -383,8 +383,10 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR Queue toCheck = new ArrayDeque(); for (EnumFacing facing : EnumFacing.VALUES) { - checked.add(pos.offset(facing)); - toCheck.add(pos.offset(facing)); + BlockPos pos = this.pos.offset(facing); + + checked.add(pos); + toCheck.add(pos); } BlockPos currentPos; @@ -397,14 +399,16 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR INetworkNode node = tile.getCapability(RefinedStorageCapabilities.NETWORK_NODE_CAPABILITY, null); - // @TODO: Care about relays - newNodes.add(node); newNodesPos.add(node.getPosition()); - for (EnumFacing facing : EnumFacing.VALUES) { - if (checked.add(currentPos.offset(facing))) { - toCheck.add(currentPos.offset(facing)); + if (node.canConduct()) { + for (EnumFacing facing : EnumFacing.VALUES) { + BlockPos pos = currentPos.offset(facing); + + if (checked.add(pos)) { + toCheck.add(pos); + } } } }