This commit is contained in:
Raoul Van den Berge
2016-07-06 18:12:29 +02:00
parent 012e737c5d
commit eacc9b0907
9 changed files with 35 additions and 38 deletions

View File

@@ -35,14 +35,10 @@ public interface INetworkNode {
/** /**
* Called when this node is disconnected from a network. * Called when this node is disconnected from a network.
*
*/ */
void onDisconnected(); void onDisconnected();
/**
* @return Whether the block is removed from the world
*/
boolean isRemoved();
/** /**
* Called when the connection state of this node changes. * 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()}. * This is also called when redstone mode is updated, as opposed to {@link INetworkNode#onConnected(INetworkMaster)} and {@link INetworkNode#onDisconnected()}.

View File

@@ -30,4 +30,11 @@ public class BlockDiskDrive extends BlockNode {
return true; return true;
} }
@Override
public void breakBlock(World world, BlockPos pos, IBlockState state) {
((TileDiskDrive) world.getTileEntity(pos)).onBreak();
super.breakBlock(world, pos, state);
}
} }

View File

@@ -11,6 +11,7 @@ import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IBlockAccess; import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World; import net.minecraft.world.World;
import refinedstorage.api.network.INetworkMaster;
import refinedstorage.tile.TileNode; import refinedstorage.tile.TileNode;
public abstract class BlockNode extends BlockBase { public abstract class BlockNode extends BlockBase {
@@ -58,14 +59,20 @@ public abstract class BlockNode extends BlockBase {
@Override @Override
public void breakBlock(World world, BlockPos pos, IBlockState state) { public void breakBlock(World world, BlockPos pos, IBlockState state) {
INetworkMaster network = null;
if (!world.isRemote) { if (!world.isRemote) {
TileEntity tile = world.getTileEntity(pos); TileEntity tile = world.getTileEntity(pos);
if (tile instanceof TileNode && ((TileNode) tile).isConnected()) { if (tile instanceof TileNode) {
(((TileNode) tile).getNetwork()).rebuildNodes(); network = ((TileNode) tile).getNetwork();
} }
} }
super.breakBlock(world, pos, state); super.breakBlock(world, pos, state);
if (network != null) {
network.rebuildNodes();
}
} }
} }

View File

@@ -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 @Override
public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) { public List<ItemStack> getDrops(IBlockAccess world, BlockPos pos, IBlockState state, int fortune) {
TileStorage storage = (TileStorage) world.getTileEntity(pos); TileStorage storage = (TileStorage) world.getTileEntity(pos);

View File

@@ -102,10 +102,7 @@ public class TileDiskDrive extends TileNode implements IStorageProvider, IStorag
public void updateNode() { public void updateNode() {
} }
@Override public void onBreak() {
public void onDisconnected() {
super.onDisconnected();
for (Storage storage : this.storages) { for (Storage storage : this.storages) {
if (storage != null) { if (storage != null) {
storage.writeToNBT(); storage.writeToNBT();

View File

@@ -6,7 +6,6 @@ import net.minecraft.util.math.BlockPos;
import refinedstorage.RefinedStorageUtils; import refinedstorage.RefinedStorageUtils;
import refinedstorage.api.network.INetworkMaster; import refinedstorage.api.network.INetworkMaster;
import refinedstorage.api.network.INetworkNode; import refinedstorage.api.network.INetworkNode;
import refinedstorage.block.BlockNode;
import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.IRedstoneModeConfig;
import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.config.RedstoneMode;
@@ -59,10 +58,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr
@Override @Override
public void onConnected(INetworkMaster network) { public void onConnected(INetworkMaster network) {
onConnectionChange(network, true);
this.connected = true; this.connected = true;
this.network = network; this.network = network;
onConnectionChange(network, true);
} }
@Override @Override
@@ -73,11 +72,6 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr
this.network = null; this.network = null;
} }
@Override
public boolean isRemoved() {
return !(worldObj.getBlockState(pos).getBlock() instanceof BlockNode);
}
@Override @Override
public void onConnectionChange(INetworkMaster network, boolean state) { public void onConnectionChange(INetworkMaster network, boolean state) {
// NO OP // NO OP
@@ -160,14 +154,4 @@ public abstract class TileNode extends TileBase implements INetworkNode, ISynchr
connected = tag.getBoolean(NBT_CONNECTED); 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());
}
} }

View File

@@ -84,10 +84,7 @@ public class TileStorage extends TileNode implements IStorageProvider, IStorageG
} }
} }
@Override public void onBreak() {
public void onDisconnected() {
super.onDisconnected();
if (storage != null) { if (storage != null) {
storage.writeToNBT(); storage.writeToNBT();
} }

View File

@@ -219,7 +219,9 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
public void disconnectAll() { public void disconnectAll() {
for (INetworkNode node : nodes) { for (INetworkNode node : nodes) {
node.onDisconnected(); if (node.isConnected()) {
node.onDisconnected();
}
} }
nodes.clear(); nodes.clear();
@@ -408,10 +410,6 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
INetworkNode node = (INetworkNode) tile; INetworkNode node = (INetworkNode) tile;
if (node.isRemoved()) {
continue;
}
newNodes.add(node); newNodes.add(node);
newNodesPos.add(node.getPosition()); newNodesPos.add(node.getPosition());

View File

@@ -191,6 +191,10 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
storages.add(new ItemHandlerStorage(this, handler)); storages.add(new ItemHandlerStorage(this, handler));
} }
} }
if (network != null) {
network.getStorage().rebuild();
}
} }
@Override @Override