From 6f8daec55d2b26fa5008fe7ac5ca3de7d6f35a41 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 25 May 2017 15:15:32 +0200 Subject: [PATCH] Fixed #1248 --- CHANGELOG.md | 1 + .../api/network/node/INetworkNodeFactory.java | 11 +++++++++++ .../apiimpl/network/NetworkNodeListener.java | 4 +--- .../apiimpl/network/node/NetworkNode.java | 13 +++++++++++-- .../raoulvdberge/refinedstorage/tile/TileNode.java | 8 +++++++- 5 files changed, 31 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d5e9a50bc..77baccb52 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ### 1.4.10 - Improved performance of network scanning (raoulvdberge) +- Fixed crash when attempting to get direction of a node (raoulvdberge) ### 1.4.9 - Fixed bug where inventory data was lost sometimes upon opening the world (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeFactory.java b/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeFactory.java index c45e3baa8..7bac57d25 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeFactory.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/api/network/node/INetworkNodeFactory.java @@ -6,7 +6,18 @@ import net.minecraft.world.World; import javax.annotation.Nonnull; +/** + * A factory for reading network nodes from the disk. Used in a {@link INetworkNodeRegistry}. + */ public interface INetworkNodeFactory { + /** + * Creates a network node. + * + * @param tag the tag on disk + * @param world the world + * @param pos the pos + * @return the network node + */ @Nonnull INetworkNode create(NBTTagCompound tag, World world, BlockPos pos); } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java index be8c62aa8..c1538dfa9 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/NetworkNodeListener.java @@ -20,9 +20,7 @@ public class NetworkNodeListener { if (e.phase == TickEvent.Phase.END) { for (INetworkNode node : API.instance().getNetworkNodeManager(e.world).all()) { - if (e.world.isBlockLoaded(node.getPos())) { - node.update(); - } + node.update(); } } diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java index 54bcf7ed1..a01acc5af 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -29,6 +29,8 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA protected int ticks; protected RedstoneMode redstoneMode = RedstoneMode.IGNORE; + private EnumFacing direction; + private boolean couldUpdate; private boolean active; @@ -164,9 +166,16 @@ public abstract class NetworkNode implements INetworkNode, INetworkNeighborhoodA return world.getTileEntity(pos.offset(getDirection())); } - // @TODO: Caching public EnumFacing getDirection() { - return ((TileBase) world.getTileEntity(pos)).getDirection(); + if (direction == null) { + resetDirection(); + } + + return direction; + } + + public void resetDirection() { + this.direction = ((TileBase) world.getTileEntity(pos)).getDirection(); } @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java index c32b22ab6..247078213 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java @@ -48,6 +48,13 @@ public abstract class TileNode extends TileBase implement return getNode().writeConfiguration(tag); } + @Override + public void setDirection(EnumFacing direction) { + super.setDirection(direction); + + getNode().resetDirection(); + } + @Override public void readConfiguration(NBTTagCompound tag) { getNode().readConfiguration(tag); @@ -138,7 +145,6 @@ public abstract class TileNode extends TileBase implement this.legacyTag = null; } - // @TODO: This needs to be redone. Perhaps we need to reuse the node registry for this. public abstract N createNode(World world, BlockPos pos); @Override