From e2b6913bbda3cb3471d11962e9b0080bbbedd895 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 7 Jul 2016 17:20:21 +0200 Subject: [PATCH] Make everything work again --- .../block/BlockExternalStorage.java | 2 +- .../tile/controller/TileController.java | 34 ++++++++++++------- .../externalstorage/TileExternalStorage.java | 21 +++++++----- 3 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/main/java/refinedstorage/block/BlockExternalStorage.java b/src/main/java/refinedstorage/block/BlockExternalStorage.java index e3820a535..d4f9c091c 100755 --- a/src/main/java/refinedstorage/block/BlockExternalStorage.java +++ b/src/main/java/refinedstorage/block/BlockExternalStorage.java @@ -36,7 +36,7 @@ public class BlockExternalStorage extends BlockNode { public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block) { super.neighborChanged(state, world, pos, block); - if (!world.isRemote) { + if (!world.isRemote && ((TileExternalStorage) world.getTileEntity(pos)).isConnected()) { ((TileExternalStorage) world.getTileEntity(pos)).updateStorage(); } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 197ab6f2c..8f2a1ced6 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -194,11 +194,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (couldRun != canRun()) { couldRun = canRun(); - if (!couldRun && !nodes.isEmpty()) { - disconnectAll(); - } else if (couldRun) { - rebuildNodes(); - } + rebuildNodes(); } if (getEnergyScaledForDisplay() != lastEnergyDisplay) { @@ -225,6 +221,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } nodes.clear(); + nodesPos.clear(); } @Override @@ -383,6 +380,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void rebuildNodes() { + if (!canRun()) { + if (!nodes.isEmpty()) { + disconnectAll(); + } + + return; + } + List newNodes = new ArrayList(); Set newNodesPos = new HashSet(); @@ -424,20 +429,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR } } - for (INetworkNode newNode : newNodes) { - if (!nodesPos.contains(newNode.getPosition())) { + List oldNodes = new ArrayList(nodes); + Set oldNodesPos = new HashSet(nodesPos); + + this.nodes = newNodes; + this.nodesPos = newNodesPos; + + for (INetworkNode newNode : nodes) { + if (!oldNodesPos.contains(newNode.getPosition())) { newNode.onConnected(this); } } - for (INetworkNode oldNode : nodes) { - if (!newNodesPos.contains(oldNode.getPosition())) { + for (INetworkNode oldNode : oldNodes) { + if (!nodesPos.contains(oldNode.getPosition())) { oldNode.onDisconnected(); } } - - this.nodes = newNodes; - this.nodesPos = newNodesPos; } @Override @@ -667,6 +675,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void setRedstoneMode(RedstoneMode mode) { this.redstoneMode = mode; + + markDirty(); } @Override diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 774ad4a13..5fe2e3eca 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -42,6 +42,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I private List storages = new ArrayList(); private int lastDrawerCount; + private boolean updatedOnce; @Override public int getEnergyUsage() { @@ -57,16 +58,22 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I super.onConnectionChange(network, state); network.getStorage().rebuild(); + + updatedOnce = false; } @Override public void update() { - if (ticks == 0) { - updateStorage(); - } else if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { - lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); + if (isConnected()) { + if (!updatedOnce) { + updateStorage(); - updateStorage(); + updatedOnce = true; + } else if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { + lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); + + updateStorage(); + } } super.update(); @@ -192,9 +199,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I } } - if (network != null) { - network.getStorage().rebuild(); - } + network.getStorage().rebuild(); } @Override