From b3aa078f568e70df25c8e5dc43688304993a25b8 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Tue, 5 Jul 2016 17:05:21 +0200 Subject: [PATCH] Fixes #155 "External Storage disconnecting on world reload" --- CHANGELOG.md | 1 + src/main/java/refinedstorage/RefinedStorageUtils.java | 1 + .../java/refinedstorage/block/BlockController.java | 4 +--- .../tile/controller/TileController.java | 11 +++++++++-- .../tile/externalstorage/TileExternalStorage.java | 8 +++++--- 5 files changed, 17 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7915fe1c..b82c5f312 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 0.8.6 **Bugfixes** +- Fixed External Storage disconnecting on world reload - Huge performance improvements to large networks ### 0.8.5 diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index 55c0cce08..7e977f142 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -245,6 +245,7 @@ public final class RefinedStorageUtils { } public static void updateBlock(World world, BlockPos pos) { + System.out.println("Updating block @ " + pos); world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 1 | 2); } diff --git a/src/main/java/refinedstorage/block/BlockController.java b/src/main/java/refinedstorage/block/BlockController.java index 4fe3dcfc5..eb313d7b9 100755 --- a/src/main/java/refinedstorage/block/BlockController.java +++ b/src/main/java/refinedstorage/block/BlockController.java @@ -98,8 +98,6 @@ public class BlockController extends BlockBase { if (tag != null && tag.hasKey(TileController.NBT_ENERGY)) { controller.getEnergy().receiveEnergy(tag.getInteger(TileController.NBT_ENERGY), false); } - - controller.rebuildNodes(); } super.onBlockPlacedBy(world, pos, state, player, stack); @@ -108,7 +106,7 @@ public class BlockController extends BlockBase { @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { if (!world.isRemote) { - ((TileController) world.getTileEntity(pos)).onBreak(); + ((TileController) world.getTileEntity(pos)).disconnectAll(); } super.breakBlock(world, pos, state); diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index e05f7b5bb..0d5e8a478 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -195,7 +195,11 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR if (couldRun != canRun()) { couldRun = canRun(); - worldObj.notifyNeighborsOfStateChange(pos, RefinedStorageBlocks.CONTROLLER); + if (!couldRun && !nodes.isEmpty()) { + disconnectAll(); + } else if (couldRun) { + rebuildNodes(); + } } if (getEnergyScaledForDisplay() != lastEnergyDisplay) { @@ -214,10 +218,12 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR super.update(); } - public void onBreak() { + public void disconnectAll() { for (INetworkNode node : nodes) { node.onDisconnected(); } + + nodes.clear(); } @Override @@ -376,6 +382,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR @Override public void rebuildNodes() { + System.out.println("Rebuilding Nodes"); List newNodes = new ArrayList(); Set newNodesPos = new HashSet(); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index 4fc5a2c31..af3a0c213 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -61,13 +61,15 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I @Override public void update() { - super.update(); - - if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { + if (ticks == 0) { + updateStorage(); + } else if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount(); updateStorage(); } + + super.update(); } @Override