From f861b776e28ac746e7a8190287e532a26392cffd Mon Sep 17 00:00:00 2001 From: Raoul Van den Berge Date: Thu, 28 Apr 2016 22:07:02 +0200 Subject: [PATCH] Crafter block --- .../refinedstorage/RefinedStorageBlocks.java | 1 + .../refinedstorage/RefinedStorageGui.java | 1 + .../refinedstorage/block/BlockCrafter.java | 33 +++++ .../container/ContainerCrafter.java | 73 +++++++++++ .../java/refinedstorage/gui/GuiCrafter.java | 37 ++++++ .../java/refinedstorage/gui/GuiHandler.java | 4 + .../refinedstorage/proxy/ClientProxy.java | 1 + .../refinedstorage/proxy/CommonProxy.java | 2 + .../refinedstorage/tile/TileController.java | 16 +++ .../java/refinedstorage/tile/TileCrafter.java | 119 ++++++++++++++++++ .../refinedstorage/blockstates/crafter.json | 45 +++++++ .../assets/refinedstorage/lang/en_US.lang | 2 + .../assets/refinedstorage/lang/nl_NL.lang | 2 + .../textures/blocks/crafter.png | Bin 0 -> 221 bytes .../refinedstorage/textures/gui/crafter.png | Bin 0 -> 1994 bytes 15 files changed, 336 insertions(+) create mode 100755 src/main/java/refinedstorage/block/BlockCrafter.java create mode 100755 src/main/java/refinedstorage/container/ContainerCrafter.java create mode 100755 src/main/java/refinedstorage/gui/GuiCrafter.java create mode 100755 src/main/java/refinedstorage/tile/TileCrafter.java create mode 100755 src/main/resources/assets/refinedstorage/blockstates/crafter.json create mode 100755 src/main/resources/assets/refinedstorage/textures/blocks/crafter.png create mode 100755 src/main/resources/assets/refinedstorage/textures/gui/crafter.png diff --git a/src/main/java/refinedstorage/RefinedStorageBlocks.java b/src/main/java/refinedstorage/RefinedStorageBlocks.java index 0052446f4..9803fd44b 100755 --- a/src/main/java/refinedstorage/RefinedStorageBlocks.java +++ b/src/main/java/refinedstorage/RefinedStorageBlocks.java @@ -20,4 +20,5 @@ public final class RefinedStorageBlocks { public static final BlockInterface INTERFACE = new BlockInterface(); public static final BlockCraftingMonitor CRAFTING_MONITOR = new BlockCraftingMonitor(); public static final BlockWirelessTransmitter WIRELESS_TRANSMITTER = new BlockWirelessTransmitter(); + public static final BlockCrafter CRAFTER = new BlockCrafter(); } diff --git a/src/main/java/refinedstorage/RefinedStorageGui.java b/src/main/java/refinedstorage/RefinedStorageGui.java index 7608cf5d4..035605d81 100755 --- a/src/main/java/refinedstorage/RefinedStorageGui.java +++ b/src/main/java/refinedstorage/RefinedStorageGui.java @@ -16,4 +16,5 @@ public final class RefinedStorageGui { public static final int WIRELESS_GRID = 14; public static final int CRAFTING_MONITOR = 15; public static final int WIRELESS_TRANSMITTER = 16; + public static final int CRAFTER = 17; } diff --git a/src/main/java/refinedstorage/block/BlockCrafter.java b/src/main/java/refinedstorage/block/BlockCrafter.java new file mode 100755 index 000000000..1f0a151d6 --- /dev/null +++ b/src/main/java/refinedstorage/block/BlockCrafter.java @@ -0,0 +1,33 @@ +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.TileCrafter; + +public class BlockCrafter extends BlockMachine { + public BlockCrafter() { + super("crafter"); + } + + @Override + public TileEntity createTileEntity(World world, IBlockState state) { + return new TileCrafter(); + } + + @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.CRAFTER, world, pos.getX(), pos.getY(), pos.getZ()); + } + + return true; + } +} diff --git a/src/main/java/refinedstorage/container/ContainerCrafter.java b/src/main/java/refinedstorage/container/ContainerCrafter.java new file mode 100755 index 000000000..28f182c8c --- /dev/null +++ b/src/main/java/refinedstorage/container/ContainerCrafter.java @@ -0,0 +1,73 @@ +package refinedstorage.container; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import refinedstorage.RefinedStorageItems; +import refinedstorage.container.slot.IItemValidator; +import refinedstorage.container.slot.SlotFiltered; +import refinedstorage.item.ItemPattern; +import refinedstorage.item.ItemUpgrade; +import refinedstorage.tile.TileCrafter; + +public class ContainerCrafter extends ContainerStorage { + public ContainerCrafter(EntityPlayer player, TileCrafter crafter) { + super(player); + + for (int i = 0; i < 3; ++i) { + addSlotToContainer(new SlotFiltered(crafter, i, 8, 19 + (i * 18), new IItemValidator() { + @Override + public boolean isValid(ItemStack stack) { + return stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.hasResult(stack); + } + })); + } + + for (int i = 3; i < 6; ++i) { + addSlotToContainer(new SlotFiltered(crafter, i, 89, 19 + ((i - 3) * 18), new IItemValidator() { + @Override + public boolean isValid(ItemStack stack) { + return stack.getItem() == RefinedStorageItems.PATTERN && ItemPattern.hasResult(stack); + } + })); + } + + for (int i = 0; i < 4; ++i) { + addSlotToContainer(new SlotFiltered(crafter, 6 + i, 187, 6 + (i * 18), new IItemValidator() { + @Override + public boolean isValid(ItemStack stack) { + return stack.getItem() == RefinedStorageItems.UPGRADE && stack.getMetadata() == ItemUpgrade.TYPE_SPEED; + } + })); + } + + addPlayerInventory(8, 90); + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack stack = null; + + Slot slot = getSlot(index); + + if (slot != null && slot.getHasStack()) { + stack = slot.getStack().copy(); + + if (index < 8) { + if (!mergeItemStack(stack, 6, inventorySlots.size(), true)) { + return null; + } + } else if (!mergeItemStack(stack, 0, 6, false)) { + return null; + } + + if (stack.stackSize == 0) { + slot.putStack(null); + } else { + slot.onSlotChanged(); + } + } + + return stack; + } +} diff --git a/src/main/java/refinedstorage/gui/GuiCrafter.java b/src/main/java/refinedstorage/gui/GuiCrafter.java new file mode 100755 index 000000000..18a7e1065 --- /dev/null +++ b/src/main/java/refinedstorage/gui/GuiCrafter.java @@ -0,0 +1,37 @@ +package refinedstorage.gui; + +import refinedstorage.container.ContainerCrafter; +import refinedstorage.gui.sidebutton.SideButtonRedstoneMode; +import refinedstorage.tile.TileCrafter; + +public class GuiCrafter extends GuiBase { + private TileCrafter crafter; + + public GuiCrafter(ContainerCrafter container, TileCrafter crafter) { + super(container, 211, 173); + + this.crafter = crafter; + } + + @Override + public void init(int x, int y) { + addSideButton(new SideButtonRedstoneMode(crafter)); + } + + @Override + public void update(int x, int y) { + } + + @Override + public void drawBackground(int x, int y, int mouseX, int mouseY) { + bindTexture("gui/crafter.png"); + + drawTexture(x, y, 0, 0, width, height); + } + + @Override + public void drawForeground(int mouseX, int mouseY) { + drawString(7, 7, t("gui.refinedstorage:crafter")); + drawString(7, 77, t("container.inventory")); + } +} diff --git a/src/main/java/refinedstorage/gui/GuiHandler.java b/src/main/java/refinedstorage/gui/GuiHandler.java index 33671814e..deaa7c311 100755 --- a/src/main/java/refinedstorage/gui/GuiHandler.java +++ b/src/main/java/refinedstorage/gui/GuiHandler.java @@ -46,6 +46,8 @@ public class GuiHandler implements IGuiHandler { return new ContainerCraftingMonitor(player); case RefinedStorageGui.WIRELESS_TRANSMITTER: return new ContainerWirelessTransmitter(player, (TileWirelessTransmitter) tile); + case RefinedStorageGui.CRAFTER: + return new ContainerCrafter(player, (TileCrafter) tile); default: return null; } @@ -111,6 +113,8 @@ public class GuiHandler implements IGuiHandler { return new GuiCraftingMonitor((ContainerCraftingMonitor) getContainer(ID, player, tile), (TileCraftingMonitor) tile); case RefinedStorageGui.WIRELESS_TRANSMITTER: return new GuiWirelessTransmitter((ContainerWirelessTransmitter) getContainer(ID, player, tile), (TileWirelessTransmitter) tile); + case RefinedStorageGui.CRAFTER: + return new GuiCrafter((ContainerCrafter) getContainer(ID, player, tile), (TileCrafter) tile); default: return null; } diff --git a/src/main/java/refinedstorage/proxy/ClientProxy.java b/src/main/java/refinedstorage/proxy/ClientProxy.java index b349f1db2..46740e057 100755 --- a/src/main/java/refinedstorage/proxy/ClientProxy.java +++ b/src/main/java/refinedstorage/proxy/ClientProxy.java @@ -111,6 +111,7 @@ public class ClientProxy extends CommonProxy { ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.INTERFACE), 0, new ModelResourceLocation("refinedstorage:interface", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.WIRELESS_TRANSMITTER), 0, new ModelResourceLocation("refinedstorage:wireless_transmitter", "inventory")); ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTING_MONITOR), 0, new ModelResourceLocation("refinedstorage:crafting_monitor", "inventory")); + ModelLoader.setCustomModelResourceLocation(Item.getItemFromBlock(RefinedStorageBlocks.CRAFTER), 0, new ModelResourceLocation("refinedstorage:crafter", "inventory")); ModelLoader.setCustomStateMapper(RefinedStorageBlocks.STORAGE, (new StateMap.Builder()) .ignore(RefinedStorageBlocks.STORAGE.DIRECTION) diff --git a/src/main/java/refinedstorage/proxy/CommonProxy.java b/src/main/java/refinedstorage/proxy/CommonProxy.java index 48c2e530b..5d0d8fe46 100755 --- a/src/main/java/refinedstorage/proxy/CommonProxy.java +++ b/src/main/java/refinedstorage/proxy/CommonProxy.java @@ -68,6 +68,7 @@ public class CommonProxy { GameRegistry.registerTileEntity(TileInterface.class, ID + ":interface"); GameRegistry.registerTileEntity(TileCraftingMonitor.class, ID + ":crafting_monitor"); GameRegistry.registerTileEntity(TileWirelessTransmitter.class, ID + ":wireless_transmitter"); + GameRegistry.registerTileEntity(TileCrafter.class, ID + ":crafter"); registerBlock(RefinedStorageBlocks.CONTROLLER); registerBlock(RefinedStorageBlocks.CABLE); @@ -86,6 +87,7 @@ public class CommonProxy { registerBlock(RefinedStorageBlocks.INTERFACE); registerBlock(RefinedStorageBlocks.CRAFTING_MONITOR); registerBlock(RefinedStorageBlocks.WIRELESS_TRANSMITTER); + registerBlock(RefinedStorageBlocks.CRAFTER); registerItem(RefinedStorageItems.STORAGE_DISK); registerItem(RefinedStorageItems.PATTERN); diff --git a/src/main/java/refinedstorage/tile/TileController.java b/src/main/java/refinedstorage/tile/TileController.java index 74130dd81..ecde07830 100755 --- a/src/main/java/refinedstorage/tile/TileController.java +++ b/src/main/java/refinedstorage/tile/TileController.java @@ -243,6 +243,22 @@ public class TileController extends TileBase implements IEnergyReceiver, INetwor public List getPatterns() { List patterns = new ArrayList(); + Iterator it = machines.iterator(); + + while (it.hasNext()) { + TileMachine machine = it.next(); + + if (machine instanceof TileCrafter) { + TileCrafter crafter = (TileCrafter) machine; + + for (int i = 0; i < TileCrafter.PATTERN_SLOTS; ++i) { + if (crafter.getStackInSlot(i) != null) { + patterns.add(crafter.getStackInSlot(i)); + } + } + } + } + return patterns; } diff --git a/src/main/java/refinedstorage/tile/TileCrafter.java b/src/main/java/refinedstorage/tile/TileCrafter.java new file mode 100755 index 000000000..1625d34bf --- /dev/null +++ b/src/main/java/refinedstorage/tile/TileCrafter.java @@ -0,0 +1,119 @@ +package refinedstorage.tile; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.util.text.ITextComponent; +import refinedstorage.container.ContainerCrafter; +import refinedstorage.inventory.InventorySimple; + +public class TileCrafter extends TileMachine implements IInventory { + private InventorySimple inventory = new InventorySimple("crafter", PATTERN_SLOTS + 4, this); + + public static final int PATTERN_SLOTS = 6; + + @Override + public int getEnergyUsage() { + return 2; + } + + @Override + public void updateMachine() { + } + + @Override + public Class getContainer() { + return ContainerCrafter.class; + } + + @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 boolean hasCustomName() { + return inventory.hasCustomName(); + } + + @Override + public ITextComponent getDisplayName() { + return inventory.getDisplayName(); + } + + @Override + public String getName() { + return inventory.getName(); + } + + @Override + public IInventory getDroppedInventory() { + return inventory; + } +} diff --git a/src/main/resources/assets/refinedstorage/blockstates/crafter.json b/src/main/resources/assets/refinedstorage/blockstates/crafter.json new file mode 100755 index 000000000..244b27d5e --- /dev/null +++ b/src/main/resources/assets/refinedstorage/blockstates/crafter.json @@ -0,0 +1,45 @@ +{ + "forge_marker": 1, + "defaults": { + "model": "orientable", + "textures": { + "side": "refinedstorage:blocks/side", + "top": "refinedstorage:blocks/side", + "front": "refinedstorage:blocks/crafter" + } + }, + "variants": { + "inventory": [ + { + "transform": "forge:default-block", + "y": 0 + } + ], + "connected": { + "true": { + }, + "false": { + } + }, + "direction": { + "north": { + "y": 0 + }, + "east": { + "y": 90 + }, + "south": { + "y": 180 + }, + "west": { + "y": 270 + }, + "up": { + "x": 270 + }, + "down": { + "x": 90 + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/assets/refinedstorage/lang/en_US.lang b/src/main/resources/assets/refinedstorage/lang/en_US.lang index cf68b2c50..2ab81e960 100755 --- a/src/main/resources/assets/refinedstorage/lang/en_US.lang +++ b/src/main/resources/assets/refinedstorage/lang/en_US.lang @@ -23,6 +23,7 @@ gui.refinedstorage:interface.export=Interface Export gui.refinedstorage:crafting_monitor=Crafting Monitor gui.refinedstorage:wireless_transmitter=Wireless Transmitter gui.refinedstorage:wireless_transmitter.distance=%d blocks +gui.refinedstorage:crafter=Crafter misc.refinedstorage:energy_stored=%d / %d RF misc.refinedstorage:energy_usage=Usage: %d RF/t @@ -97,6 +98,7 @@ block.refinedstorage:relay.name=Relay block.refinedstorage:interface.name=Interface block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Wireless Transmitter +block.refinedstorage:crafter.name=Crafter 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 de1952cb4..1885d60a4 100755 --- a/src/main/resources/assets/refinedstorage/lang/nl_NL.lang +++ b/src/main/resources/assets/refinedstorage/lang/nl_NL.lang @@ -23,6 +23,7 @@ gui.refinedstorage:interface.export=Interface Export gui.refinedstorage:crafting_monitor=Crafting Monitor gui.refinedstorage:wireless_transmitter=Draadloze Zender gui.refinedstorage:wireless_transmitter.distance=%d blokken +gui.refinedstorage:crafter=Crafter misc.refinedstorage:energy_stored=%d / %d RF misc.refinedstorage:energy_usage=Vebruik: %d RF/t @@ -97,6 +98,7 @@ block.refinedstorage:relay.name=Relais block.refinedstorage:interface.name=Interface block.refinedstorage:crafting_monitor.name=Crafting Monitor block.refinedstorage:wireless_transmitter.name=Draadloze Zender +block.refinedstorage:crafter.name=Crafter item.refinedstorage:storage_disk.0.name=1k Opslagschijf item.refinedstorage:storage_disk.1.name=4k Opslagschijf diff --git a/src/main/resources/assets/refinedstorage/textures/blocks/crafter.png b/src/main/resources/assets/refinedstorage/textures/blocks/crafter.png new file mode 100755 index 0000000000000000000000000000000000000000..2587b5aeb9677206e9cd7d53d1cf66625c03076a GIT binary patch literal 221 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61SBU+%rFB|jKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85sBugD~Uq{1qucL5ULAh?3y^w370~qEv>0#LT=By}Z;C1rt33 zJ3727@*`Ic+4#eT$NcYA_$90|=ngSHFstceaI-YfWCl-H KKbLh*2~7ZZ*+$O* literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/refinedstorage/textures/gui/crafter.png b/src/main/resources/assets/refinedstorage/textures/gui/crafter.png new file mode 100755 index 0000000000000000000000000000000000000000..9fe1182e56e70d1025e03d567464a1662f2d8277 GIT binary patch literal 1994 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|P9i7AVS|E{-7;ac}Q5c10PAxL&+o_~*ZWo$1FJTh3o}o9w-J&R)$J zsoW0k_9V7D-)c`^uJf+n@893Q{q1c_|Lxbm|2U)1oij7;|IgpQe$AT`d0t{YQ%(BI z*Q@vKQ%}EUd`z3+*LKcV3{g8yb3VAfF}VI%#Y{%O_ESng#|6Y+F94_4()S{uLh$Pa zMuuND7q#c>q+K%Gdz06DBEzjEq2cOL`w}^U(kt56rQ2QgK4Aa)yoCN|>jyWk^ai*w zvr@ax*v^EEw`y`U;gp!qiWFQ)Xx| z%VZ1)Q}1Gb;Pyho-0836V>J61GUkghR3)e}JYsm0-%`W^H1vuybHKSh-`q6Z>ly#d zus$%I^FUbK%Vrq{z2nzb?|pxDy@(H2f#vt+FFy(*8K(hDcLs(9cZFFTWE$!Y-m=d8 z_V2ToNrPR`wsZ5hF@YpO;KiNOa5lq^|Dms!uVrC=ac`-3#rDNFrK398E?BP>{gGCe z4>k^@gg*4>DMSY%O`0dY7T(`z`K0_piR;UF*X9qJDPRgZhm3YvJmxzHfrF86M>ohXbAW zgoA-$596upY_IQ}zBRAT`}6ayat}VaSEs-Ds_*wNJoWJFaHHifs$NWG&6%mqV3N!1 iaM^6IP{!;xzTbC9ubUFEZ~hXH&pciIT-G@yGywqpR%Q19 literal 0 HcmV?d00001