diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index d7d1d658e..576d78d56 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -9,7 +9,6 @@ public class ContainerNetworkTransmitter extends ContainerBase { super(player); addSlotToContainer(new SlotItemHandler(networkTransmitter.getNetworkCard(), 0, 8, 20)); - addSlotToContainer(new SlotItemHandler(networkTransmitter.getUpgrade(), 0, 187, 6)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index 0dc34b5da..c2ea0f0be 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -8,7 +8,7 @@ public class GuiNetworkTransmitter extends GuiBase { private TileNetworkTransmitter networkTransmitter; public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { - super(container, 211, 137); + super(container, 176, 137); this.networkTransmitter = networkTransmitter; } @@ -35,8 +35,10 @@ public class GuiNetworkTransmitter extends GuiBase { String distance; - if (networkTransmitter.getReceiver() == null) { - distance = t("gui.refinedstorage:network_transmitter.distance_missing"); + if (!networkTransmitter.isInSameDimension()) { + distance = t("gui.refinedstorage:network_transmitter.different_dimension"); + } else if (networkTransmitter.getDistance() == -1) { + distance = t("gui.refinedstorage:network_transmitter.missing_card"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index c6cb03038..57893119f 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -18,6 +18,7 @@ public class ItemNetworkCard extends ItemBase { private static final String NBT_RECEIVER_X = "ReceiverX"; private static final String NBT_RECEIVER_Y = "ReceiverY"; private static final String NBT_RECEIVER_Z = "ReceiverZ"; + private static final String NBT_DIMENSION = "Dimension"; public ItemNetworkCard() { super("network_card"); @@ -28,7 +29,7 @@ public class ItemNetworkCard extends ItemBase { Block block = world.getBlockState(pos).getBlock(); if (block == RefinedStorageBlocks.NETWORK_RECEIVER) { - setReceiver(stack, pos); + setReceiver(stack, pos, world.provider.getDimension()); return EnumActionResult.SUCCESS; } @@ -57,12 +58,17 @@ public class ItemNetworkCard extends ItemBase { return null; } - public static void setReceiver(ItemStack stack, BlockPos pos) { + public static int getDimension(ItemStack stack) { + return (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_DIMENSION)) ? stack.getTagCompound().getInteger(NBT_DIMENSION) : 0; + } + + public static void setReceiver(ItemStack stack, BlockPos pos, int dimension) { NBTTagCompound tag = new NBTTagCompound(); tag.setInteger(NBT_RECEIVER_X, pos.getX()); tag.setInteger(NBT_RECEIVER_Y, pos.getY()); tag.setInteger(NBT_RECEIVER_Z, pos.getZ()); + tag.setInteger(NBT_DIMENSION, dimension); stack.setTagCompound(tag); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 92b48a8ae..1bce6ced6 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -24,6 +24,7 @@ public class TileNetworkTransmitter extends TileNode { receiver = null; } else { receiver = ItemNetworkCard.getReceiver(card); + receiverDimension = ItemNetworkCard.getDimension(card); } if (network != null) { @@ -31,12 +32,16 @@ public class TileNetworkTransmitter extends TileNode { } } }; - private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this); private BlockPos receiver; + private int receiverDimension; private boolean couldUpdate; + // Used clientside + private int distance; + private boolean inSameDimension; + @Override public void updateNode() { } @@ -51,9 +56,8 @@ public class TileNetworkTransmitter extends TileNode { } } - @Override - public boolean canConduct() { - return canUpdate(); + public boolean canTransmit() { + return receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && isInSameDimension(); } @Override @@ -61,7 +65,6 @@ public class TileNetworkTransmitter extends TileNode { super.write(tag); writeItems(networkCard, 0, tag); - writeItems(upgrade, 1, tag); return tag; } @@ -71,29 +74,22 @@ public class TileNetworkTransmitter extends TileNode { super.read(tag); readItems(networkCard, 0, tag); - readItems(upgrade, 1, tag); } @Override public void writeContainerData(ByteBuf buf) { super.writeContainerData(buf); - buf.writeBoolean(receiver != null); - - if (receiver != null) { - buf.writeLong(receiver.toLong()); - } + buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); + buf.writeBoolean(isInSameDimension()); } @Override public void readContainerData(ByteBuf buf) { super.readContainerData(buf); - if (buf.readBoolean()) { - receiver = BlockPos.fromLong(buf.readLong()); - } else { - receiver = null; - } + distance = buf.readInt(); + inSameDimension = buf.readBoolean(); } @Override @@ -106,10 +102,6 @@ public class TileNetworkTransmitter extends TileNode { return ContainerNetworkTransmitter.class; } - public ItemHandlerBasic getUpgrade() { - return upgrade; - } - public ItemHandlerBasic getNetworkCard() { return networkCard; } @@ -119,10 +111,18 @@ public class TileNetworkTransmitter extends TileNode { } public int getDistance() { + if (worldObj.isRemote) { + return distance; + } + if (receiver == null) { return 0; } return (int) Math.sqrt(Math.pow(pos.getX() - receiver.getX(), 2) + Math.pow(pos.getY() - receiver.getY(), 2) + Math.pow(pos.getZ() - receiver.getZ(), 2)); } + + public boolean isInSameDimension() { + return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; + } } diff --git a/src/main/java/refinedstorage/tile/controller/TileController.java b/src/main/java/refinedstorage/tile/controller/TileController.java index 3ad95afb3..16030d496 100755 --- a/src/main/java/refinedstorage/tile/controller/TileController.java +++ b/src/main/java/refinedstorage/tile/controller/TileController.java @@ -46,7 +46,10 @@ import refinedstorage.container.ContainerGrid; import refinedstorage.item.ItemPattern; import refinedstorage.network.MessageGridDelta; import refinedstorage.network.MessageGridUpdate; -import refinedstorage.tile.*; +import refinedstorage.tile.ISynchronizedContainer; +import refinedstorage.tile.TileBase; +import refinedstorage.tile.TileCrafter; +import refinedstorage.tile.TileNetworkTransmitter; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; import refinedstorage.tile.externalstorage.ExternalStorage; @@ -424,15 +427,15 @@ public class TileController extends TileBase implements INetworkMaster, IEnergyR newNodes.add(node); newNodesPos.add(node.getPosition()); - if (node.canConduct()) { - if (tile instanceof TileNetworkTransmitter) { - BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); + if (tile instanceof TileNetworkTransmitter) { + BlockPos receiver = ((TileNetworkTransmitter) tile).getReceiver(); - if (receiver != null && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && checked.add(receiver)) { - toCheck.add(receiver); - } + if (((TileNetworkTransmitter) tile).canTransmit() && checked.add(receiver)) { + toCheck.add(receiver); } + } + if (node.canConduct()) { for (EnumFacing facing : EnumFacing.VALUES) { BlockPos pos = currentPos.offset(facing); diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index a24aaca49..1a480b5ea 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -33,7 +33,8 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Create Pattern gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks -gui.refinedstorage:network_transmitter.distance_missing=Missing Network Card +gui.refinedstorage:network_transmitter.missing_card=Missing Network Card +gui.refinedstorage:network_transmitter.different_dimension=Different dimension misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index a145b0143..b96c9f100 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -33,7 +33,8 @@ gui.refinedstorage:processing_pattern_encoder.pattern_create=Patroon maken gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken -gui.refinedstorage:network_transmitter.distance_missing=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t