From af704aee234160daecba0d56e52b5d80e23bcb49 Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Sun, 20 Mar 2016 21:28:14 +0100 Subject: [PATCH] Interface base block (with inventory) --- .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../refinedstorage/block/BlockInterface.java | 37 ++++ .../container/ContainerConstructor.java | 2 +- .../container/ContainerDetector.java | 2 +- .../container/ContainerExporter.java | 2 +- .../container/ContainerImporter.java | 2 +- .../container/ContainerInterface.java | 32 +++ .../container/ContainerStorage.java | 2 +- .../container/slot/SlotSpecimen.java | 8 +- .../java/refinedstorage/gui/GuiHandler.java | 4 + .../java/refinedstorage/gui/GuiInterface.java | 44 +++++ .../refinedstorage/proxy/CommonProxy.java | 4 +- .../refinedstorage/tile/TileInterface.java | 183 ++++++++++++++++++ .../assets/refinedstorage/lang/en_US.lang | 3 + .../assets/refinedstorage/lang/nl_NL.lang | 3 + .../refinedstorage/textures/gui/importer.png | Bin 1794 -> 1794 bytes .../refinedstorage/textures/gui/interface.png | Bin 0 -> 1904 bytes 18 files changed, 322 insertions(+), 8 deletions(-) create mode 100644 src/main/java/refinedstorage/block/BlockInterface.java create mode 100644 src/main/java/refinedstorage/container/ContainerInterface.java create mode 100644 src/main/java/refinedstorage/gui/GuiInterface.java create mode 100644 src/main/java/refinedstorage/tile/TileInterface.java create mode 100644 src/main/resources/assets/refinedstorage/textures/gui/interface.png diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 0201e0821..34a084d99 100644 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -19,4 +19,5 @@ public final class RefinedStorageBlocks public static final BlockConstructor CONSTRUCTOR = new BlockConstructor(); public static final BlockStorage STORAGE = new BlockStorage(); public static final BlockRelay RELAY = new BlockRelay(); + public static final BlockInterface INTERFACE = new BlockInterface(); } diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index eb9508ade..9c5dce36a 100644 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -14,4 +14,5 @@ public final class RefinedStorageGui public static final int CONSTRUCTOR = 10; public static final int STORAGE = 11; public static final int RELAY = 12; + public static final int INTERFACE = 13; } diff --git a/src/main/java/refinedstorage/block/BlockInterface.java b/src/main/java/refinedstorage/block/BlockInterface.java new file mode 100644 index 000000000..54c003f41 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockInterface.java @@ -0,0 +1,37 @@ +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.world.World; +import refinedstorage.RefinedStorage; +import refinedstorage.RefinedStorageGui; +import refinedstorage.tile.TileInterface; + +public class BlockInterface extends BlockMachine +{ + public BlockInterface() + { + super("interface"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) + { + return new TileInterface(); + } + + @Override + public boolean onBlockActivated(World world, net.minecraft.util.math.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.INTERFACE, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerConstructor.java b/src/main/java/refinedstorage/container/ContainerConstructor.java index 3dd4add9c..9e780e64b 100644 --- a/src/main/java/refinedstorage/container/ContainerConstructor.java +++ b/src/main/java/refinedstorage/container/ContainerConstructor.java @@ -13,7 +13,7 @@ public class ContainerConstructor extends ContainerBase { public SlotConstructor(IInventory inventory, int id, int x, int y) { - super(inventory, id, x, y); + super(inventory, id, x, y, false); } @Override diff --git a/src/main/java/refinedstorage/container/ContainerDetector.java b/src/main/java/refinedstorage/container/ContainerDetector.java index d5b94568e..b89996610 100644 --- a/src/main/java/refinedstorage/container/ContainerDetector.java +++ b/src/main/java/refinedstorage/container/ContainerDetector.java @@ -10,7 +10,7 @@ public class ContainerDetector extends ContainerBase { super(player); - addSlotToContainer(new SlotSpecimen(detector.getInventory(), 0, 107, 20)); + addSlotToContainer(new SlotSpecimen(detector.getInventory(), 0, 107, 20, false)); addPlayerInventory(8, 55); } diff --git a/src/main/java/refinedstorage/container/ContainerExporter.java b/src/main/java/refinedstorage/container/ContainerExporter.java index 07e9bddee..65132fda8 100644 --- a/src/main/java/refinedstorage/container/ContainerExporter.java +++ b/src/main/java/refinedstorage/container/ContainerExporter.java @@ -12,7 +12,7 @@ public class ContainerExporter extends ContainerBase for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(exporter.getInventory(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimen(exporter.getInventory(), i, 8 + (18 * i), 20, false)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/ContainerImporter.java b/src/main/java/refinedstorage/container/ContainerImporter.java index 92807eeaa..b5234f525 100644 --- a/src/main/java/refinedstorage/container/ContainerImporter.java +++ b/src/main/java/refinedstorage/container/ContainerImporter.java @@ -12,7 +12,7 @@ public class ContainerImporter extends ContainerBase for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(importer.getInventory(), i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimen(importer.getInventory(), i, 8 + (18 * i), 20, false)); } addPlayerInventory(8, 55); diff --git a/src/main/java/refinedstorage/container/ContainerInterface.java b/src/main/java/refinedstorage/container/ContainerInterface.java new file mode 100644 index 000000000..b2e03e953 --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerInterface.java @@ -0,0 +1,32 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import refinedstorage.container.slot.SlotOutput; +import refinedstorage.container.slot.SlotSpecimen; +import refinedstorage.tile.TileInterface; + +public class ContainerInterface extends ContainerBase +{ + public ContainerInterface(EntityPlayer player, TileInterface tile) + { + super(player); + + for (int i = 0; i < 9; ++i) + { + addSlotToContainer(new Slot(tile, i, 8 + (18 * i), 20)); + } + + for (int i = 9; i < 18; ++i) + { + addSlotToContainer(new SlotSpecimen(tile, i, 8 + (18 * (i - 9)), 54, true)); + } + + for (int i = 18; i < 27; ++i) + { + addSlotToContainer(new SlotOutput(tile, i, 8 + (18 * (i - 18)), 100)); + } + + addPlayerInventory(8, 136); + } +} diff --git a/src/main/java/refinedstorage/container/ContainerStorage.java b/src/main/java/refinedstorage/container/ContainerStorage.java index 1d2c0c88f..7c4fd8974 100644 --- a/src/main/java/refinedstorage/container/ContainerStorage.java +++ b/src/main/java/refinedstorage/container/ContainerStorage.java @@ -12,7 +12,7 @@ public class ContainerStorage extends ContainerBase for (int i = 0; i < 9; ++i) { - addSlotToContainer(new SlotSpecimen(inventory, i, 8 + (18 * i), 20)); + addSlotToContainer(new SlotSpecimen(inventory, i, 8 + (18 * i), 20, false)); } addPlayerInventory(8, 129); diff --git a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java index 860d5e11d..33386673e 100644 --- a/src/main/java/refinedstorage/container/slot/SlotSpecimen.java +++ b/src/main/java/refinedstorage/container/slot/SlotSpecimen.java @@ -7,9 +7,13 @@ import net.minecraft.item.ItemStack; public class SlotSpecimen extends Slot { - public SlotSpecimen(IInventory inventory, int id, int x, int y) + private boolean allowSize; + + public SlotSpecimen(IInventory inventory, int id, int x, int y, boolean allowSize) { super(inventory, id, x, y); + + this.allowSize = allowSize; } @Override @@ -27,7 +31,7 @@ public class SlotSpecimen extends Slot @Override public void putStack(ItemStack stack) { - if (stack != null) + if (stack != null && !allowSize) { stack.stackSize = 1; } diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 1ad6a9d56..46a9f92b3 100644 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -41,6 +41,8 @@ public class GuiHandler implements IGuiHandler return new ContainerStorage(player, ((IStorageGui) tile).getInventory()); case RefinedStorageGui.RELAY: return new ContainerRelay(player); + case RefinedStorageGui.INTERFACE: + return new ContainerInterface(player, (TileInterface) tile); default: return null; } @@ -83,6 +85,8 @@ public class GuiHandler implements IGuiHandler return new GuiStorage((ContainerStorage) getContainer(ID, player, tile), (IStorageGui) tile); case RefinedStorageGui.RELAY: return new GuiRelay((ContainerRelay) getContainer(ID, player, tile), (TileRelay) tile); + case RefinedStorageGui.INTERFACE: + return new GuiInterface((ContainerInterface) getContainer(ID, player, tile), (TileInterface) tile); default: return null; } diff --git a/src/main/java/refinedstorage/gui/GuiInterface.java b/src/main/java/refinedstorage/gui/GuiInterface.java new file mode 100644 index 000000000..b80e7b273 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiInterface.java @@ -0,0 +1,44 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerInterface; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileInterface; + +public class GuiInterface extends GuiBase +{ + private TileInterface tile; + + public GuiInterface(ContainerInterface container, TileInterface tile) + { + super(container, 176, 218); + + this.tile = tile; + } + + @Override + public void init(int x, int y) + { + addSideButton(new SideButtonRedstoneMode(tile)); + } + + @Override + public void update(int x, int y) + { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) + { + bindTexture("gui/interface.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) + { + drawString(7, 7, t("gui.refinedstorage:interface.import")); + drawString(7, 42, t("gui.refinedstorage:interface.export")); + drawString(7, 123, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 2665bdb5c..e1a06621b 100644 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -53,6 +53,7 @@ public class CommonProxy GameRegistry.registerTileEntity(TileConstructor.class, "constructor"); GameRegistry.registerTileEntity(TileStorage.class, "storage"); GameRegistry.registerTileEntity(TileRelay.class, "relay"); + GameRegistry.registerTileEntity(TileInterface.class, "interface"); GameRegistry.registerBlock(RefinedStorageBlocks.CONTROLLER, ItemBlockController.class, "controller"); GameRegistry.registerBlock(RefinedStorageBlocks.CABLE, "cable"); @@ -68,7 +69,8 @@ public class CommonProxy GameRegistry.registerBlock(RefinedStorageBlocks.DESTRUCTOR, "destructor"); GameRegistry.registerBlock(RefinedStorageBlocks.CONSTRUCTOR, "constructor"); GameRegistry.registerBlock(RefinedStorageBlocks.STORAGE, ItemBlockStorage.class, "storage"); - GameRegistry.registerBlock(RefinedStorageBlocks.RELAY, "relay"); + GameRegistry.registerBlock(RefinedStorageBlocks.RELAY, "relay"); // @TODO: Recipe + GameRegistry.registerBlock(RefinedStorageBlocks.INTERFACE, "interface"); // @TODO: Recipe GameRegistry.registerItem(RefinedStorageItems.STORAGE_CELL, "storage_cell"); GameRegistry.registerItem(RefinedStorageItems.WIRELESS_GRID, "wireless_grid"); diff --git a/src/main/java/refinedstorage/tile/TileInterface.java b/src/main/java/refinedstorage/tile/TileInterface.java new file mode 100644 index 000000000..a47d600dd --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileInterface.java @@ -0,0 +1,183 @@ +package refinedstorage.tile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumFacing; +import net.minecraft.util.text.ITextComponent; +import refinedstorage.inventory.InventorySimple; +import refinedstorage.util.InventoryUtils; + +public class TileInterface extends TileMachine implements ISidedInventory +{ + // 1st row for import + // 2st row for specimen to export + // 3st row for export + private InventorySimple inventory = new InventorySimple("interface", 9 * 3); + + @Override + public int getEnergyUsage() + { + return 5; + } + + @Override + public void updateMachine() + { + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + + InventoryUtils.restoreInventory(this, 0, nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + + InventoryUtils.saveInventory(this, 0, nbt); + } + + @Override + public int getSizeInventory() + { + return inventory.getSizeInventory(); + } + + @Override + public ItemStack getStackInSlot(int slot) + { + return inventory.getStackInSlot(slot); + } + + @Override + public ItemStack decrStackSize(int slot, int count) + { + return inventory.decrStackSize(slot, count); + } + + @Override + public ItemStack removeStackFromSlot(int slot) + { + return inventory.removeStackFromSlot(slot); + } + + @Override + public void setInventorySlotContents(int slot, ItemStack stack) + { + inventory.setInventorySlotContents(slot, stack); + } + + @Override + public int getInventoryStackLimit() + { + return inventory.getInventoryStackLimit(); + } + + @Override + public boolean isUseableByPlayer(EntityPlayer player) + { + return inventory.isUseableByPlayer(player); + } + + @Override + public void openInventory(EntityPlayer player) + { + inventory.openInventory(player); + } + + @Override + public void closeInventory(EntityPlayer player) + { + inventory.closeInventory(player); + } + + @Override + public boolean isItemValidForSlot(int slot, ItemStack stack) + { + return inventory.isItemValidForSlot(slot, stack); + } + + @Override + public int getField(int id) + { + return inventory.getField(id); + } + + @Override + public void setField(int id, int value) + { + inventory.setField(id, value); + } + + @Override + public int getFieldCount() + { + return inventory.getFieldCount(); + } + + @Override + public void clear() + { + inventory.clear(); + } + + @Override + public String getName() + { + return inventory.getName(); + } + + @Override + public boolean hasCustomName() + { + return inventory.hasCustomName(); + } + + @Override + public ITextComponent getDisplayName() + { + return inventory.getDisplayName(); + } + + @Override + public IInventory getDroppedInventory() + { + return inventory; + } + + @Override + public int[] getSlotsForFace(EnumFacing side) + { + if (side == EnumFacing.DOWN) + { + return new int[] + { + 18, 19, 20, 21, 22, 23, 24, 25, 26 + }; + } + + return new int[] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8 + }; + } + + @Override + public boolean canInsertItem(int slot, ItemStack stack, EnumFacing side) + { + return slot < 9; + } + + @Override + public boolean canExtractItem(int slot, ItemStack stack, EnumFacing side) + { + return slot >= 18; + } +} diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index bcdaf0f2b..65f2b9549 100644 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -13,6 +13,8 @@ gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:destructor=Destructor gui.refinedstorage:constructor=Constructor gui.refinedstorage:relay=Relay +gui.refinedstorage:interface.import=Interface Import +gui.refinedstorage:interface.export=Interface Export misc.refinedstorage:energy_stored=%d / %d RF misc.refinedstorage:energy_usage=Usage: %d RF/t @@ -83,6 +85,7 @@ block.refinedstorage:storage.2.name=16k Storage Block block.refinedstorage:storage.3.name=64k Storage Block block.refinedstorage:storage.4.name=Creative Storage Block block.refinedstorage:relay.name=Relay +block.refinedstorage:interface.name=Interface item.refinedstorage:storage_cell.0.name=1k Storage Cell item.refinedstorage:storage_cell.1.name=4k Storage Cell diff --git a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang index a2a95e0c4..3f88f0603 100644 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -13,6 +13,8 @@ gui.refinedstorage:wireless_transmitter=Draadloze Zender gui.refinedstorage:destructor=Destructor gui.refinedstorage:constructor=Constructor gui.refinedstorage:relay=Relais +gui.refinedstorage:interface.import=Interface Import +gui.refinedstorage:interface.export=Interface Export misc.refinedstorage:energy_stored=%d / %d RF misc.refinedstorage:energy_usage=Vebruik: %d RF/t @@ -83,6 +85,7 @@ block.refinedstorage:storage.2.name=16k Opslag Blok block.refinedstorage:storage.3.name=64k Opslag Blok block.refinedstorage:storage.4.name=Creative Opslag Blok block.refinedstorage:relay.name=Relais +block.refinedstorage:interface.name=Interface item.refinedstorage:storage_cell.0.name=1k Opslagcel item.refinedstorage:storage_cell.1.name=4k Opslagcel diff --git a/src/main/resources/assets/refinedstorage/textures/gui/importer.png b/src/main/resources/assets/refinedstorage/textures/gui/importer.png index afbdcd0bfd16c6f9ddee89ec74a2ccd54a236d34..1b211bdc15c784168c094cda6863c49a87d3f560 100644 GIT binary patch delta 33 ocmZqTYvS7w!oszmfq`#7qXlcQ%H%i}c~;9D<2t|1O)L#e0F{jh>;M1& delta 33 pcmZqTYvS7w!oqccfr0M;W7f4!&dG5s@~mcmdXn#NZenR*0sypZ3upiU diff --git a/src/main/resources/assets/refinedstorage/textures/gui/interface.png b/src/main/resources/assets/refinedstorage/textures/gui/interface.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e1c90d19a2e85affa5a95048932f6c3a0c63bf GIT binary patch literal 1904 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5D>38$lZxy-8q?;Kn_c~qpu?a z!^VE@KZ&di49pAxJ|V6^adUI?(9qEC?(Sp9j{X1tA1E>kMnhnPgh10{aTQRmDGBlm z1}6TI3>bpHv#SE5owL9rvY3H^?=T269?xHq0u+=eag8Vm&QB{TPb^AhC`ioAE78kK zEm1JhGtjflF|PAtU|>4w>Eakt5%>1i#jM*70&Rg;JMaIWc-P|JYtx-VX>DmYJ_kx{ z7EdY-$hq-q$K5{5yRWSCj+grJG96#?dw<rD+Wr1 zD7<})|NgvDF8(?{d>5l#UCG~EZIBWmXn3<*2f_lf`;Ti&=>Od|HLXDsSSTv|*5d|A z6@6ty;=P-Gu3BRCv2t6Z@a18<7>hoAS@W^r^kG8i*4B=8)# zem%@Clnr6yiL2hgBG&;Vc7UN_eRRF_ue%jrcbRE%H#i= z8a(sf@bcet1{;=7J2zM|lsDF_$`Lq_e*AAgQwAqPgIU9#$$PVE-dh)!W-XO|@Vou> z(qsQ$)a3)qYcQBlI~~SkxbS^i`Bg9D13f?)nE1|L4QRYCj8A;$gg(A)H*Y8g6dw$*nRU04x3mXu7!TY=ORsq9o&h9l*=gT0$@@a`}cFm0Y(V)5o1XAv&!k7$S z<~|8oYr_2GPU_W)ZIgFeZN0=hLH%vybaJExlxkJJAIC5!2|IHcjJESSJln>2;*J@^%-d`V#kUz!@}!B8oXvbE aubxqj?TEm|=O?v5F7b5rb6Mw<&;$S}KSN>w literal 0 HcmV?d00001