diff --git a/src/main/java/refinedstorage/api/network/INetworkNode.java b/src/main/java/refinedstorage/api/network/INetworkNode.java index 055c1ebc3..bc4cfd2fc 100755 --- a/src/main/java/refinedstorage/api/network/INetworkNode.java +++ b/src/main/java/refinedstorage/api/network/INetworkNode.java @@ -35,14 +35,10 @@ public interface INetworkNode { /** * Called when this node is disconnected from a network. + * */ void onDisconnected(); - /** - * @return Whether the block is removed from the world - */ - boolean isRemoved(); - /** * Called when the connection state of this node changes. * This is also called when redstone mode is updated, as opposed to {@link INetworkNode#onConnected(INetworkMaster)} and {@link INetworkNode#onDisconnected()}. diff --git a/src/main/java/refinedstorage/block/BlockDiskDrive.java b/src/main/java/refinedstorage/block/BlockDiskDrive.java index ee94232a7..f4c69bfbc 100755 --- a/src/main/java/refinedstorage/block/BlockDiskDrive.java +++ b/src/main/java/refinedstorage/block/BlockDiskDrive.java @@ -30,4 +30,11 @@ public class BlockDiskDrive extends BlockNode { return true; } + + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + ((TileDiskDrive) world.getTileEntity(pos)).onBreak(); + + super.breakBlock(world, pos, state); + } } diff --git a/src/main/java/refinedstorage/block/BlockNode.java b/src/main/java/refinedstorage/block/BlockNode.java index 7065244b7..1e90cf1e8 100755 --- a/src/main/java/refinedstorage/block/BlockNode.java +++ b/src/main/java/refinedstorage/block/BlockNode.java @@ -11,6 +11,7 @@ import net.minecraft.util.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; +import refinedstorage.api.network.INetworkMaster; import refinedstorage.tile.TileNode; public abstract class BlockNode extends BlockBase { @@ -58,14 +59,20 @@ public abstract class BlockNode extends BlockBase { @Override public void breakBlock(World world, BlockPos pos, IBlockState state) { + INetworkMaster network = null; + if (!world.isRemote) { TileEntity tile = world.getTileEntity(pos); - if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { - (((TileNode) tile).getNetwork()).rebuildNodes(); + if (tile instanceof TileNode) { + network = ((TileNode) tile).getNetwork(); } } super.breakBlock(world, pos, state); + + if (network != null) { + network.rebuildNodes(); + } } } diff --git a/src/main/java/refinedstorage/block/BlockStorage.java b/src/main/java/refinedstorage/block/BlockStorage.java index cd730f319..4f8f8e5e9 100755 --- a/src/main/java/refinedstorage/block/BlockStorage.java +++ b/src/main/java/refinedstorage/block/BlockStorage.java @@ -81,6 +81,13 @@ public class BlockStorage extends BlockNode { } } + @Override + public void breakBlock(World world, BlockPos pos, IBlockState state) { + ((TileStorage) world.getTileEntity(pos)).onBreak(); + + super.breakBlock(world, pos, state); + } + @Override public List getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { TileStorage storage = (TileStorage) world.getTileEntity(pos); diff --git a/src/main/java/refinedstorage/tile/TileDiskDrive.java b/src/main/java/refinedstorage/tile/TileDiskDrive.java index 9bbfb2db7..d0080969d 100755 --- a/src/main/java/refinedstorage/tile/TileDiskDrive.java +++ b/src/main/java/refinedstorage/tile/TileDiskDrive.java @@ -102,10 +102,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag public void updateNode() { } - @Override - public void onDisconnected() { - super.onDisconnected(); - + public void onBreak() { for (Storage storage : this.storages) { if (storage != null) { storage.writeToNBT(); diff --git a/src/main/java/refinedstorage/tile/TileNode.java b/src/main/java/refinedstorage/tile/TileNode.java index 4584b3b4b..ebc19366b 100755 --- a/src/main/java/refinedstorage/tile/TileNode.java +++ b/src/main/java/refinedstorage/tile/TileNode.java @@ -6,7 +6,6 @@ import net.minecraft.util.math.BlockPos; import refinedstorage.RefinedStorageUtils; import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkNode; -import refinedstorage.block.BlockNode; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; @@ -59,10 +58,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr @Override public void onConnected(INetworkMaster network) { - onConnectionChange(network, true); - this.connected = true; this.network = network; + + onConnectionChange(network, true); } @Override @@ -73,11 +72,6 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr this.network = null; } - @Override - public boolean isRemoved() { - return !(worldObj.getBlockState(pos).getBlock() instanceof BlockNode); - } - @Override public void onConnectionChange(INetworkMaster network, boolean state) { // NO OP @@ -160,14 +154,4 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr connected = tag.getBoolean(NBT_CONNECTED); } - - @Override - public int hashCode() { - return pos.hashCode(); - } - - @Override - public boolean equals(Object other) { - return other instanceof TileNode && ((TileNode) other).getPosition().equals(getPosition()); - } } diff --git a/src/main/java/refinedstorage/tile/TileStorage.java b/src/main/java/refinedstorage/tile/TileStorage.java index 79c5d6509..69e9b5621 100755 --- a/src/main/java/refinedstorage/tile/TileStorage.java +++ b/src/main/java/refinedstorage/tile/TileStorage.java @@ -84,10 +84,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG } } - @Override - public void onDisconnected() { - super.onDisconnected(); - + public void onBreak() { if (storage != null) { storage.writeToNBT(); } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index cdbe992a2..197ab6f2c 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -219,7 +219,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR public void disconnectAll() { for (INetworkNode node : nodes) { - node.onDisconnected(); + if (node.isConnected()) { + node.onDisconnected(); + } } nodes.clear(); @@ -408,10 +410,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR INetworkNode node = (INetworkNode) tile; - if (node.isRemoved()) { - continue; - } - newNodes.add(node); newNodesPos.add(node.getPosition()); diff --git a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java index af3a0c213..774ad4a13 100755 --- a/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java +++ b/src/main/java/refinedstorage/tile/externalstorage/TileExternalStorage.java @@ -191,6 +191,10 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I storages.add(new ItemHandlerStorage(this, handler)); } } + + if (network != null) { + network.getStorage().rebuild(); + } } @Override