diff options
Diffstat (limited to 'src/main/java/gregtech/api/gui')
8 files changed, 131 insertions, 84 deletions
diff --git a/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java index c0c2863521..97ee1d85a3 100644 --- a/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java +++ b/src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java @@ -1,12 +1,17 @@ package gregtech.api.gui; +import java.util.List; + import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Utility; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.ICrafting; +import net.minecraft.item.ItemStack; /** * NEVER INCLUDE THIS FILE IN YOUR MOD!!! @@ -42,6 +47,7 @@ public class GT_ContainerMetaTile_Machine extends GT_Container { private long oEnergyLong = 0, oStorageLong = 0; protected int mTimer = 0; + protected Runnable circuitSlotClickCallback; public GT_ContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { @@ -72,6 +78,19 @@ public class GT_ContainerMetaTile_Machine extends GT_Container { aInventoryPlayer.player.openContainer = aInventoryPlayer.player.inventoryContainer; } } + protected void addCircuitSlot() { + if (mTileEntity.getMetaTileEntity() instanceof IConfigurationCircuitSupport) { + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)mTileEntity.getMetaTileEntity(); + GT_Slot_Render slotCircuit = new GT_Slot_Render(mTileEntity, ccs.getCircuitSlot(), ccs.getCircuitSlotX(), ccs.getCircuitSlotY()); + addSlotToContainer(slotCircuit); + slotCircuit.setEnabled(ccs.allowSelectCircuit()); + } + } + + @Override + public void addSlots(InventoryPlayer aInventoryPlayer) { + addCircuitSlot(); + } @Override public void detectAndSendChanges() { @@ -149,7 +168,9 @@ public class GT_ContainerMetaTile_Machine extends GT_Container { oActive = mActive; oOutput = mOutput; oEnergy = mEnergy; + oEnergyLong = mEnergyLong; oStorage = mStorage; + oStorageLong = mStorageLong; oSteamStorage = mSteamStorage; oProgressTime = mProgressTime; oMaxProgressTime = mMaxProgressTime; @@ -236,4 +257,48 @@ public class GT_ContainerMetaTile_Machine extends GT_Container { public String trans(String aKey, String aEnglish) { return GT_Utility.trans(aKey, aEnglish); } + + public void setCircuitSlotClickCallback(Runnable circuitSlotClickCallback) { + this.circuitSlotClickCallback = circuitSlotClickCallback; + } + @Override + public ItemStack slotClick(int aSlotNumber, int aMouseclick, int aShifthold, EntityPlayer aPlayer) { + if (mTileEntity.getMetaTileEntity() instanceof IConfigurationCircuitSupport) { + IMetaTileEntity machine = mTileEntity.getMetaTileEntity(); + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)machine; + if (ccs.allowSelectCircuit() && aSlotNumber == ccs.getCircuitGUISlot() && aMouseclick < 2) { + ItemStack newCircuit; + if (aShifthold == 1) { + if (aMouseclick == 0) { + if (circuitSlotClickCallback != null) + circuitSlotClickCallback.run(); + return null; + } else { + // clear + newCircuit = null; + } + } else { + ItemStack cursorStack = aPlayer.inventory.getItemStack(); + List<ItemStack> tCircuits = ccs.getConfigurationCircuits(); + int index = GT_Utility.findMatchingStackInList(tCircuits, cursorStack); + if (index < 0) { + int curIndex = GT_Utility.findMatchingStackInList(tCircuits, machine.getStackInSlot(ccs.getCircuitSlot())) + 1; + if (aMouseclick == 0) { + curIndex += 1; + } else { + curIndex -= 1; + } + curIndex = Math.floorMod(curIndex, tCircuits.size() + 1) - 1; + newCircuit = curIndex < 0 ? null : tCircuits.get(curIndex); + } else { + // set to whatever it is + newCircuit = tCircuits.get(index); + } + } + mTileEntity.setInventorySlotContents(ccs.getCircuitSlot(), newCircuit); + return newCircuit; + } + } + return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer); + } } diff --git a/src/main/java/gregtech/api/gui/GT_Container_1by1.java b/src/main/java/gregtech/api/gui/GT_Container_1by1.java index aafa4d9bc9..3c65c5e590 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_1by1.java +++ b/src/main/java/gregtech/api/gui/GT_Container_1by1.java @@ -13,6 +13,7 @@ public class GT_Container_1by1 extends GT_ContainerMetaTile_Machine { @Override public void addSlots(InventoryPlayer aInventoryPlayer) { addSlotToContainer(new Slot(mTileEntity, 0, 80, 35)); + super.addSlots(aInventoryPlayer); } @Override diff --git a/src/main/java/gregtech/api/gui/GT_Container_2by2.java b/src/main/java/gregtech/api/gui/GT_Container_2by2.java index 089c20e335..92d50b3aae 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_2by2.java +++ b/src/main/java/gregtech/api/gui/GT_Container_2by2.java @@ -16,6 +16,7 @@ public class GT_Container_2by2 extends GT_ContainerMetaTile_Machine { addSlotToContainer(new Slot(mTileEntity, 1, 89, 26)); addSlotToContainer(new Slot(mTileEntity, 2, 71, 44)); addSlotToContainer(new Slot(mTileEntity, 3, 89, 44)); + super.addSlots(aInventoryPlayer); } @Override diff --git a/src/main/java/gregtech/api/gui/GT_Container_3by3.java b/src/main/java/gregtech/api/gui/GT_Container_3by3.java index aa44556ff5..282d740347 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_3by3.java +++ b/src/main/java/gregtech/api/gui/GT_Container_3by3.java @@ -21,6 +21,7 @@ public class GT_Container_3by3 extends GT_ContainerMetaTile_Machine { addSlotToContainer(new Slot(mTileEntity, 6, 62, 53)); addSlotToContainer(new Slot(mTileEntity, 7, 80, 53)); addSlotToContainer(new Slot(mTileEntity, 8, 98, 53)); + super.addSlots(aInventoryPlayer); } @Override diff --git a/src/main/java/gregtech/api/gui/GT_Container_4by4.java b/src/main/java/gregtech/api/gui/GT_Container_4by4.java index 77566a0dc2..0b38a265a6 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_4by4.java +++ b/src/main/java/gregtech/api/gui/GT_Container_4by4.java @@ -28,6 +28,7 @@ public class GT_Container_4by4 extends GT_ContainerMetaTile_Machine { addSlotToContainer(new Slot(mTileEntity, 13, 71, 62)); addSlotToContainer(new Slot(mTileEntity, 14, 89, 62)); addSlotToContainer(new Slot(mTileEntity, 15, 107, 62)); + super.addSlots(aInventoryPlayer); } @Override diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java index 78378a52c7..6db6d45a89 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -30,15 +30,12 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank { mItemTransfer = false, mStuttering = false; - private Runnable circuitSlotClickCallback; - GT_Slot_Holo slotFluidTransferToggle; GT_Slot_Holo slotItemTransferToggle; GT_Slot_Holo slotFluidOutput; GT_Slot_Holo slotFluidInput; Slot slotBattery; Slot slotSpecial; - GT_Slot_Render slotCircuit; public GT_Container_BasicMachine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity) { super(aInventoryPlayer, aTileEntity); @@ -54,9 +51,9 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank { addSlotToContainer(slotItemTransferToggle = new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1)); slotItemTransferToggle.setEnabled(!machine.isSteampowered()); addSlotToContainer(slotFluidOutput = new GT_Slot_Render(mTileEntity, 2, 107, 63)); - slotFluidOutput.setEnabled(recipes != null ? recipes.hasFluidOutputs() : false); - addSlotToContainer(slotCircuit = new GT_Slot_Render(mTileEntity, machine.getCircuitSlot(), 153, 63)); - slotCircuit.setEnabled(machine.allowSelectCircuit()); + slotFluidOutput.setEnabled(recipes != null && recipes.hasFluidOutputs()); + // add circuit slot here to have it in fixed position + addCircuitSlot(); int tStartIndex = machine.getInputSlot(); @@ -222,40 +219,6 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank { machine.mItemTransfer = !machine.mItemTransfer; } return null; - case 3: - if (machine.allowSelectCircuit() && aMouseclick < 2) { - ItemStack newCircuit; - if (aShifthold == 1) { - if (aMouseclick == 0) { - if (circuitSlotClickCallback != null) - circuitSlotClickCallback.run(); - return null; - } else { - // clear - newCircuit = null; - } - } else { - ItemStack cursorStack = aPlayer.inventory.getItemStack(); - List<ItemStack> tCircuits = machine.getConfigurationCircuits(); - int index = GT_Utility.findMatchingStackInList(tCircuits, cursorStack); - if (index < 0) { - int curIndex = GT_Utility.findMatchingStackInList(tCircuits, machine.getStackInSlot(machine.getCircuitSlot())) + 1; - if (aMouseclick == 0) { - curIndex += 1; - } else { - curIndex -= 1; - } - curIndex = Math.floorMod(curIndex, tCircuits.size() + 1) - 1; - newCircuit = curIndex < 0 ? null : tCircuits.get(curIndex); - } else { - // set to whatever it is - newCircuit = tCircuits.get(index); - } - } - mTileEntity.setInventorySlotContents(machine.getCircuitSlot(), newCircuit); - return newCircuit; - } - return null; default: if (aSlotNumber == OTHER_SLOT_COUNT + 1 + machine.mInputSlotCount + machine.mOutputItems.length && aMouseclick < 2) { if (mTileEntity.isClientSide()) { @@ -339,8 +302,4 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank { public GT_MetaTileEntity_BasicMachine getMachine() { return (GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity(); } - - public void setCircuitSlotClickCallback(Runnable circuitSlotClickCallback) { - this.circuitSlotClickCallback = circuitSlotClickCallback; - } } diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java index 4ab5f9f921..8a744aee60 100644 --- a/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java +++ b/src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java @@ -3,21 +3,27 @@ package gregtech.api.gui; import gregtech.GT_Mod; import gregtech.api.GregTech_API; import gregtech.api.enums.Dyes; -import gregtech.api.gui.widgets.GT_GuiCoverTabLine; -import gregtech.api.gui.widgets.GT_GuiIcon; -import gregtech.api.gui.widgets.GT_GuiTooltip; -import gregtech.api.gui.widgets.GT_GuiTooltipManager; +import gregtech.api.enums.GT_Values; +import gregtech.api.gui.widgets.*; import gregtech.api.gui.widgets.GT_GuiTabLine.DisplayStyle; import gregtech.api.gui.widgets.GT_GuiTabLine.GT_GuiTabIconSet; import gregtech.api.gui.widgets.GT_GuiTabLine.GT_ITabRenderer; import gregtech.api.gui.widgets.GT_GuiTooltipManager.GT_IToolTipRenderer; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; +import gregtech.api.net.GT_Packet_SetConfigurationCircuit; import gregtech.api.util.GT_TooltipDataCache; import gregtech.api.util.GT_Util; +import gregtech.api.util.GT_Utility; + import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.renderer.entity.RenderItem; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.item.ItemStack; +import net.minecraft.util.StatCollector; import java.util.List; @@ -34,6 +40,7 @@ public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer implements protected GT_GuiTooltipManager mTooltipManager = new GT_GuiTooltipManager(); protected GT_TooltipDataCache mTooltipCache = new GT_TooltipDataCache(); + private static final String GHOST_CIRCUIT_TOOLTIP = "GT5U.machines.select_circuit.tooltip"; private final int guiTint; @@ -68,6 +75,7 @@ public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer implements } guiTint = getColorization(); + mContainer.setCircuitSlotClickCallback(this::openSelectCircuitDialog); } public GT_GUIContainerMetaTile_Machine(InventoryPlayer aInventoryPlayer, IGregTechTileEntity aTileEntity, @@ -178,7 +186,14 @@ public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer implements * Load data for and create appropriate tooltips for this machine. * Only called when one of regular or shift tooltips are enabled. */ - protected void setupTooltips() { } + protected void setupTooltips() { + if (mContainer.mTileEntity.getMetaTileEntity() instanceof IConfigurationCircuitSupport) { + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)mContainer.mTileEntity.getMetaTileEntity(); + if (ccs.allowSelectCircuit()) + addToolTip(new GT_GuiSlotTooltip(mContainer.getSlot(ccs.getCircuitGUISlot()), mTooltipCache.getData(GHOST_CIRCUIT_TOOLTIP))); + } + + } // GT_IToolTipRenderer and GT_ITabRenderer implementations @Override @@ -213,4 +228,42 @@ public class GT_GUIContainerMetaTile_Machine extends GT_GUIContainer implements public boolean removeToolTip(GT_GuiTooltip toolTip) { return mTooltipManager.removeToolTip(toolTip); } + + @Override + protected void onMouseWheel(int mx, int my, int delta) { + if (mContainer.mTileEntity.getMetaTileEntity() instanceof IConfigurationCircuitSupport) { + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)mContainer.mTileEntity.getMetaTileEntity(); + Slot slotCircuit = mContainer.getSlot(ccs.getCircuitGUISlot()); + if (slotCircuit != null && func_146978_c(slotCircuit.xDisplayPosition, + slotCircuit.yDisplayPosition, 16, 16, mx, my)) + { + // emulate click + handleMouseClick(slotCircuit, -1, delta > 0 ? 1 : 0, 0); + return; + } + } + super.onMouseWheel(mx, my, delta); + } + + private void openSelectCircuitDialog() { + IMetaTileEntity machine = mContainer.mTileEntity.getMetaTileEntity(); + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)machine; + List<ItemStack> circuits = ccs.getConfigurationCircuits(); + mc.displayGuiScreen(new GT_GUIDialogSelectItem( + StatCollector.translateToLocal("GT5U.machines.select_circuit"), + machine.getStackForm(0), + this, + this::onCircuitSelected, + circuits, + GT_Utility.findMatchingStackInList(circuits, + machine.getStackInSlot(ccs.getCircuitSlot())))); + } + + private void onCircuitSelected(ItemStack selected) { + GT_Values.NW.sendToServer(new GT_Packet_SetConfigurationCircuit(mContainer.mTileEntity, selected)); + // we will not do any validation on client side + // it doesn't get to actually decide what inventory contains anyway + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)mContainer.mTileEntity.getMetaTileEntity(); + mContainer.mTileEntity.setInventorySlotContents(ccs.getCircuitSlot(), selected); + } } diff --git a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java index 8f26c00216..338d9e14a2 100644 --- a/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java @@ -50,7 +50,6 @@ public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machin // Tooltip localization keys private static final String - GHOST_CIRCUIT_TOOLTIP = "GT5U.machines.select_circuit.tooltip", BATTERY_SLOT_TOOLTIP = "GT5U.machines.battery_slot.tooltip", BATTERY_SLOT_TOOLTIP_ALT = "GT5U.machines.battery_slot.tooltip.alternative", UNUSED_SLOT_TOOLTIP = "GT5U.machines.unused_slot.tooltip", @@ -72,7 +71,6 @@ public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machin String aTextureFile, String aNEI, byte aProgressBarDirection, byte aProgressBarAmount) { super(new GT_Container_BasicMachine(aInventoryPlayer, aTileEntity), RES_PATH_GUI + "basicmachines/" + aTextureFile); - getContainer().setCircuitSlotClickCallback(this::openSelectCircuitDialog); mProgressBarDirection = aProgressBarDirection; mProgressBarAmount = (byte) Math.max(1, aProgressBarAmount); mName = aName; @@ -84,15 +82,13 @@ public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machin */ @Override protected void setupTooltips() { + super.setupTooltips(); GT_MetaTileEntity_BasicMachine machine = getMachine(); GT_Recipe_Map recipes = machine.getRecipeList(); GT_Container_BasicMachine container = getContainer(); Rectangle tProblemArea = new Rectangle(this.guiLeft + 79, this.guiTop + 44, 18, 18); String batterySlotTooltipKey; Object[] batterySlotTooltipArgs; - if (machine.allowSelectCircuit()) { - addToolTip(new GT_GuiSlotTooltip(container.slotCircuit, mTooltipCache.getData(GHOST_CIRCUIT_TOOLTIP))); - } if (machine.isSteampowered()) { batterySlotTooltipKey = UNUSED_SLOT_TOOLTIP; batterySlotTooltipArgs = new String[0]; @@ -144,24 +140,6 @@ public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machin return GT_Values.TIER_COLORS[machineTier] + GT_Values.VN[machineTier]; } - private void openSelectCircuitDialog() { - mc.displayGuiScreen(new GT_GUIDialogSelectItem( - StatCollector.translateToLocal("GT5U.machines.select_circuit"), - mContainer.mTileEntity.getMetaTileEntity().getStackForm(0), - this, - this::onCircuitSelected, - getMachine().getConfigurationCircuits(), - GT_Utility.findMatchingStackInList(getMachine().getConfigurationCircuits(), - getMachine().getStackInSlot(getMachine().getCircuitSlot())))); - } - - private void onCircuitSelected(ItemStack selected) { - GT_Values.NW.sendToServer(new GT_Packet_SetConfigurationCircuit(mContainer.mTileEntity, selected)); - // we will not do any validation on client side - // it doesn't get to actually decide what inventory contains anyway - mContainer.mTileEntity.setInventorySlotContents(getMachine().getCircuitSlot(), selected); - } - private GT_MetaTileEntity_BasicMachine getMachine() { return (GT_MetaTileEntity_BasicMachine) mContainer.mTileEntity.getMetaTileEntity(); } @@ -173,18 +151,6 @@ public class GT_GUIContainer_BasicMachine extends GT_GUIContainerMetaTile_Machin } @Override - protected void onMouseWheel(int mx, int my, int delta) { - GT_Slot_Render slotCircuit = getContainer().slotCircuit; - if (slotCircuit != null && func_146978_c(slotCircuit.xDisplayPosition, - slotCircuit.yDisplayPosition, 16, 16, mx, my)) { - // emulate click - handleMouseClick(slotCircuit, -1, delta > 0 ? 1 : 0, 0); - return; - } - super.onMouseWheel(mx, my, delta); - } - - @Override protected void drawGuiContainerBackgroundLayer(float parTicks, int mouseX, int mouseY) { super.drawGuiContainerBackgroundLayer(parTicks, mouseX, mouseY); int x = (width - xSize) / 2; |