diff --git a/src/main/java/storagecraft/StorageCraftItems.java b/src/main/java/storagecraft/StorageCraftItems.java index d2c8a63ea..0af857548 100644 --- a/src/main/java/storagecraft/StorageCraftItems.java +++ b/src/main/java/storagecraft/StorageCraftItems.java @@ -12,4 +12,5 @@ public final class StorageCraftItems public static final ItemSilicon SILICON = new ItemSilicon(); public static final ItemProcessor PROCESSOR = new ItemProcessor(); public static final ItemStoragePart STORAGE_PART = new ItemStoragePart(); + public static final ItemPattern PATTERN = new ItemPattern(); } diff --git a/src/main/java/storagecraft/block/BlockGrid.java b/src/main/java/storagecraft/block/BlockGrid.java index 11401aaa3..d5d35ba80 100644 --- a/src/main/java/storagecraft/block/BlockGrid.java +++ b/src/main/java/storagecraft/block/BlockGrid.java @@ -35,7 +35,7 @@ public class BlockGrid extends BlockMachine @Override public void getSubBlocks(Item item, CreativeTabs tab, List subItems) { - for (int i = 0; i <= 1; i++) + for (int i = 0; i <= 2; i++) { subItems.add(new ItemStack(item, 1, i)); } @@ -55,13 +55,13 @@ public class BlockGrid extends BlockMachine @Override public IBlockState getStateFromMeta(int meta) { - return getDefaultState().withProperty(TYPE, meta == 0 ? EnumGridType.NORMAL : EnumGridType.CRAFTING); + return getDefaultState().withProperty(TYPE, meta == 0 ? EnumGridType.NORMAL : (meta == 1 ? EnumGridType.CRAFTING : EnumGridType.PATTERN)); } @Override public int getMetaFromState(IBlockState state) { - return state.getValue(TYPE) == EnumGridType.NORMAL ? 0 : 1; + return state.getValue(TYPE) == EnumGridType.NORMAL ? 0 : (state.getValue(TYPE) == EnumGridType.CRAFTING ? 1 : 2); } @Override diff --git a/src/main/java/storagecraft/block/EnumGridType.java b/src/main/java/storagecraft/block/EnumGridType.java index 3c3c4ec5d..16dedbca8 100644 --- a/src/main/java/storagecraft/block/EnumGridType.java +++ b/src/main/java/storagecraft/block/EnumGridType.java @@ -5,7 +5,8 @@ import net.minecraft.util.IStringSerializable; public enum EnumGridType implements IStringSerializable { NORMAL(0, "normal"), - CRAFTING(1, "crafting"); + CRAFTING(1, "crafting"), + PATTERN(2, "pattern"); private int id; private String name; diff --git a/src/main/java/storagecraft/container/ContainerBase.java b/src/main/java/storagecraft/container/ContainerBase.java index abe52e947..aba74aff6 100644 --- a/src/main/java/storagecraft/container/ContainerBase.java +++ b/src/main/java/storagecraft/container/ContainerBase.java @@ -6,6 +6,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; +import storagecraft.container.slot.SlotDisabled; import storagecraft.container.slot.SlotSpecimen; public abstract class ContainerBase extends Container @@ -72,6 +73,10 @@ public abstract class ContainerBase extends Container return player.inventory.getItemStack(); } + else if (slot instanceof SlotDisabled) + { + return null; + } return super.slotClick(id, clickedButton, mode, player); } diff --git a/src/main/java/storagecraft/container/ContainerDrive.java b/src/main/java/storagecraft/container/ContainerDrive.java index ecc05516e..132390860 100644 --- a/src/main/java/storagecraft/container/ContainerDrive.java +++ b/src/main/java/storagecraft/container/ContainerDrive.java @@ -4,7 +4,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import storagecraft.StorageCraftItems; -import storagecraft.container.slot.SlotItemFilter; +import storagecraft.container.slot.SlotFiltered; import storagecraft.tile.TileDrive; public class ContainerDrive extends ContainerBase @@ -18,7 +18,7 @@ public class ContainerDrive extends ContainerBase for (int i = 0; i < 8; ++i) { - addSlotToContainer(new SlotItemFilter(drive, i, x, y, StorageCraftItems.STORAGE_CELL)); + addSlotToContainer(new SlotFiltered(drive, i, x, y, StorageCraftItems.STORAGE_CELL)); if ((i + 1) % 2 == 0) { diff --git a/src/main/java/storagecraft/container/ContainerGrid.java b/src/main/java/storagecraft/container/ContainerGrid.java index 9c3671e7f..66094e812 100644 --- a/src/main/java/storagecraft/container/ContainerGrid.java +++ b/src/main/java/storagecraft/container/ContainerGrid.java @@ -2,8 +2,13 @@ package storagecraft.container; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Slot; +import storagecraft.StorageCraftItems; import storagecraft.block.EnumGridType; +import storagecraft.container.slot.SlotDisabled; +import storagecraft.container.slot.SlotFiltered; import storagecraft.container.slot.SlotGridCraftingResult; +import storagecraft.container.slot.SlotOutput; +import storagecraft.container.slot.SlotSpecimen; import storagecraft.tile.TileGrid; public class ContainerGrid extends ContainerBase @@ -12,7 +17,7 @@ public class ContainerGrid extends ContainerBase { super(player); - addPlayerInventory(8, grid.getType() == EnumGridType.CRAFTING ? 174 : 108); + addPlayerInventory(8, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 174 : 108); if (grid.getType() == EnumGridType.CRAFTING) { @@ -21,7 +26,7 @@ public class ContainerGrid extends ContainerBase for (int i = 0; i < 9; ++i) { - addSlotToContainer(new Slot(grid.getCraftingMatrix(), i, x, y)); + addSlotToContainer(new Slot(grid.getCraftingInventory(), i, x, y)); x += 18; @@ -32,7 +37,30 @@ public class ContainerGrid extends ContainerBase } } - addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingMatrix(), grid.getCraftingResult(), grid, 0, 137, 124)); + addSlotToContainer(new SlotGridCraftingResult(player, grid.getCraftingInventory(), grid.getCraftingResultInventory(), grid, 0, 133 + 4, 120 + 4)); + } + else if (grid.getType() == EnumGridType.PATTERN) + { + int x = 8; + int y = 106; + + for (int i = 0; i < 9; ++i) + { + addSlotToContainer(new SlotSpecimen(grid.getPatternCraftingInventory(), i, x, y)); + + x += 18; + + if ((i + 1) % 3 == 0) + { + y += 18; + x = 8; + } + } + + addSlotToContainer(new SlotDisabled(grid.getPatternCraftingResultInventory(), 0, 116 + 4, 120 + 4)); + + addSlotToContainer(new SlotFiltered(grid.getPatternInventory(), 0, 152, 105, StorageCraftItems.PATTERN)); + addSlotToContainer(new SlotOutput(grid.getPatternInventory(), 1, 152, 142)); } } } diff --git a/src/main/java/storagecraft/container/ContainerGridCrafting.java b/src/main/java/storagecraft/container/ContainerGridCrafting.java deleted file mode 100644 index e27509578..000000000 --- a/src/main/java/storagecraft/container/ContainerGridCrafting.java +++ /dev/null @@ -1,28 +0,0 @@ -package storagecraft.container; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.IInventory; -import storagecraft.tile.TileGrid; - -public class ContainerGridCrafting extends Container -{ - private TileGrid grid; - - public ContainerGridCrafting(TileGrid grid) - { - this.grid = grid; - } - - @Override - public boolean canInteractWith(EntityPlayer player) - { - return false; - } - - @Override - public void onCraftMatrixChanged(IInventory inventory) - { - grid.onCraftingMatrixChanged(); - } -} diff --git a/src/main/java/storagecraft/container/ContainerWirelessTransmitter.java b/src/main/java/storagecraft/container/ContainerWirelessTransmitter.java index d19113605..100a59fa2 100644 --- a/src/main/java/storagecraft/container/ContainerWirelessTransmitter.java +++ b/src/main/java/storagecraft/container/ContainerWirelessTransmitter.java @@ -5,7 +5,7 @@ import net.minecraft.init.Items; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import storagecraft.StorageCraftItems; -import storagecraft.container.slot.SlotItemFilter; +import storagecraft.container.slot.SlotFiltered; import storagecraft.container.slot.SlotOutput; import storagecraft.tile.TileWirelessTransmitter; @@ -15,8 +15,8 @@ public class ContainerWirelessTransmitter extends ContainerBase { super(player); - addSlotToContainer(new SlotItemFilter(wirelessTransmitter, 0, 8, 20, Items.ender_pearl)); - addSlotToContainer(new SlotItemFilter(wirelessTransmitter, 1, 101, 20, StorageCraftItems.WIRELESS_GRID)); + addSlotToContainer(new SlotFiltered(wirelessTransmitter, 0, 8, 20, Items.ender_pearl)); + addSlotToContainer(new SlotFiltered(wirelessTransmitter, 1, 101, 20, StorageCraftItems.WIRELESS_GRID)); addSlotToContainer(new SlotOutput(wirelessTransmitter, 2, 152, 20)); addPlayerInventory(8, 55); diff --git a/src/main/java/storagecraft/container/slot/SlotDisabled.java b/src/main/java/storagecraft/container/slot/SlotDisabled.java new file mode 100644 index 000000000..564035915 --- /dev/null +++ b/src/main/java/storagecraft/container/slot/SlotDisabled.java @@ -0,0 +1,19 @@ +package storagecraft.container.slot; + +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; + +public class SlotDisabled extends Slot +{ + public SlotDisabled(IInventory inventory, int id, int x, int y) + { + super(inventory, id, x, y); + } + + @Override + public boolean isItemValid(ItemStack stack) + { + return false; + } +} diff --git a/src/main/java/storagecraft/container/slot/SlotItemFilter.java b/src/main/java/storagecraft/container/slot/SlotFiltered.java similarity index 72% rename from src/main/java/storagecraft/container/slot/SlotItemFilter.java rename to src/main/java/storagecraft/container/slot/SlotFiltered.java index 9ce6e64ae..ebe44be6c 100644 --- a/src/main/java/storagecraft/container/slot/SlotItemFilter.java +++ b/src/main/java/storagecraft/container/slot/SlotFiltered.java @@ -5,11 +5,11 @@ import net.minecraft.inventory.Slot; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; -public class SlotItemFilter extends Slot +public class SlotFiltered extends Slot { private Item item; - public SlotItemFilter(IInventory inventory, int id, int x, int y, Item item) + public SlotFiltered(IInventory inventory, int id, int x, int y, Item item) { super(inventory, id, x, y); diff --git a/src/main/java/storagecraft/gui/GuiGrid.java b/src/main/java/storagecraft/gui/GuiGrid.java index a63bd9488..8b736f058 100644 --- a/src/main/java/storagecraft/gui/GuiGrid.java +++ b/src/main/java/storagecraft/gui/GuiGrid.java @@ -40,7 +40,7 @@ public class GuiGrid extends GuiBase public GuiGrid(ContainerGrid container, TileGrid grid) { - super(container, 176, grid.getType() == EnumGridType.CRAFTING ? 256 : 190); + super(container, 176, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 256 : 190); this.container = container; this.grid = grid; @@ -114,7 +114,16 @@ public class GuiGrid extends GuiBase public boolean isHoveringOverClear(int mouseX, int mouseY) { - return inBounds(81, 105, 7, 7, mouseX, mouseY); + if (grid.getType() == EnumGridType.CRAFTING) + { + return inBounds(81, 105, 7, 7, mouseX, mouseY); + } + else if (grid.getType() == EnumGridType.PATTERN) + { + return inBounds(64, 105, 7, 7, mouseX, mouseY); + } + + return false; } @Override @@ -124,6 +133,10 @@ public class GuiGrid extends GuiBase { bindTexture("gui/crafting_grid.png"); } + else if (grid.getType() == EnumGridType.PATTERN) + { + bindTexture("gui/pattern_grid.png"); + } else { bindTexture("gui/grid.png"); @@ -143,8 +156,12 @@ public class GuiGrid extends GuiBase { drawString(7, 94, t("container.crafting")); } + else if (grid.getType() == EnumGridType.PATTERN) + { + drawString(7, 94, t("gui.storagecraft:grid.pattern")); + } - drawString(7, grid.getType() == EnumGridType.CRAFTING ? 163 : 96, t("container.inventory")); + drawString(7, (grid.getType() == EnumGridType.CRAFTING || grid.getType() == EnumGridType.PATTERN) ? 163 : 96, t("container.inventory")); int x = 8; int y = 20; @@ -204,7 +221,7 @@ public class GuiGrid extends GuiBase drawTooltip(mouseX, mouseY, items.get(hoveringSlotId).toItemStack()); } - if (grid.getType() == EnumGridType.CRAFTING && isHoveringOverClear(mouseX, mouseY)) + if (isHoveringOverClear(mouseX, mouseY)) { drawTooltip(mouseX, mouseY, t("misc.storagecraft:clear")); } @@ -285,7 +302,7 @@ public class GuiGrid extends GuiBase { super.mouseClicked(mouseX, mouseY, clickedButton); - boolean clickedClear = grid.getType() == EnumGridType.CRAFTING && clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop); + boolean clickedClear = clickedButton == 0 && isHoveringOverClear(mouseX - guiLeft, mouseY - guiTop); if (grid.isConnected()) { diff --git a/src/main/java/storagecraft/item/ItemPattern.java b/src/main/java/storagecraft/item/ItemPattern.java new file mode 100644 index 000000000..09bfd452f --- /dev/null +++ b/src/main/java/storagecraft/item/ItemPattern.java @@ -0,0 +1,10 @@ +package storagecraft.item; + +// @TODO: Other texture when there is an item assigned +public class ItemPattern extends ItemBase +{ + public ItemPattern() + { + super("pattern"); + } +} diff --git a/src/main/java/storagecraft/network/MessageGridCraftingClear.java b/src/main/java/storagecraft/network/MessageGridCraftingClear.java index b579b3b78..a01a59370 100644 --- a/src/main/java/storagecraft/network/MessageGridCraftingClear.java +++ b/src/main/java/storagecraft/network/MessageGridCraftingClear.java @@ -6,6 +6,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.BlockPos; import net.minecraftforge.fml.common.network.simpleimpl.IMessage; +import storagecraft.block.EnumGridType; import storagecraft.tile.TileGrid; public class MessageGridCraftingClear extends MessageHandlerPlayerToServer implements IMessage @@ -50,17 +51,24 @@ public class MessageGridCraftingClear extends MessageHandlerPlayerToServer