diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index e07961b75..6fb65a6cc 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -19,4 +19,5 @@ public final class RefinedStorageGui { public static final int CRAFTER = 15; public static final int PROCESSING_PATTERN_ENCODER = 16; public static final int GRID_FILTER = 17; + public static final int NETWORK_TRANSMITTER = 18; } diff --git a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java index 28f29b7a9..3a0208f8c 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkReceiver.java +++ b/src/main/java/refinedstorage/block/BlockNetworkReceiver.java @@ -5,7 +5,7 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import refinedstorage.tile.TileNetworkReceiver; -public class BlockNetworkReceiver extends BlockBase { +public class BlockNetworkReceiver extends BlockNode { public BlockNetworkReceiver() { super("network_receiver"); } diff --git a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java index dd0ed92a4..6dca66146 100755 --- a/src/main/java/refinedstorage/block/BlockNetworkTransmitter.java +++ b/src/main/java/refinedstorage/block/BlockNetworkTransmitter.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.TileNetworkTransmitter; public class BlockNetworkTransmitter extends BlockNode { @@ -10,6 +17,15 @@ public class BlockNetworkTransmitter extends BlockNode { super("network_transmitter"); } + @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_TRANSMITTER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } + @Override public TileEntity createTileEntity(World world, IBlockState state) { return new TileNetworkTransmitter(); diff --git a/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java new file mode 100755 index 000000000..d7d1d658e --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerNetworkTransmitter.java @@ -0,0 +1,16 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraftforge.items.SlotItemHandler; +import refinedstorage.tile.TileNetworkTransmitter; + +public class ContainerNetworkTransmitter extends ContainerBase { + public ContainerNetworkTransmitter(EntityPlayer player, TileNetworkTransmitter networkTransmitter) { + 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/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 68160ebfe..be609c238 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -50,6 +50,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerCrafter(player, (TileCrafter) tile); case RefinedStorageGui.PROCESSING_PATTERN_ENCODER: return new ContainerProcessingPatternEncoder(player, (TileProcessingPatternEncoder) tile); + case RefinedStorageGui.NETWORK_TRANSMITTER: + return new ContainerNetworkTransmitter(player, (TileNetworkTransmitter) tile); default: return null; } @@ -107,6 +109,8 @@ public class GuiHandler implements IGuiHandler { return new GuiProcessingPatternEncoder((ContainerProcessingPatternEncoder) getContainer(ID, player, tile), (TileProcessingPatternEncoder) tile); case RefinedStorageGui.GRID_FILTER: return new GuiGridFilter(getGridFilterContainer(player, x)); + case RefinedStorageGui.NETWORK_TRANSMITTER: + return new GuiNetworkTransmitter((ContainerNetworkTransmitter) getContainer(ID, player, tile), (TileNetworkTransmitter) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java new file mode 100755 index 000000000..39296169b --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiNetworkTransmitter.java @@ -0,0 +1,47 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerNetworkTransmitter; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileNetworkTransmitter; + +public class GuiNetworkTransmitter extends GuiBase { + private TileNetworkTransmitter networkTransmitter; + + public GuiNetworkTransmitter(ContainerNetworkTransmitter container, TileNetworkTransmitter networkTransmitter) { + super(container, 211, 137); + + this.networkTransmitter = networkTransmitter; + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(networkTransmitter)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/network_transmitter.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:network_transmitter")); + + String distance; + + if (networkTransmitter.getReceiver() == null) { + distance = t("gui.refinedstorage:network_transmitter.distance_missing"); + } else { + distance = t("gui.refinedstorage:network_transmitter.distance", networkTransmitter.getDistance()); + } + + drawString(50, 24, distance); + drawString(7, 42, t("container.inventory")); + } +} \ No newline at end of file diff --git a/src/main/java/refinedstorage/item/ItemNetworkCard.java b/src/main/java/refinedstorage/item/ItemNetworkCard.java index 1df70d1d9..c6cb03038 100755 --- a/src/main/java/refinedstorage/item/ItemNetworkCard.java +++ b/src/main/java/refinedstorage/item/ItemNetworkCard.java @@ -1,7 +1,69 @@ package refinedstorage.item; +import net.minecraft.block.Block; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumActionResult; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.EnumHand; +import net.minecraft.util.math.BlockPos; +import net.minecraft.world.World; +import refinedstorage.RefinedStorageBlocks; + +import java.util.List; + 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"; + public ItemNetworkCard() { super("network_card"); } + + @Override + public EnumActionResult onItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) { + Block block = world.getBlockState(pos).getBlock(); + + if (block == RefinedStorageBlocks.NETWORK_RECEIVER) { + setReceiver(stack, pos); + + return EnumActionResult.SUCCESS; + } + + return EnumActionResult.PASS; + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List tooltip, boolean advanced) { + super.addInformation(stack, player, tooltip, advanced); + + BlockPos pos = getReceiver(stack); + + if (pos != null) { + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.0", pos.getX())); + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.1", pos.getY())); + tooltip.add(I18n.format("misc.refinedstorage:network_card.tooltip.2", pos.getZ())); + } + } + + public static BlockPos getReceiver(ItemStack stack) { + if (stack.hasTagCompound() && stack.getTagCompound().hasKey(NBT_RECEIVER_X) && stack.getTagCompound().hasKey(NBT_RECEIVER_Y) && stack.getTagCompound().hasKey(NBT_RECEIVER_Z)) { + return new BlockPos(stack.getTagCompound().getInteger(NBT_RECEIVER_X), stack.getTagCompound().getInteger(NBT_RECEIVER_Y), stack.getTagCompound().getInteger(NBT_RECEIVER_Z)); + } + + return null; + } + + public static void setReceiver(ItemStack stack, BlockPos pos) { + 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()); + + stack.setTagCompound(tag); + } } diff --git a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java index 249923197..8b7e3cc61 100755 --- a/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java +++ b/src/main/java/refinedstorage/tile/TileNetworkTransmitter.java @@ -1,12 +1,79 @@ package refinedstorage.tile; +import io.netty.buffer.ByteBuf; import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.math.BlockPos; +import refinedstorage.RefinedStorageItems; +import refinedstorage.container.ContainerNetworkTransmitter; +import refinedstorage.inventory.ItemHandlerBasic; +import refinedstorage.inventory.ItemValidatorBasic; +import refinedstorage.item.ItemNetworkCard; public class TileNetworkTransmitter extends TileNode { + private ItemHandlerBasic networkCard = new ItemHandlerBasic(1, this, new ItemValidatorBasic(RefinedStorageItems.NETWORK_CARD)) { + @Override + protected void onContentsChanged(int slot) { + super.onContentsChanged(slot); + + ItemStack card = getStackInSlot(slot); + + if (card == null) { + receiver = null; + } else { + receiver = ItemNetworkCard.getReceiver(card); + } + } + }; + private ItemHandlerBasic upgrade = new ItemHandlerBasic(1, this); + + private BlockPos receiver; + @Override public void updateNode() { } + @Override + public NBTTagCompound write(NBTTagCompound tag) { + super.write(tag); + + writeItems(networkCard, 0, tag); + writeItems(upgrade, 1, tag); + + return tag; + } + + @Override + public void read(NBTTagCompound tag) { + 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()); + } + } + + @Override + public void readContainerData(ByteBuf buf) { + super.readContainerData(buf); + + if (buf.readBoolean()) { + receiver = BlockPos.fromLong(buf.readLong()); + } else { + receiver = null; + } + } + @Override public int getEnergyUsage() { return 0; @@ -14,6 +81,26 @@ public class TileNetworkTransmitter extends TileNode { @Override public Class getContainer() { - return null; + return ContainerNetworkTransmitter.class; + } + + public ItemHandlerBasic getUpgrade() { + return upgrade; + } + + public ItemHandlerBasic getNetworkCard() { + return networkCard; + } + + public BlockPos getReceiver() { + return receiver; + } + + public int getDistance() { + 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)); } } diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index e39b67f73..a24aaca49 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Processing gui.refinedstorage:processing_pattern_encoder=Processing Pattern Encoder 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 misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Usage: %d RS/t @@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=There is no Wireless Transmitter in range. misc.refinedstorage:wireless_grid.not_found=Controller not found. +misc.refinedstorage:network_card.tooltip.0=X: %d +misc.refinedstorage:network_card.tooltip.1=Y: %d +misc.refinedstorage:network_card.tooltip.2=Z: %d + misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs @@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Wireless Transmitter block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Processing Pattern Encoder -block.refinedstorage:network_receiver.name=Wireless Receiver -block.refinedstorage:network_transmitter.name=Wireless Transmitter +block.refinedstorage:network_receiver.name=Network Receiver +block.refinedstorage:network_transmitter.name=Network Transmitter item.refinedstorage:storage_disk.0.name=1k Storage Disk item.refinedstorage:storage_disk.1.name=4k Storage Disk diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index a86588188..a145b0143 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -31,6 +31,9 @@ gui.refinedstorage:crafter.processing=Verwerking gui.refinedstorage:processing_pattern_encoder=Verwerkingspatroon Codeerder 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 misc.refinedstorage:energy_stored=%d / %d RS misc.refinedstorage:energy_usage=Vebruik: %d RS/t @@ -48,6 +51,10 @@ misc.refinedstorage:wireless_grid.tooltip.2=Z: %d misc.refinedstorage:wireless_grid.out_of_range=Er is geen Draadloze Zender binnen bereik. misc.refinedstorage:wireless_grid.not_found=Controller niet gevonden. +misc.refinedstorage:network_card.tooltip.0=X: %d +misc.refinedstorage:network_card.tooltip.1=Y: %d +misc.refinedstorage:network_card.tooltip.2=Z: %d + misc.refinedstorage:pattern.inputs=Inputs misc.refinedstorage:pattern.outputs=Outputs @@ -115,8 +122,8 @@ block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Draadloze Zender block.refinedstorage:crafter.name=Crafter block.refinedstorage:processing_pattern_encoder.name=Verwerkingspatroon Codeerder -block.refinedstorage:network_receiver.name=Draadloze Networkontvanger -block.refinedstorage:network_transmitter.name=Draadloze Netwerkzender +block.refinedstorage:network_receiver.name=Netwerkontvanger +block.refinedstorage:network_transmitter.name=Netwerkzender item.refinedstorage:storage_disk.0.name=1k Opslagschijf item.refinedstorage:storage_disk.1.name=4k Opslagschijf