aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/gui
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/gui')
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java59
-rw-r--r--src/main/java/gregtech/api/gui/GT_Container_BasicTank.java4
2 files changed, 55 insertions, 8 deletions
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 fbae0b6752..3c1d35c771 100644
--- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
+++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java
@@ -11,7 +11,8 @@ import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.ICrafting;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
-import net.minecraftforge.fluids.FluidStack;
+
+import java.util.List;
import static gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine.OTHER_SLOT_COUNT;
@@ -36,10 +37,13 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 8, 63, false, true, 1));
addSlotToContainer(new GT_Slot_Holo(mTileEntity, 0, 26, 63, false, true, 1));
addSlotToContainer(new GT_Slot_Render(mTileEntity, 2, 107, 63));
+ GT_MetaTileEntity_BasicMachine machine = (GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity();
+ if (machine.allowSelectCircuit())
+ addSlotToContainer(new GT_Slot_Render(mTileEntity, machine.getCircuitSlot(), 153, 63));
- int tStartIndex = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).getInputSlot();
+ int tStartIndex = machine.getInputSlot();
- switch (((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mInputSlotCount) {
+ switch (machine.mInputSlotCount) {
case 0:
break;
case 1:
@@ -107,9 +111,9 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
break;
}
- tStartIndex = ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).getOutputSlot();
+ tStartIndex = machine.getOutputSlot();
- switch (((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mOutputItems.length) {
+ switch (machine.mOutputItems.length) {
case 0:
break;
case 1:
@@ -182,8 +186,20 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
addSlotToContainer(new GT_Slot_Render(mTileEntity, tStartIndex++, 53, 63));
}
+ private static int find(List<ItemStack> aStacks, ItemStack aStack) {
+ if (GT_Utility.isStackInvalid(aStack))
+ return -1;
+ for (int i = 0, aStacksSize = aStacks.size(); i < aStacksSize; i++) {
+ ItemStack tStack = aStacks.get(i);
+ if (GT_Utility.areStacksEqual(aStack, tStack))
+ return i;
+ }
+ return -1;
+ }
+
@Override
public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, EntityPlayer aPlayer) {
+ if (mTileEntity.getMetaTileEntity() == null) return null;
GT_MetaTileEntity_BasicMachine machine = (GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity();
if (machine == null) return null;
ItemStack tResultStack;
@@ -192,9 +208,36 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
machine.mFluidTransfer = !machine.mFluidTransfer;
return null;
case 1:
- if (mTileEntity.getMetaTileEntity() == null) return null;
machine.mItemTransfer = !machine.mItemTransfer;
return null;
+ case 3:
+ if (machine.allowSelectCircuit() && aMouseclick < 2) {
+ ItemStack newCircuit;
+ if (aMouseclick == 1 && aShifthold == 1) {
+ // clear
+ newCircuit = null;
+ } else {
+ ItemStack cursorStack = aPlayer.inventory.getItemStack();
+ List<ItemStack> tCircuits = machine.getConfigurationCircuits();
+ int index = find(tCircuits, cursorStack);
+ if (index < 0) {
+ int curIndex = find(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 (aSlotIndex == OTHER_SLOT_COUNT + 1 + machine.mInputSlotCount + machine.mOutputItems.length && aMouseclick < 2) {
if (mTileEntity.isClientSide()) {
@@ -255,12 +298,12 @@ public class GT_Container_BasicMachine extends GT_Container_BasicTank {
@Override
public int getSlotStartIndex() {
- return 3;
+ return 4;
}
@Override
public int getShiftClickStartIndex() {
- return 3;
+ return 4;
}
@Override
diff --git a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java
index e8810c14c0..79d3636068 100644
--- a/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java
+++ b/src/main/java/gregtech/api/gui/GT_Container_BasicTank.java
@@ -28,6 +28,10 @@ public class GT_Container_BasicTank extends GT_ContainerMetaTile_Machine {
super(aInventoryPlayer, aTileEntity);
}
+ /**
+ * Subclasses must ensure third slot (aSlotIndex==2) is drainable fluid display item slot.
+ * Otherwise, subclasses must intercept the appropriate the slotClick event and call super.slotClick(2, xxx) if necessary
+ */
@Override
public void addSlots(InventoryPlayer aInventoryPlayer) {
addSlotToContainer(new Slot(mTileEntity, 0, 80, 17));