aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/gui/GT_ContainerMetaTile_Machine.java65
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_1by1.java1
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_2by2.java1
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_3by3.java1
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_4by4.java1
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java47
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainerMetaTile_Machine.java63
-rw-r--r--src/main/java/gregtech/api/gui/GT_GUIContainer_BasicMachine.java36
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IConfigurationCircuitSupport.java45
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java14
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java36
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java60
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit.java6
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SetConfigurationCircuit_Bus.java61
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));
- }
-}