diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 6fb65a6cc..dee62f6fa 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -20,4 +20,5 @@ public final class RefinedStorageGui { public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; public static final int NETWORK_TRANSMITTER = 18; + public static final int NETWORK_RECEIVER = 19; } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index 3a0208f8c..3f37bab2c 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -1,8 +1,15 @@ package refinedstorage.block; import net.minecraft.block.state.IBlockState; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; import refinedstorage.tile.TileNetworkReceiver; public class BlockNetworkReceiver extends BlockNode { @@ -10,6 +17,15 @@ public class BlockNetworkReceiver extends BlockNode { super("network_receiver"); } + @Override + public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumHand hand, ItemStack heldItem, EnumFacing side, float hitX, float hitY, float hitZ) { + if (!world.isRemote) { + player.openGui(RefinedStorage.INSTANCE, RefinedStorageGui.NETWORK_RECEIVER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkReceiver(); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java b/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java new file mode 100755 index 000000000..3e94ad9eb --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerNetworkReceiver.java @@ -0,0 +1,11 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; + +public class ContainerNetworkReceiver extends ContainerBase { + public ContainerNetworkReceiver(EntityPlayer player) { + super(player); + + addPlayerInventory(8, 50); + } +} diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java index 576d78d56..f87d364b8 100755 --- a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -1,6 +1,8 @@ package refinedstorage.container; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; import net.minecraftforge.items.SlotItemHandler; import refinedstorage.tile.TileNetworkTransmitter; @@ -12,4 +14,31 @@ public class ContainerNetworkTransmitter extends ContainerBase { addPlayerInventory(8, 55); } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack(); + + if (index == 0) { + if (!mergeItemStack(stack, 1, inventorySlots.size(), false)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 1, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index be609c238..77803e66a 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -52,6 +52,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); case RefinedStorageGui.NETWORK_TRANSMITTER: return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); + case RefinedStorageGui.NETWORK_RECEIVER: + return new ContainerNetworkReceiver(player); default: return null; } @@ -111,6 +113,8 @@ public class GuiHandler implements IGuiHandler { return new GuiGridFilter(getGridFilterContainer(player, x)); case RefinedStorageGui.NETWORK_TRANSMITTER: return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); + case RefinedStorageGui.NETWORK_RECEIVER: + return new GuiNetworkReceiver((ContainerNetworkReceiver) getContainer(ID, player, tile), (TileNetworkReceiver) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java b/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java new file mode 100755 index 000000000..85425a2a2 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiNetworkReceiver.java @@ -0,0 +1,37 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerNetworkReceiver; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileNetworkReceiver; + +public class GuiNetworkReceiver extends GuiBase { + private TileNetworkReceiver networkReceiver; + + public GuiNetworkReceiver(ContainerNetworkReceiver container, TileNetworkReceiver networkReceiver) { + super(container, 176, 131); + + this.networkReceiver = networkReceiver; + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(networkReceiver)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/network_receiver.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:network_receiver")); + drawString(7, 39, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java index c2ea0f0be..d53fd3b8f 100755 --- a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -39,6 +39,8 @@ public class GuiNetworkTransmitter extends GuiBase { distance = t("gui.refinedstorage:network_transmitter.different_dimension"); } else if (networkTransmitter.getDistance() == -1) { distance = t("gui.refinedstorage:network_transmitter.missing_card"); + } else if (!networkTransmitter.isReceiverValid()) { + distance = t("gui.refinedstorage:network_transmitter.missing_receiver"); } else { distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); } diff --git a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java index 58a05c267..728c7abc1 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkReceiver.java +++ b/src/main/java/refinedstorage/tile/TileNetworkReceiver.java @@ -2,6 +2,7 @@ package refinedstorage.tile; import net.minecraft.inventory.Container; import refinedstorage.RefinedStorage; +import refinedstorage.container.ContainerNetworkReceiver; public class TileNetworkReceiver extends TileNode { public TileNetworkReceiver() { @@ -19,6 +20,6 @@ public class TileNetworkReceiver extends TileNode { @Override public Class getContainer() { - return null; + return ContainerNetworkReceiver.class; } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 20d7fd925..1a731a7a9 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -39,6 +39,7 @@ public class TileNetworkTransmitter extends TileNode { // Used clientside private int distance; private boolean inSameDimension; + private boolean receiverValid; public TileNetworkTransmitter() { rebuildOnUpdateChange = true; @@ -52,8 +53,7 @@ public class TileNetworkTransmitter extends TileNode { return canUpdate() && receiver != null && isInSameDimension() - && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver - && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate(); + && isReceiverValid(); } @Override @@ -78,6 +78,7 @@ public class TileNetworkTransmitter extends TileNode { buf.writeInt((receiver != null && isInSameDimension()) ? getDistance() : -1); buf.writeBoolean(isInSameDimension()); + buf.writeBoolean(isReceiverValid()); } @Override @@ -86,6 +87,7 @@ public class TileNetworkTransmitter extends TileNode { distance = buf.readInt(); inSameDimension = buf.readBoolean(); + receiverValid = buf.readBoolean(); } @Override @@ -121,4 +123,8 @@ public class TileNetworkTransmitter extends TileNode { public boolean isInSameDimension() { return worldObj.isRemote ? inSameDimension : worldObj.provider.getDimension() == receiverDimension; } + + public boolean isReceiverValid() { + return worldObj.isRemote ? receiverValid : (receiver != null && isInSameDimension() && worldObj.getTileEntity(receiver) instanceof TileNetworkReceiver && ((TileNetworkReceiver) worldObj.getTileEntity(receiver)).canUpdate()); + } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index 1a480b5ea..d50ddd128 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -34,7 +34,9 @@ gui.refinedstorage:grid_filter=Grid Filter gui.refinedstorage:network_transmitter=Network Transmitter gui.refinedstorage:network_transmitter.distance=%d blocks gui.refinedstorage:network_transmitter.missing_card=Missing Network Card +gui.refinedstorage:network_transmitter.missing_receiver=Receiver not found gui.refinedstorage:network_transmitter.different_dimension=Different dimension +gui.refinedstorage:network_receiver=Network Receiver 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 b96c9f100..7e06994ae 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -34,7 +34,9 @@ gui.refinedstorage:grid_filter=Rooster Filter gui.refinedstorage:network_transmitter=Netwerkzender gui.refinedstorage:network_transmitter.distance=%d blokken gui.refinedstorage:network_transmitter.missing_card=Geen Netwerkkaart +gui.refinedstorage:network_transmitter.missing_receiver=Ontvanger niet gevonden gui.refinedstorage:network_transmitter.different_dimension=Andere dimensie +gui.refinedstorage:network_receiver=Netwerkontvanger misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t diff --git a/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png b/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png new file mode 100755 index 000000000..1f102b2c0 Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/gui/network_receiver.png differ diff --git a/src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png b/src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png new file mode 100755 index 000000000..174bfcf7a Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/gui/network_transmitter.png differ