From 67f07a8f5d839abacc06229d207217a8f3b52af0 Mon Sep 17 00:00:00 2001 From: raoulvdberge Date: Thu, 14 Jun 2018 16:40:54 +0200 Subject: [PATCH] Move direction of network nodes to the network node itself instead of the tile. --- .../apiimpl/network/node/NetworkNode.java | 25 +++++++-------- .../network/node/NetworkNodeCrafter.java | 2 +- .../tile/DirectionHandlerNetworkNode.java | 32 +++++++++++++++++++ .../tile/DirectionHandlerTile.java | 32 +++++++++++++++++++ .../tile/IDirectionHandler.java | 14 ++++++++ .../refinedstorage/tile/TileBase.java | 18 ++++++----- .../refinedstorage/tile/TileNode.java | 9 ++---- 7 files changed, 103 insertions(+), 29 deletions(-) create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java create mode 100644 src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java 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 b815d3408..ba5d30b8b 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 @@ -4,7 +4,6 @@ import com.raoulvdberge.refinedstorage.api.network.INetwork; import com.raoulvdberge.refinedstorage.api.network.INetworkNodeVisitor; import com.raoulvdberge.refinedstorage.api.network.node.INetworkNode; import com.raoulvdberge.refinedstorage.apiimpl.API; -import com.raoulvdberge.refinedstorage.tile.TileBase; import com.raoulvdberge.refinedstorage.tile.config.RedstoneMode; import com.raoulvdberge.refinedstorage.util.WorldUtils; import net.minecraft.block.state.IBlockState; @@ -23,6 +22,7 @@ import java.util.UUID; public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { private static final String NBT_OWNER = "Owner"; + private static final String NBT_DIRECTION = "Direction"; @Nullable protected INetwork network; @@ -33,7 +33,7 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { @Nullable protected UUID owner; - private EnumFacing direction; + private EnumFacing direction = EnumFacing.NORTH; private boolean throttlingDisabled; private boolean couldUpdate; @@ -147,6 +147,8 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { tag.setUniqueId(NBT_OWNER, owner); } + tag.setInteger(NBT_DIRECTION, direction.ordinal()); + writeConfiguration(tag); return tag; @@ -163,6 +165,10 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { owner = tag.getUniqueId(NBT_OWNER); } + if (tag.hasKey(NBT_DIRECTION)) { + direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); + } + readConfiguration(tag); } @@ -205,22 +211,15 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { } public EnumFacing getDirection() { - if (direction == null) { - loadDirection(); - } - return direction; } - // TODO: Move to network node. - public void loadDirection() { - EnumFacing direction = ((TileBase) world.getTileEntity(pos)).getDirection(); + public void setDirection(EnumFacing direction) { + this.direction = direction; - if (!direction.equals(this.direction)) { - this.direction = direction; + onDirectionChanged(); - onDirectionChanged(); - } + markDirty(); } protected void onDirectionChanged() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java index 12223ba90..a6a522a4a 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/apiimpl/network/node/NetworkNodeCrafter.java @@ -64,7 +64,7 @@ public class NetworkNodeCrafter extends NetworkNode implements ICraftingPatternC private ItemHandlerUpgrade upgrades = new ItemHandlerUpgrade(4, new ItemHandlerListenerNetworkNode(this), ItemUpgrade.TYPE_SPEED); - // Used to prevent infinite recursion on getRootContainer() when there's eg. two crafters facing each other. + // Used to prevent infinite recursion on getRootContainer() when there's e.g. two crafters facing each other. private boolean visited = false; @Nullable diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java new file mode 100644 index 000000000..ce962b1ec --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerNetworkNode.java @@ -0,0 +1,32 @@ +package com.raoulvdberge.refinedstorage.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class DirectionHandlerNetworkNode implements IDirectionHandler { + private TileNode tile; + + public DirectionHandlerNetworkNode(TileNode tile) { + this.tile = tile; + } + + @Override + public void setDirection(EnumFacing direction) { + tile.getNode().setDirection(direction); + } + + @Override + public EnumFacing getDirection() { + return tile.getNode().getDirection(); + } + + @Override + public void writeToTileNbt(NBTTagCompound tag) { + // NO OP + } + + @Override + public void readFromTileNbt(NBTTagCompound tag) { + // NO OP + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java new file mode 100644 index 000000000..cea604933 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/DirectionHandlerTile.java @@ -0,0 +1,32 @@ +package com.raoulvdberge.refinedstorage.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public class DirectionHandlerTile implements IDirectionHandler { + public static final String NBT_DIRECTION = "Direction"; + + private EnumFacing direction; + + @Override + public void setDirection(EnumFacing direction) { + this.direction = direction; + } + + @Override + public EnumFacing getDirection() { + return direction; + } + + @Override + public void writeToTileNbt(NBTTagCompound tag) { + tag.setInteger(NBT_DIRECTION, direction.ordinal()); + } + + @Override + public void readFromTileNbt(NBTTagCompound tag) { + if (tag.hasKey(NBT_DIRECTION)) { + direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java new file mode 100644 index 000000000..9070605e8 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/IDirectionHandler.java @@ -0,0 +1,14 @@ +package com.raoulvdberge.refinedstorage.tile; + +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; + +public interface IDirectionHandler { + void setDirection(EnumFacing direction); + + EnumFacing getDirection(); + + void writeToTileNbt(NBTTagCompound tag); + + void readFromTileNbt(NBTTagCompound tag); +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java index a21c4ec92..b74763a59 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileBase.java @@ -17,12 +17,14 @@ import javax.annotation.Nullable; public abstract class TileBase extends TileEntity { protected static final String NBT_DIRECTION = "Direction"; - private EnumFacing direction = EnumFacing.NORTH; - + private EnumFacing clientDirection = EnumFacing.NORTH; + protected IDirectionHandler directionHandler = new DirectionHandlerTile(); protected TileDataManager dataManager = new TileDataManager(this); public void setDirection(EnumFacing direction) { - this.direction = direction; + clientDirection = direction; + + directionHandler.setDirection(direction); world.notifyNeighborsOfStateChange(pos, world.getBlockState(pos).getBlock(), true); @@ -30,7 +32,7 @@ public abstract class TileBase extends TileEntity { } public EnumFacing getDirection() { - return direction; + return world.isRemote ? clientDirection : directionHandler.getDirection(); } public TileDataManager getDataManager() { @@ -38,25 +40,25 @@ public abstract class TileBase extends TileEntity { } public NBTTagCompound write(NBTTagCompound tag) { - tag.setInteger(NBT_DIRECTION, direction.ordinal()); + directionHandler.writeToTileNbt(tag); return tag; } public NBTTagCompound writeUpdate(NBTTagCompound tag) { - tag.setInteger(NBT_DIRECTION, direction.ordinal()); + tag.setInteger(NBT_DIRECTION, directionHandler.getDirection().ordinal()); return tag; } public void read(NBTTagCompound tag) { - direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); + directionHandler.readFromTileNbt(tag); } public void readUpdate(NBTTagCompound tag) { boolean doRender = canCauseRenderUpdate(tag); - direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); + clientDirection = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION)); if (doRender) { WorldUtils.updateBlock(world, pos); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java index 42c9f17c4..e3dcf4b9e 100755 --- a/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/tile/TileNode.java @@ -27,6 +27,8 @@ public abstract class TileNode extends TileBase implement private N clientNode; public TileNode() { + directionHandler = new DirectionHandlerNetworkNode(this); + dataManager.addWatchedParameter(REDSTONE_MODE); } @@ -49,13 +51,6 @@ public abstract class TileNode extends TileBase implement getNode().markDirty(); } - @Override - public void setDirection(EnumFacing direction) { - super.setDirection(direction); - - getNode().loadDirection(); - } - public NBTTagCompound writeUpdate(NBTTagCompound tag) { super.writeUpdate(tag);