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) {
super.neighborChanged(state, world, pos, block);
if (!world.isRemote) {
if (!world.isRemote && ((TileExternalStorage) world.getTileEntity(pos)).isConnected()) {
((TileExternalStorage) world.getTileEntity(pos)).updateStorage();
}
}

View File

@@ -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<INetworkNode> newNodes = new ArrayList<INetworkNode>();
Set<BlockPos> newNodesPos = new HashSet<BlockPos>();
@@ -424,20 +429,23 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR
}
}
for (INetworkNode newNode : newNodes) {
if (!nodesPos.contains(newNode.getPosition())) {
List<INetworkNode> oldNodes = new ArrayList<INetworkNode>(nodes);
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);
}
}
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

View File

@@ -42,6 +42,7 @@ public class TileExternalStorage extends TileNode implements IStorageProvider, I
private List<ExternalStorage> storages = new ArrayList<ExternalStorage>();
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