Move direction of network nodes to the network node itself instead of the tile.
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -27,6 +27,8 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
|
||||
private N clientNode;
|
||||
|
||||
public TileNode() {
|
||||
directionHandler = new DirectionHandlerNetworkNode(this);
|
||||
|
||||
dataManager.addWatchedParameter(REDSTONE_MODE);
|
||||
}
|
||||
|
||||
@@ -49,13 +51,6 @@ public abstract class TileNode<N extends NetworkNode> extends TileBase implement
|
||||
getNode().markDirty();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setDirection(EnumFacing direction) {
|
||||
super.setDirection(direction);
|
||||
|
||||
getNode().loadDirection();
|
||||
}
|
||||
|
||||
public NBTTagCompound writeUpdate(NBTTagCompound tag) {
|
||||
super.writeUpdate(tag);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user