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 000000000..2587b5aeb Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/blocks/crafter.png differ 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 000000000..9fe1182e5 Binary files /dev/null and b/src/main/resources/assets/refinedstorage/textures/gui/crafter.png differ