diff options
Diffstat (limited to 'src/main/java/gregtech/api')
14 files changed, 250 insertions, 187 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; diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IConfigurationCircuitSupport.java b/src/main/java/gregtech/api/interfaces/metatileentity/IConfigurationCircuitSupport.java new file mode 100644 index 0000000000..7d6923e93f --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/metatileentity/IConfigurationCircuitSupport.java @@ -0,0 +1,45 @@ +package gregtech.api.interfaces.metatileentity; + +import java.util.List; + +import net.minecraft.item.ItemStack; + +import gregtech.api.GregTech_API; + +/** + * Implement this interface if your metatileentity supports configuration circuits + * to resolve recipe conflicts. + */ +public interface IConfigurationCircuitSupport { + /** + * + * @return Integrated circuit slot index in the machine inventory + */ + int getCircuitSlot(); + + /** + * Return a list of possible configuration circuit this machine expects. + * + * This list is unmodifiable. Its elements are not supposed to be modified in any way! + */ + default List<ItemStack> getConfigurationCircuits() { + return GregTech_API.getConfigurationCircuitList(100); + } + + /** + * + * @return True if that machine supports built-in configuration circuit + */ + boolean allowSelectCircuit(); + + /** + * + * @return Circuit slot index in GUI container + */ + default int getCircuitGUISlot() { + return getCircuitSlot(); + } + + int getCircuitSlotX(); + int getCircuitSlotY(); +} diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index 7d4cbae063..13ea66e7d2 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -11,6 +11,7 @@ import gnu.trove.list.TIntList; import gnu.trove.list.array.TIntArrayList; import gregtech.api.GregTech_API; import gregtech.api.enums.SoundResource; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; import gregtech.api.interfaces.metatileentity.IMachineCallback; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; @@ -710,7 +711,15 @@ public abstract class MetaTileEntity implements IMetaTileEntity, IMachineCallbac @Override public void setInventorySlotContents(int aIndex, ItemStack aStack) { markDirty(); - if (aIndex >= 0 && aIndex < mInventory.length) mInventory[aIndex] = aStack; + if (this instanceof IConfigurationCircuitSupport) { + IConfigurationCircuitSupport ccs = (IConfigurationCircuitSupport)this; + if (ccs.allowSelectCircuit() && aIndex == ccs.getCircuitSlot() && aStack != null) { + mInventory[aIndex] = GT_Utility.copyAmount(0, aStack); + return; + } + } + if (aIndex >= 0 && aIndex < mInventory.length) + mInventory[aIndex] = aStack; } @Override @@ -1047,8 +1056,7 @@ public abstract class MetaTileEntity implements IMetaTileEntity, IMachineCallbac IEnergyGrid eg = getProxy().getNode().getGrid().getCache(IEnergyGrid.class); if (!eg.isNetworkPowered()) return "(power)"; - } - catch(Throwable ex) { + } catch(Throwable ex) { ex.printStackTrace(); } return ""; diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java index bfc8fd0096..ce5c1b9ee4 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java @@ -7,6 +7,7 @@ import gregtech.api.enums.SoundResource; import gregtech.api.gui.GT_Container_BasicMachine; import gregtech.api.gui.GT_GUIContainer_BasicMachine; import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.api.render.TextureFactory; @@ -46,7 +47,7 @@ import static gregtech.api.util.GT_Utility.moveMultipleItemStacks; * This is the main construct for my Basic Machines such as the Automatic Extractor * Extend this class to make a simple Machine */ -public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_BasicTank { +public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_BasicTank implements IConfigurationCircuitSupport { /** * return values for checkRecipe() @@ -151,13 +152,6 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B } @Override - public void setInventorySlotContents(int aIndex, ItemStack aStack) { - if (allowSelectCircuit() && aIndex == getCircuitSlot() && aStack != null && aStack.stackSize != 0) - aStack = GT_Utility.copyAmount(0, aStack); - super.setInventorySlotContents(aIndex, aStack); - } - - @Override public ITexture[][][] getTextureSet(ITexture[] aTextures) { ITexture[][][] rTextures = new ITexture[14][17][]; aTextures = Arrays.copyOf(aTextures, 14); @@ -849,6 +843,7 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B return !mDisableMultiStack || mInventory[aIndex] == null; } + @Override public boolean allowSelectCircuit() { return false; } @@ -865,18 +860,15 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B return inputs; } - /** - * This might be non-final in the future, but for now, no, don't change this. - */ - public final int getCircuitSlot() { + @Override + public int getCircuitSlot() { return 4; } - /** - * Return a list of possible configuration circuit this machine expects. - * - * This list is unmodifiable. Its elements are not supposed to be modified in any way! - */ + @Override + public int getCircuitGUISlot() { return 3; } + + @Override public List<ItemStack> getConfigurationCircuits() { return GregTech_API.getConfigurationCircuitList(mTier); } @@ -1036,4 +1028,14 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B public Power getPower() { return mPower; } + + @Override + public int getCircuitSlotX() { + return 153; + } + + @Override + public int getCircuitSlotY() { + return 63; + } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java index fb5eec7880..ba6e1698b1 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java @@ -1,9 +1,9 @@ package gregtech.api.metatileentity.implementations; -import appeng.util.Platform; import gregtech.GT_Mod; import gregtech.api.gui.*; import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.render.TextureFactory; @@ -21,18 +21,17 @@ import net.minecraft.util.StatCollector; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import java.util.Map; import static gregtech.api.enums.Textures.BlockIcons.*; -public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { +public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch implements IConfigurationCircuitSupport { public GT_Recipe_Map mRecipeMap = null; public boolean disableSort; public boolean disableFilter = true; public boolean disableLimited = true; public GT_MetaTileEntity_Hatch_InputBus(int id, String name, String nameRegional, int tier) { - this(id, name, nameRegional, tier, getSlots(tier)); + this(id, name, nameRegional, tier, getSlots(tier) + 1); } protected GT_MetaTileEntity_Hatch_InputBus(int id, String name, String nameRegional, int tier, int slots, String[] description) { @@ -53,7 +52,7 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { } public GT_MetaTileEntity_Hatch_InputBus(String aName, int aTier, String[] aDescription, ITexture[][][] aTextures) { - this(aName, aTier, getSlots(aTier), aDescription, aTextures); + this(aName, aTier, getSlots(aTier) + 1, aDescription, aTextures); } public GT_MetaTileEntity_Hatch_InputBus(String aName, int aTier, int aSlots, String[] aDescription, ITexture[][][] aTextures) { @@ -91,7 +90,7 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { @Override public boolean isValidSlot(int aIndex) { - return true; + return aIndex != getCircuitSlot(); } @Override @@ -121,6 +120,17 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { } @Override + public int getCircuitSlotX() { + return 153; + } + + @Override + public int getCircuitSlotY() { + return 63; + } + + + @Override public void initDefaultModes(NBTTagCompound aNBT) { if (!getBaseMetaTileEntity().getWorld().isRemote) { GT_ClientPreference tPreference = GT_Mod.gregtechproxy.getClientPreference(getBaseMetaTileEntity().getOwnerUuid()); @@ -132,13 +142,13 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { @Override public Object getClientGUI(int aID, InventoryPlayer aPlayerInventory, IGregTechTileEntity aBaseMetaTileEntity) { switch (mInventory.length) { - case 1: + case 2: return new GT_GUIContainer_1by1(aPlayerInventory, aBaseMetaTileEntity, "Input Bus"); - case 4: + case 5: return new GT_GUIContainer_2by2(aPlayerInventory, aBaseMetaTileEntity, "Input Bus"); - case 9: + case 10: return new GT_GUIContainer_3by3(aPlayerInventory, aBaseMetaTileEntity, "Input Bus"); - case 16: + case 17: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Input Bus"); default: return new GT_GUIContainer_4by4(aPlayerInventory, aBaseMetaTileEntity, "Input Bus"); @@ -153,18 +163,20 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { } public void updateSlots() { - for (int i = 0; i < mInventory.length; i++) - if (mInventory[i] != null && mInventory[i].stackSize <= 0) mInventory[i] = null; - if(!disableSort) + for (int i = 0; i < mInventory.length - 1; i++) + if (mInventory[i] != null && mInventory[i].stackSize <= 0) + mInventory[i] = null; + if (!disableSort) fillStacksIntoFirstSlots(); } protected void fillStacksIntoFirstSlots() { - HashMap<GT_Utility.ItemId, Integer> slots = new HashMap<>(mInventory.length); - HashMap<GT_Utility.ItemId, ItemStack> stacks = new HashMap<>(mInventory.length); - List<GT_Utility.ItemId> order = new ArrayList<>(mInventory.length); - List<Integer> validSlots = new ArrayList<>(mInventory.length); - for (int i = 0; i < mInventory.length; i++) { + final int L = mInventory.length - 1; + HashMap<GT_Utility.ItemId, Integer> slots = new HashMap<>(L); + HashMap<GT_Utility.ItemId, ItemStack> stacks = new HashMap<>(L); + List<GT_Utility.ItemId> order = new ArrayList<>(L); + List<Integer> validSlots = new ArrayList<>(L); + for (int i = 0; i < L; i++) { if (!isValidSlot(i)) continue; validSlots.add(i); @@ -237,12 +249,14 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { @Override public boolean allowPullStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { + if (aIndex == getCircuitSlot()) + return false; return aSide == getBaseMetaTileEntity().getFrontFacing(); } @Override public boolean allowPutStack(IGregTechTileEntity aBaseMetaTileEntity, int aIndex, byte aSide, ItemStack aStack) { - return aSide == getBaseMetaTileEntity().getFrontFacing() + return aSide == getBaseMetaTileEntity().getFrontFacing() && aIndex != getCircuitSlot() && (mRecipeMap == null || disableFilter || mRecipeMap.containsInput(aStack)) && (disableLimited || limitedAllowPutStack(aIndex, aStack)); } @@ -259,4 +273,12 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch { public void endRecipeProcessing() { } + + @Override + public boolean allowSelectCircuit() { + return true; + } + + @Override + public int getCircuitSlot() { return getSlots(mTier); } } diff --git a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java b/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java index 017a3704f8..1cfe59743c 100644 --- a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java +++ b/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java @@ -2,6 +2,7 @@ package gregtech.api.net; import com.google.common.io.ByteArrayDataInput; import cpw.mods.fml.common.network.ByteBufUtils; +import gregtech.api.interfaces.metatileentity.IConfigurationCircuitSupport; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; @@ -80,7 +81,6 @@ public class GT_Packet_SetConfigurationCircuit extends GT_Packet_New { aData.readInt(), aData.readShort(), aData.readInt(), - ISerializableObject.readItemStackFromGreggyByteBuf(aData)); } @@ -91,8 +91,8 @@ public class GT_Packet_SetConfigurationCircuit extends GT_Packet_New { TileEntity tile = world.getTileEntity(mX, mY, mZ); if (!(tile instanceof IGregTechTileEntity) || ((IGregTechTileEntity) tile).isDead()) return; IMetaTileEntity mte = ((IGregTechTileEntity) tile).getMetaTileEntity(); - if (!(mte instanceof GT_MetaTileEntity_BasicMachine)) return; - GT_MetaTileEntity_BasicMachine machine = (GT_MetaTileEntity_BasicMachine) mte; + if (!(mte instanceof IConfigurationCircuitSupport)) return; + IConfigurationCircuitSupport machine = (IConfigurationCircuitSupport) mte; if (!machine.allowSelectCircuit()) return; machine.getConfigurationCircuits().stream() .filter(stack -> GT_Utility.areStacksEqual(stack, circuit)) diff --git a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit_Bus.java b/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit_Bus.java deleted file mode 100644 index 06344f1656..0000000000 --- a/src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit_Bus.java +++ /dev/null @@ -1,61 +0,0 @@ -package gregtech.api.net; - -import com.google.common.io.ByteArrayDataInput; -import net.minecraft.item.ItemStack; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; - -import net.minecraftforge.common.DimensionManager; - -import gregtech.api.GregTech_API; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.gui.GT_Container_InputBus_ME; - -public class GT_Packet_SetConfigurationCircuit_Bus extends GT_Packet_SetConfigurationCircuit { - public GT_Packet_SetConfigurationCircuit_Bus() { - super(); - } - - public GT_Packet_SetConfigurationCircuit_Bus(IGregTechTileEntity tile, ItemStack circuit) { - super(tile, circuit); - } - - public GT_Packet_SetConfigurationCircuit_Bus(int x, short y, int z, ItemStack circuit) { - super(x, y, z, circuit); - } - - @Override - public byte getPacketID() { - return 18; - } - @Override - public void process(IBlockAccess aWorld) { - World world = DimensionManager.getWorld(dimId); - if (world == null) return; - TileEntity tile = world.getTileEntity(mX, mY, mZ); - if (!(tile instanceof IGregTechTileEntity) || ((IGregTechTileEntity) tile).isDead()) - return; - IMetaTileEntity mte = ((IGregTechTileEntity) tile).getMetaTileEntity(); - if (!(mte instanceof GT_MetaTileEntity_Hatch)) return; - GT_MetaTileEntity_Hatch hatch = (GT_MetaTileEntity_Hatch) mte; - GregTech_API.getConfigurationCircuitList(hatch.mTier).stream() - .filter(stack -> GT_Utility.areStacksEqual(stack, circuit)) - .findFirst() - .ifPresent(stack -> ((IGregTechTileEntity) tile).setInventorySlotContents(hatch.getCircuitSlot(), stack)); - } - - @Override - public GT_Packet_New decode(ByteArrayDataInput aData) { - return new GT_Packet_SetConfigurationCircuit_Bus( - aData.readInt(), - aData.readShort(), - aData.readInt(), - ISerializableObject.readItemStackFromGreggyByteBuf(aData)); - } -} |