Make everything work again

This commit is contained in:
Raoul Van den Berge
2016-07-07 17:20:21 +02:00
parent eacc9b0907
commit e2b6913bbd
3 changed files with 36 additions and 21 deletions

View File

@@ -36,7 +36,7 @@ public class BlockExternalStorage extends BlockNode {
public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block) { public void neighborChanged(IBlockState state, World world, BlockPos pos, Block block) {
super.neighborChanged(state, world, pos, block); super.neighborChanged(state, world, pos, block);
if (!world.isRemote) { if (!world.isRemote && ((TileExternalStorage) world.getTileEntity(pos)).isConnected()) {
((TileExternalStorage) world.getTileEntity(pos)).updateStorage(); ((TileExternalStorage) world.getTileEntity(pos)).updateStorage();
} }
} }

View File

@@ -194,11 +194,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
if (couldRun != canRun()) { if (couldRun != canRun()) {
couldRun = canRun(); couldRun = canRun();
if (!couldRun && !nodes.isEmpty()) { rebuildNodes();
disconnectAll();
} else if (couldRun) {
rebuildNodes();
}
} }
if (getEnergyScaledForDisplay() != lastEnergyDisplay) { if (getEnergyScaledForDisplay() != lastEnergyDisplay) {
@@ -225,6 +221,7 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
nodes.clear(); nodes.clear();
nodesPos.clear();
} }
@Override @Override
@@ -383,6 +380,14 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override @Override
public void rebuildNodes() { public void rebuildNodes() {
if (!canRun()) {
if (!nodes.isEmpty()) {
disconnectAll();
}
return;
}
List<INetworkNode> newNodes = new ArrayList<INetworkNode>(); List<INetworkNode> newNodes = new ArrayList<INetworkNode>();
Set<BlockPos> newNodesPos = new HashSet<BlockPos>(); Set<BlockPos> newNodesPos = new HashSet<BlockPos>();
@@ -424,20 +429,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
} }
} }
for (INetworkNode newNode : newNodes) { List<INetworkNode> oldNodes = new ArrayList<INetworkNode>(nodes);
if (!nodesPos.contains(newNode.getPosition())) { Set<BlockPos> oldNodesPos = new HashSet<BlockPos>(nodesPos);
this.nodes = newNodes;
this.nodesPos = newNodesPos;
for (INetworkNode newNode : nodes) {
if (!oldNodesPos.contains(newNode.getPosition())) {
newNode.onConnected(this); newNode.onConnected(this);
} }
} }
for (INetworkNode oldNode : nodes) { for (INetworkNode oldNode : oldNodes) {
if (!newNodesPos.contains(oldNode.getPosition())) { if (!nodesPos.contains(oldNode.getPosition())) {
oldNode.onDisconnected(); oldNode.onDisconnected();
} }
} }
this.nodes = newNodes;
this.nodesPos = newNodesPos;
} }
@Override @Override
@@ -667,6 +675,8 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
@Override @Override
public void setRedstoneMode(RedstoneMode mode) { public void setRedstoneMode(RedstoneMode mode) {
this.redstoneMode = mode; this.redstoneMode = mode;
markDirty();
} }
@Override @Override

View File

@@ -42,6 +42,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
private List<ExternalStorage> storages = new ArrayList<ExternalStorage>(); private List<ExternalStorage> storages = new ArrayList<ExternalStorage>();
private int lastDrawerCount; private int lastDrawerCount;
private boolean updatedOnce;
@Override @Override
public int getEnergyUsage() { public int getEnergyUsage() {
@@ -57,16 +58,22 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
super.onConnectionChange(network, state); super.onConnectionChange(network, state);
network.getStorage().rebuild(); network.getStorage().rebuild();
updatedOnce = false;
} }
@Override @Override
public void update() { public void update() {
if (ticks == 0) { if (isConnected()) {
updateStorage(); if (!updatedOnce) {
} else if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) { updateStorage();
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
updateStorage(); updatedOnce = true;
} else if (getFacingTile() instanceof IDrawerGroup && lastDrawerCount != ((IDrawerGroup) getFacingTile()).getDrawerCount()) {
lastDrawerCount = ((IDrawerGroup) getFacingTile()).getDrawerCount();
updateStorage();
}
} }
super.update(); super.update();
@@ -192,9 +199,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
} }
} }
if (network != null) { network.getStorage().rebuild();
network.getStorage().rebuild();
}
} }
@Override @Override