diff --git a/src/main/java/mekanism/client/gui/GuiFormulaicAssemblicator.java b/src/main/java/mekanism/client/gui/GuiFormulaicAssemblicator.java index c4fa8aedc..28ab40490 100644 --- a/src/main/java/mekanism/client/gui/GuiFormulaicAssemblicator.java +++ b/src/main/java/mekanism/client/gui/GuiFormulaicAssemblicator.java @@ -1,7 +1,9 @@ package mekanism.client.gui; +import java.util.ArrayList; import java.util.List; +import mekanism.api.Coord4D; import mekanism.api.util.ListUtils; import mekanism.client.gui.element.GuiElement.IInfoHandler; import mekanism.client.gui.element.GuiEnergyInfo; @@ -12,7 +14,9 @@ import mekanism.client.gui.element.GuiSlot; import mekanism.client.gui.element.GuiSlot.SlotOverlay; import mekanism.client.gui.element.GuiSlot.SlotType; import mekanism.client.gui.element.GuiTransporterConfigTab; +import mekanism.common.Mekanism; import mekanism.common.inventory.container.ContainerFormulaicAssemblicator; +import mekanism.common.network.PacketTileEntity.TileEntityMessage; import mekanism.common.tile.TileEntityFormulaicAssemblicator; import mekanism.common.util.LangUtils; import mekanism.common.util.MekanismUtils; @@ -36,7 +40,7 @@ public class GuiFormulaicAssemblicator extends GuiMekanism guiElements.add(new GuiRedstoneControl(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"))); guiElements.add(new GuiSideConfigurationTab(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"))); guiElements.add(new GuiTransporterConfigTab(this, 34, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"))); - guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"), 159, 16)); + guiElements.add(new GuiPowerBar(this, tileEntity, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"), 159, 15)); guiElements.add(new GuiEnergyInfo(new IInfoHandler() { @Override public List getInfo() @@ -45,7 +49,7 @@ public class GuiFormulaicAssemblicator extends GuiMekanism return ListUtils.asList(LangUtils.localize("gui.using") + ": " + multiplier + "/t", LangUtils.localize("gui.needed") + ": " + MekanismUtils.getEnergyDisplay(tileEntity.getMaxEnergy()-tileEntity.getEnergy())); } }, this, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"))); - guiElements.add(new GuiSlot(SlotType.POWER, this, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"), 154, 75).with(SlotOverlay.POWER)); + guiElements.add(new GuiSlot(SlotType.POWER, this, MekanismUtils.getResource(ResourceType.GUI, "GuiFormulaicAssemblicator.png"), 151, 75).with(SlotOverlay.POWER)); ySize+=64; } @@ -53,9 +57,38 @@ public class GuiFormulaicAssemblicator extends GuiMekanism @Override protected void drawGuiContainerForegroundLayer(int mouseX, int mouseY) { + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + fontRendererObj.drawString(tileEntity.getInventoryName(), (xSize/2)-(fontRendererObj.getStringWidth(tileEntity.getInventoryName())/2), 6, 0x404040); fontRendererObj.drawString(LangUtils.localize("container.inventory"), 8, (ySize - 96) + 2, 0x404040); - + + if(!tileEntity.autoMode) + { + /*if(xAxis >= 7 && xAxis <= 21 && yAxis >= 45 && yAxis <= 59) + { + drawTexturedModalRect(guiWidth + 7, guiHeight + 45, 176, 0, 14, 14); + } + + if(xAxis >= 71 && xAxis <= 87 && yAxis >= 75 && yAxis <= 91) + { + drawTexturedModalRect(guiWidth + 71, guiHeight + 75, 176 + 14, 0, 16, 16); + } + + if(xAxis >= 89 && xAxis <= 105 && yAxis >= 75 && yAxis <= 91) + { + drawTexturedModalRect(guiWidth + 89, guiHeight + 75, 176 + 30, 0, 16, 16); + }*/ + } + + if(tileEntity.formula != null) + { + if(xAxis >= 107 && xAxis <= 123 && yAxis >= 75 && yAxis <= 91) + { + + } + } + super.drawGuiContainerForegroundLayer(mouseX, mouseY); } @@ -67,7 +100,106 @@ public class GuiFormulaicAssemblicator extends GuiMekanism int guiWidth = (width - xSize) / 2; int guiHeight = (height - ySize) / 2; drawTexturedModalRect(guiWidth, guiHeight, 0, 0, xSize, ySize); + + int xAxis = mouseX - guiWidth; + int yAxis = mouseY - guiHeight; + + if(!tileEntity.autoMode) + { + if(xAxis >= 7 && xAxis <= 21 && yAxis >= 45 && yAxis <= 59) + { + drawTexturedModalRect(guiWidth + 7, guiHeight + 45, 176, 0, 14, 14); + } + else { + drawTexturedModalRect(guiWidth + 7, guiHeight + 45, 176, 14, 14, 14); + } + + if(xAxis >= 71 && xAxis <= 87 && yAxis >= 75 && yAxis <= 91) + { + drawTexturedModalRect(guiWidth + 71, guiHeight + 75, 176 + 14, 0, 16, 16); + } + else { + drawTexturedModalRect(guiWidth + 71, guiHeight + 75, 176 + 14, 16, 16, 16); + } + + if(xAxis >= 89 && xAxis <= 105 && yAxis >= 75 && yAxis <= 91) + { + drawTexturedModalRect(guiWidth + 89, guiHeight + 75, 176 + 30, 0, 16, 16); + } + else { + drawTexturedModalRect(guiWidth + 89, guiHeight + 75, 176 + 30, 16, 16, 16); + } + } + else { + drawTexturedModalRect(guiWidth + 7, guiHeight + 45, 176, 28, 14, 14); + drawTexturedModalRect(guiWidth + 71, guiHeight + 75, 176 + 14, 32, 16, 16); + drawTexturedModalRect(guiWidth + 89, guiHeight + 75, 176 + 30, 32, 16, 16); + } + + if(tileEntity.formula != null) + { + if(xAxis >= 107 && xAxis <= 123 && yAxis >= 75 && yAxis <= 91) + { + drawTexturedModalRect(guiWidth + 107, guiHeight + 75, 176 + 46, 0, 16, 16); + } + else { + drawTexturedModalRect(guiWidth + 107, guiHeight + 75, 176 + 46, 16, 16, 16); + } + } + else { + drawTexturedModalRect(guiWidth + 107, guiHeight + 75, 176 + 46, 32, 16, 16); + } super.drawGuiContainerBackgroundLayer(partialTick, mouseX, mouseY); } + + @Override + protected void mouseClicked(int mouseX, int mouseY, int button) + { + super.mouseClicked(mouseX, mouseY, button); + + if(button == 0) + { + int xAxis = (mouseX - (width - xSize) / 2); + int yAxis = (mouseY - (height - ySize) / 2); + + if(!tileEntity.autoMode) + { + if(xAxis >= 7 && xAxis <= 21 && yAxis >= 45 && yAxis <= 59) + { + ArrayList data = new ArrayList(); + data.add(1); + + Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); + } + + if(xAxis >= 71 && xAxis <= 87 && yAxis >= 75 && yAxis <= 91) + { + ArrayList data = new ArrayList(); + data.add(2); + + Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); + } + + if(xAxis >= 89 && xAxis <= 105 && yAxis >= 75 && yAxis <= 91) + { + ArrayList data = new ArrayList(); + data.add(3); + + Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); + } + } + + if(tileEntity.formula != null) + { + if(xAxis >= 107 && xAxis <= 123 && yAxis >= 75 && yAxis <= 91) + { + ArrayList data = new ArrayList(); + data.add(0); + + Mekanism.packetHandler.sendToServer(new TileEntityMessage(Coord4D.get(tileEntity), data)); + } + } + } + } } diff --git a/src/main/java/mekanism/common/Mekanism.java b/src/main/java/mekanism/common/Mekanism.java index b2256dbe5..15b58abdb 100644 --- a/src/main/java/mekanism/common/Mekanism.java +++ b/src/main/java/mekanism/common/Mekanism.java @@ -76,6 +76,7 @@ import mekanism.common.tile.TileEntityAdvancedBoundingBlock; import mekanism.common.tile.TileEntityBoundingBlock; import mekanism.common.tile.TileEntityCardboardBox; import mekanism.common.tile.TileEntityElectricBlock; +import mekanism.common.tile.TileEntityFormulaicAssemblicator; import mekanism.common.tile.TileEntityPressureDisperser; import mekanism.common.tile.TileEntityQuantumEntangloporter; import mekanism.common.tile.TileEntitySuperheatingElement; @@ -518,6 +519,9 @@ public class Mekanism MachineType.QUANTUM_ENTANGLOPORTER.addRecipe(new ShapedMekanismRecipe(new ItemStack(MekanismBlocks.MachineBlock3, 1, 0), new Object[] { "OCO", "ATA", "OCO", Character.valueOf('O'), "ingotRefinedObsidian", Character.valueOf('C'), MekanismUtils.getControlCircuit(BaseTier.ULTIMATE), Character.valueOf('A'), "alloyUltimate", Character.valueOf('T'), MekanismItems.TeleportationCore })); + MachineType.FORMULAIC_ASSEMBLICATOR.addRecipe(new ShapedMekanismRecipe(new ItemStack(MekanismBlocks.MachineBlock3, 1, 5), new Object[] { + "STS", "BIB", "SCS", Character.valueOf('S'), "ingotSteel", Character.valueOf('T'), Blocks.crafting_table, Character.valueOf('B'), MekanismUtils.getControlCircuit(BaseTier.BASIC), Character.valueOf('I'), new ItemStack(MekanismBlocks.MachineBlock, 1, 8), Character.valueOf('C'), Blocks.chest + })); //Energy Cube recipes CraftingManager.getInstance().getRecipeList().add(new ShapedMekanismRecipe(MekanismUtils.getEnergyCube(EnergyCubeTier.BASIC), new Object[] { @@ -1118,9 +1122,10 @@ public class Mekanism GameRegistry.registerTileEntity(TileEntityCardboardBox.class, "CardboardBox"); GameRegistry.registerTileEntity(TileEntityThermalEvaporationValve.class, "SalinationValve"); //TODO rename GameRegistry.registerTileEntity(TileEntityThermalEvaporationBlock.class, "SalinationTank"); //TODO rename - GameRegistry.registerTileEntity(TileEntityQuantumEntangloporter.class, "EntangledBlock"); + GameRegistry.registerTileEntity(TileEntityQuantumEntangloporter.class, "QuantumEntangloporter"); GameRegistry.registerTileEntity(TileEntityPressureDisperser.class, "PressureDisperser"); GameRegistry.registerTileEntity(TileEntitySuperheatingElement.class, "SuperheatingElement"); + GameRegistry.registerTileEntity(TileEntityFormulaicAssemblicator.class, "FormulaicAssemblicator"); //Load tile entities that have special renderers. proxy.registerSpecialTileEntities(); diff --git a/src/main/java/mekanism/common/inventory/container/ContainerFormulaicAssemblicator.java b/src/main/java/mekanism/common/inventory/container/ContainerFormulaicAssemblicator.java index 0961058bd..14415b18e 100644 --- a/src/main/java/mekanism/common/inventory/container/ContainerFormulaicAssemblicator.java +++ b/src/main/java/mekanism/common/inventory/container/ContainerFormulaicAssemblicator.java @@ -25,7 +25,7 @@ public class ContainerFormulaicAssemblicator extends Container public ContainerFormulaicAssemblicator(InventoryPlayer inventory, TileEntityFormulaicAssemblicator tentity) { tileEntity = tentity; - addSlotToContainer(new SlotDischarge(tentity, 1, 155, 76)); + addSlotToContainer(new SlotDischarge(tentity, 1, 152, 76)); addSlotToContainer(new SlotSpecific(tentity, 2, 6, 26, ItemCraftingFormula.class)); int slotY; @@ -42,13 +42,19 @@ public class ContainerFormulaicAssemblicator extends Container { for(int slotX = 0; slotX < 3; slotX++) { - addSlotToContainer(new Slot(tentity, slotX + slotY * 9 + 27, 26 + slotX * 18, 17 + slotY * 18) { + addSlotToContainer(new Slot(tentity, slotX + slotY * 3 + 27, 26 + slotX * 18, 17 + slotY * 18) { @Override public boolean isItemValid(ItemStack stack) { return !tileEntity.autoMode; } + @Override + public boolean canTakeStack(EntityPlayer player) + { + return !tileEntity.autoMode; + } + @SideOnly(Side.CLIENT) public boolean func_111238_b() { @@ -77,7 +83,7 @@ public class ContainerFormulaicAssemblicator extends Container { for(int slotX = 0; slotX < 2; slotX++) { - addSlotToContainer(new SlotOutput(tentity, slotX + slotY * 9 + 21, 116 + slotX * 18, 17 + slotY * 18)); + addSlotToContainer(new SlotOutput(tentity, slotX + slotY * 2 + 21, 116 + slotX * 18, 17 + slotY * 18)); } } diff --git a/src/main/java/mekanism/common/item/ItemCraftingFormula.java b/src/main/java/mekanism/common/item/ItemCraftingFormula.java index 0bfdff07b..846aaafef 100644 --- a/src/main/java/mekanism/common/item/ItemCraftingFormula.java +++ b/src/main/java/mekanism/common/item/ItemCraftingFormula.java @@ -43,6 +43,13 @@ public class ItemCraftingFormula extends ItemMekanism return getInventory(stack) == null ? icons[0] : (isInvalid(stack) ? icons[1] : icons[2]); } + @Override + @SideOnly(Side.CLIENT) + public boolean requiresMultipleRenderPasses() + { + return true; + } + @Override @SideOnly(Side.CLIENT) public void addInformation(ItemStack itemstack, EntityPlayer entityplayer, List list, boolean flag) @@ -145,7 +152,7 @@ public class ItemCraftingFormula extends ItemMekanism public ItemStack[] getInventory(ItemStack stack) { - if(stack.stackTagCompound == null) + if(stack.stackTagCompound == null || !stack.stackTagCompound.hasKey("Items")) { return null; } @@ -174,6 +181,12 @@ public class ItemCraftingFormula extends ItemMekanism stack.setTagCompound(new NBTTagCompound()); } + if(inv == null) + { + stack.stackTagCompound.removeTag("Items"); + return; + } + NBTTagList tagList = new NBTTagList(); for(int slotCount = 0; slotCount < 9; slotCount++) diff --git a/src/main/java/mekanism/common/tile/TileEntityFormulaicAssemblicator.java b/src/main/java/mekanism/common/tile/TileEntityFormulaicAssemblicator.java index 08e20f50a..884ac2ba5 100644 --- a/src/main/java/mekanism/common/tile/TileEntityFormulaicAssemblicator.java +++ b/src/main/java/mekanism/common/tile/TileEntityFormulaicAssemblicator.java @@ -18,9 +18,6 @@ import mekanism.common.base.IUpgradeTile; import mekanism.common.block.BlockMachine.MachineType; import mekanism.common.content.assemblicator.RecipeFormula; import mekanism.common.item.ItemCraftingFormula; -import mekanism.common.recipe.RecipeHandler; -import mekanism.common.recipe.RecipeHandler.Recipe; -import mekanism.common.recipe.inputs.InfusionInput; import mekanism.common.tile.component.TileComponentConfig; import mekanism.common.tile.component.TileComponentEjector; import mekanism.common.tile.component.TileComponentUpgrade; @@ -47,6 +44,8 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im public boolean autoMode = false; + public boolean isRecipe = false; + public int pulseOperations; public RecipeFormula formula; @@ -72,7 +71,7 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im configComponent.setConfig(TransmissionType.ITEM, new byte[] {0, 0, 0, 3, 1, 2}); configComponent.setInputConfig(TransmissionType.ENERGY); - inventory = new ItemStack[35]; + inventory = new ItemStack[36]; upgradeComponent = new TileComponentUpgrade(this, 0); @@ -131,16 +130,20 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im formula = null; } + if(autoMode && formula == null) + { + toggleAutoMode(); + } + else if(formula != null) + { + moveItemsToGrid(); + } + if(autoMode && formula != null && ((controlType == RedstoneControl.PULSE && pulseOperations > 0) || MekanismUtils.canFunction(this))) { boolean canOperate = true; - if(!formula.matches(worldObj, inventory, 27)) - { - canOperate = moveItemsToGrid(); - } - - if(canOperate) + if(formula.matches(worldObj, inventory, 27)) { if(operatingTicks == ticksRequired) { @@ -187,11 +190,44 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im for(int i = 27; i <= 35; i++) { - inventory[i].stackSize--; - - if(inventory[i].stackSize == 0) + if(inventory[i] != null) { - inventory[i] = null; + ItemStack stack = inventory[i]; + + inventory[i].stackSize--; + + if(inventory[i].stackSize == 0) + { + inventory[i] = null; + } + + if(stack.stackSize == 0 && stack.getItem().hasContainerItem(stack)) + { + ItemStack container = stack.getItem().getContainerItem(stack); + + if(container != null && container.isItemStackDamageable() && container.getItemDamage() > container.getMaxDamage()) + { + container = null; + } + + if(container != null && !stack.getItem().doesContainerItemLeaveCraftingGrid(stack)) + { + if(!stack.getItem().doesContainerItemLeaveCraftingGrid(stack)) + { + inventory[i] = container.copy(); + } + else { + boolean move = tryMoveToOutput(container.copy(), false); + + if(move) + { + tryMoveToOutput(container.copy(), true); + } + + inventory[i] = move ? null : container.copy(); + } + } + } } } @@ -216,11 +252,11 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im if(canOperate) { - doSingleCraft(); + return doSingleCraft(); } } else { - doSingleCraft(); + return doSingleCraft(); } return false; @@ -282,6 +318,17 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im while(craftSingle()); } + private void moveItemsToInput() + { + for(int i = 27; i <= 35; i++) + { + if(inventory[i] != null && formula != null && !formula.isIngredientInPos(worldObj, inventory[i], i-27)) + { + inventory[i] = tryMoveToInput(inventory[i]); + } + } + } + private void toggleAutoMode() { if(autoMode) @@ -289,15 +336,13 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im operatingTicks = 0; autoMode = false; } - else { - for(int i = 27; i <= 35; i++) - { - inventory[i] = tryMoveToInput(inventory[i]); - } - - markDirty(); + else if(formula != null) + { + moveItemsToInput(); autoMode = true; } + + markDirty(); } private ItemStack tryMoveToInput(ItemStack stack) @@ -485,6 +530,7 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im autoMode = dataStream.readBoolean(); operatingTicks = dataStream.readInt(); controlType = RedstoneControl.values()[dataStream.readInt()]; + isRecipe = dataStream.readBoolean(); if(dataStream.readBoolean()) { @@ -492,7 +538,10 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im for(int i = 0; i < 9; i++) { - inv[i] = PacketHandler.readStack(dataStream); + if(dataStream.readBoolean()) + { + inv[i] = PacketHandler.readStack(dataStream); + } } formula = new RecipeFormula(inv); @@ -510,6 +559,7 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im data.add(autoMode); data.add(operatingTicks); data.add(controlType.ordinal()); + data.add(isRecipe); if(formula != null) { @@ -517,7 +567,14 @@ public class TileEntityFormulaicAssemblicator extends TileEntityElectricBlock im for(int i = 0; i < 9; i++) { - data.add(formula.input[i]); + if(formula.input[i] != null) + { + data.add(true); + data.add(formula.input[i]); + } + else { + data.add(false); + } } } else { diff --git a/src/main/resources/assets/mekanism/gui/GuiFormulaicAssemblicator.png b/src/main/resources/assets/mekanism/gui/GuiFormulaicAssemblicator.png index ccf63f296..e9e58907d 100644 Binary files a/src/main/resources/assets/mekanism/gui/GuiFormulaicAssemblicator.png and b/src/main/resources/assets/mekanism/gui/GuiFormulaicAssemblicator.png differ