Better fix for #1326 and #1307

This commit is contained in:
raoulvdberge
2017-06-24 22:00:42 +02:00
parent c4d06300a3
commit 0d7bbb45ed
27 changed files with 131 additions and 15 deletions

View File

@@ -343,9 +343,7 @@ public class ProxyCommon {
TileBase tileInstance = tile.newInstance();
if (tileInstance instanceof TileNode) {
String nodeId = ((TileNode) tileInstance).createNode(null, null).getId();
API.instance().getNetworkNodeRegistry().add(nodeId, (tag, world, pos) -> {
API.instance().getNetworkNodeRegistry().add(((TileNode) tileInstance).getNodeId(), (tag, world, pos) -> {
NetworkNode node = ((TileNode) tileInstance).createNode(world, pos);
node.read(tag);

View File

@@ -12,4 +12,9 @@ public class TileCable extends TileNode<NetworkNodeCable> {
public NetworkNodeCable createNode(World world, BlockPos pos) {
return new NetworkNodeCable(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeCable.ID;
}
}

View File

@@ -39,4 +39,9 @@ public class TileConstructor extends TileNode<NetworkNodeConstructor> {
public NetworkNodeConstructor createNode(World world, BlockPos pos) {
return new NetworkNodeConstructor(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeConstructor.ID;
}
}

View File

@@ -12,4 +12,9 @@ public class TileCrafter extends TileNode<NetworkNodeCrafter> {
public NetworkNodeCrafter createNode(World world, BlockPos pos) {
return new NetworkNodeCrafter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeCrafter.ID;
}
}

View File

@@ -42,4 +42,9 @@ public class TileDestructor extends TileNode<NetworkNodeDestructor> {
public NetworkNodeDestructor createNode(World world, BlockPos pos) {
return new NetworkNodeDestructor(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeDestructor.ID;
}
}

View File

@@ -88,4 +88,9 @@ public class TileDetector extends TileNode<NetworkNodeDetector> {
public NetworkNodeDetector createNode(World world, BlockPos pos) {
return new NetworkNodeDetector(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeDetector.ID;
}
}

View File

@@ -176,4 +176,9 @@ public class TileDiskDrive extends TileNode<NetworkNodeDiskDrive> {
public NetworkNodeDiskDrive createNode(World world, BlockPos pos) {
return new NetworkNodeDiskDrive(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeDiskDrive.ID;
}
}

View File

@@ -86,4 +86,9 @@ public class TileDiskManipulator extends TileNode<NetworkNodeDiskManipulator> {
public NetworkNodeDiskManipulator createNode(World world, BlockPos pos) {
return new NetworkNodeDiskManipulator(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeDiskManipulator.ID;
}
}

View File

@@ -83,4 +83,9 @@ public class TileExporter extends TileNode<NetworkNodeExporter> {
public NetworkNodeExporter createNode(World world, BlockPos pos) {
return new NetworkNodeExporter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeExporter.ID;
}
}

View File

@@ -69,4 +69,9 @@ public class TileExternalStorage extends TileNode<NetworkNodeExternalStorage> {
public NetworkNodeExternalStorage createNode(World world, BlockPos pos) {
return new NetworkNodeExternalStorage(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeExternalStorage.ID;
}
}

View File

@@ -57,4 +57,9 @@ public class TileFluidInterface extends TileNode<NetworkNodeFluidInterface> {
public NetworkNodeFluidInterface createNode(World world, BlockPos pos) {
return new NetworkNodeFluidInterface(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeFluidInterface.ID;
}
}

View File

@@ -38,5 +38,10 @@ public class TileFluidStorage extends TileNode<NetworkNodeFluidStorage> {
public NetworkNodeFluidStorage createNode(World world, BlockPos pos) {
return new NetworkNodeFluidStorage(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeFluidStorage.ID;
}
}

View File

@@ -26,4 +26,9 @@ public class TileImporter extends TileNode<NetworkNodeImporter> {
public NetworkNodeImporter createNode(World world, BlockPos pos) {
return new NetworkNodeImporter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeImporter.ID;
}
}

View File

@@ -38,4 +38,9 @@ public class TileInterface extends TileNode<NetworkNodeInterface> {
public NetworkNodeInterface createNode(World world, BlockPos pos) {
return new NetworkNodeInterface(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeInterface.ID;
}
}

View File

@@ -12,4 +12,9 @@ public class TileNetworkReceiver extends TileNode<NetworkNodeNetworkReceiver> {
public NetworkNodeNetworkReceiver createNode(World world, BlockPos pos) {
return new NetworkNodeNetworkReceiver(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeNetworkReceiver.ID;
}
}

View File

@@ -49,6 +49,11 @@ public class TileNetworkTransmitter extends TileNode<NetworkNodeNetworkTransmitt
return new NetworkNodeNetworkTransmitter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeNetworkTransmitter.ID;
}
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing facing) {
return capability == CapabilityItemHandler.ITEM_HANDLER_CAPABILITY || super.hasCapability(capability, facing);

View File

@@ -103,7 +103,7 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
NetworkNode node = (NetworkNode) manager.getNode(pos);
if (node == null) {
if (node == null || !node.getId().equals(getNodeId())) {
manager.setNode(pos, node = createNode(world, pos));
manager.markForSaving();
}
@@ -112,16 +112,7 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
doLegacyCheck(node);
}
N castedNode;
try {
castedNode = (N) node;
} catch (ClassCastException e) {
manager.setNode(pos, castedNode = createNode(world, pos));
manager.markForSaving();
}
return castedNode;
return (N) node;
}
private void doLegacyCheck(NetworkNode node) {
@@ -149,6 +140,8 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
public abstract N createNode(World world, BlockPos pos);
public abstract String getNodeId();
@Override
public boolean hasCapability(@Nonnull Capability<?> capability, @Nullable EnumFacing side) {
if (capability == CapabilityNetworkNodeProxy.NETWORK_NODE_PROXY_CAPABILITY) {

View File

@@ -139,4 +139,9 @@ public class TileReader extends TileNode<NetworkNodeReader> {
public NetworkNodeReader createNode(World world, BlockPos pos) {
return new NetworkNodeReader(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeReader.ID;
}
}

View File

@@ -12,4 +12,9 @@ public class TileRelay extends TileNode<NetworkNodeRelay> {
public NetworkNodeRelay createNode(World world, BlockPos pos) {
return new NetworkNodeRelay(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeRelay.ID;
}
}

View File

@@ -12,4 +12,9 @@ public class TileSecurityManager extends TileNode<NetworkNodeSecurityManager> {
public NetworkNodeSecurityManager createNode(World world, BlockPos pos) {
return new NetworkNodeSecurityManager(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeSecurityManager.ID;
}
}

View File

@@ -95,4 +95,9 @@ public class TileSolderer extends TileNode<NetworkNodeSolderer> {
public NetworkNodeSolderer createNode(World world, BlockPos pos) {
return new NetworkNodeSolderer(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeSolderer.ID;
}
}

View File

@@ -38,4 +38,9 @@ public class TileStorage extends TileNode<NetworkNodeStorage> {
public NetworkNodeStorage createNode(World world, BlockPos pos) {
return new NetworkNodeStorage(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeStorage.ID;
}
}

View File

@@ -35,6 +35,11 @@ public class TileStorageMonitor extends TileNode<NetworkNodeStorageMonitor> {
return new NetworkNodeStorageMonitor(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeStorageMonitor.ID;
}
@Override
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
super.writeUpdate(tag);

View File

@@ -26,4 +26,9 @@ public class TileWirelessTransmitter extends TileNode<NetworkNodeWirelessTransmi
public NetworkNodeWirelessTransmitter createNode(World world, BlockPos pos) {
return new NetworkNodeWirelessTransmitter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeWirelessTransmitter.ID;
}
}

View File

@@ -113,4 +113,9 @@ public class TileWriter extends TileNode<NetworkNodeWriter> {
public NetworkNodeWriter createNode(World world, BlockPos pos) {
return new NetworkNodeWriter(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeWriter.ID;
}
}

View File

@@ -41,4 +41,9 @@ public class TileCraftingMonitor extends TileNode<NetworkNodeCraftingMonitor> {
public NetworkNodeCraftingMonitor createNode(World world, BlockPos pos) {
return new NetworkNodeCraftingMonitor(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeCraftingMonitor.ID;
}
}

View File

@@ -146,4 +146,9 @@ public class TileGrid extends TileNode<NetworkNodeGrid> {
public NetworkNodeGrid createNode(World world, BlockPos pos) {
return new NetworkNodeGrid(world, pos);
}
@Override
public String getNodeId() {
return NetworkNodeGrid.ID;
}
}