Fixed machines breaking on long distances

This commit is contained in:
Raoul Van den Berge
2016-09-09 19:24:52 +02:00
parent 0bf24a5d13
commit 809baddd88
4 changed files with 42 additions and 0 deletions

View File

@@ -21,6 +21,13 @@ public interface INetworkNodeGraph {
*/
List<INetworkNode> all();
/**
* Replaces an old network node with a new one.
*
* @param node The node
*/
void replace(INetworkNode node);
/**
* Disconnects and notifies all connected nodes.
*/

View File

@@ -136,6 +136,12 @@ public class NetworkNodeGraph implements INetworkNodeGraph {
return nodes;
}
@Override
public void replace(INetworkNode node) {
nodes.remove(node);
nodes.add(node);
}
@Override
public void disconnectAll() {
for (INetworkNode node : nodes) {

View File

@@ -1,6 +1,7 @@
package refinedstorage.tile;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
@@ -15,11 +16,14 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
public static final TileDataParameter<Integer> REDSTONE_MODE = RedstoneMode.createParameter();
private static final String NBT_CONNECTED = "Connected";
private static final String NBT_NETWORK = "Network";
private RedstoneMode redstoneMode = RedstoneMode.IGNORE;
private boolean active;
private boolean update;
private BlockPos networkPos;
protected boolean connected;
protected INetworkMaster network;
@@ -41,6 +45,18 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
@Override
public void update() {
if (!worldObj.isRemote) {
if (networkPos != null) {
TileEntity tile = worldObj.getTileEntity(networkPos);
if (tile instanceof INetworkMaster) {
((INetworkMaster) tile).getNodeGraph().replace(this);
onConnected((INetworkMaster) tile);
}
networkPos = null;
}
if (update != canUpdate() && network != null) {
update = canUpdate();
@@ -71,6 +87,8 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
this.network = network;
onConnectionChange(network, true);
markDirty();
}
@Override
@@ -79,6 +97,8 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
this.connected = false;
this.network = null;
markDirty();
}
public void onConnectionChange(INetworkMaster network, boolean state) {
@@ -129,6 +149,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
if (tag.hasKey(RedstoneMode.NBT)) {
redstoneMode = RedstoneMode.getById(tag.getInteger(RedstoneMode.NBT));
}
if (tag.hasKey(NBT_NETWORK)) {
networkPos = BlockPos.fromLong(tag.getLong(NBT_NETWORK));
}
}
@Override
@@ -137,6 +161,10 @@ public abstract class TileNode extends TileBase implements INetworkNode, IRedsto
tag.setInteger(RedstoneMode.NBT, redstoneMode.ordinal());
if (network != null) {
tag.setLong(NBT_NETWORK, network.getPosition().toLong());
}
return tag;
}