From 299f94e79574c56f9bedfada3e1afa84478f3a92 Mon Sep 17 00:00:00 2001 From: MauveCloud Date: Tue, 27 Oct 2020 00:27:43 -0700 Subject: [PATCH 1/3] Added gui fluid input/output It is now possible to click with a fluid container on the internal fluid tanks in the gui of a basic (single-block) machine to add or remove fluid (depending on whether the container is empty). --- .../api/gui/GT_Container_BasicMachine.java | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) 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 2dbc298d44..4dd8301d5d 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -4,11 +4,13 @@ import cpw.mods.fml.relauncher.SideOnly; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; +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.inventory.Slot; import net.minecraft.item.ItemStack; +import net.minecraftforge.fluids.FluidStack; import java.util.Iterator; @@ -187,7 +189,84 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti if (mTileEntity.getMetaTileEntity() == null) return null; ((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mItemTransfer = !((GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity()).mItemTransfer; return null; + case 2: + // fluid output tank + if (mTileEntity.getMetaTileEntity() == null) return null; + GT_MetaTileEntity_BasicMachine tMachine = (GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity(); + ItemStack tStack = aPlayer.inventory.getItemStack(); + if (tStack != null) { + FluidStack tFluid = GT_Utility.getFluidForFilledItem(tStack, true); + if (tFluid != null) { + if (tMachine.getDrainableStack() == null) { + if (tFluid.amount <= tMachine.getCapacity()) { + if (aPlayer.inventory.addItemStackToInventory(GT_Utility.getContainerItem(tStack, true))) { + tMachine.setDrainableStack(tFluid.copy()); + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + } + } + } else { + if (tFluid.isFluidEqual(tMachine.getDrainableStack()) && tFluid.amount + tMachine.getDrainableStack().amount <= tMachine.getCapacity()) { + if (aPlayer.inventory.addItemStackToInventory(GT_Utility.getContainerItem(tStack, true))) { + tMachine.getDrainableStack().amount += tFluid.amount; + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + } + } + } + return null; + } + ItemStack tOutput = GT_Utility.fillFluidContainer(tMachine.getDrainableStack(), tStack, false, true); + if (tOutput != null && aPlayer.inventory.addItemStackToInventory(tOutput)) { + tFluid = GT_Utility.getFluidForFilledItem(tOutput, true); + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + if (tFluid != null) tMachine.getDrainableStack().amount -= tFluid.amount; + if (tMachine.getDrainableStack().amount <= 0 && tMachine.isFluidChangingAllowed()) tMachine.setDrainableStack(null); + return null; + } + } + return null; default: + if (aSlotIndex == getAllSlotCount() - 1) { + // fluid input tank + if (mTileEntity.getMetaTileEntity() == null) return null; + tMachine = (GT_MetaTileEntity_BasicMachine) mTileEntity.getMetaTileEntity(); + tStack = aPlayer.inventory.getItemStack(); + if (tStack != null) { + FluidStack tFluid = GT_Utility.getFluidForFilledItem(tStack, true); + if (tFluid != null) { + if (tMachine.getFillableStack() == null) { + if (tFluid.amount <= tMachine.getCapacity()) { + if (aPlayer.inventory.addItemStackToInventory(GT_Utility.getContainerItem(tStack, true))) { + tMachine.setFillableStack(tFluid.copy()); + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + } + } + } else { + if (tFluid.isFluidEqual(tMachine.getFillableStack()) && tFluid.amount + tMachine.getFillableStack().amount <= tMachine.getCapacity()) { + if (aPlayer.inventory.addItemStackToInventory(GT_Utility.getContainerItem(tStack, true))) { + tMachine.getFillableStack().amount += tFluid.amount; + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + } + } + } + return null; + } + ItemStack tOutput = GT_Utility.fillFluidContainer(tMachine.getFillableStack(), tStack, false, true); + if (tOutput != null && aPlayer.inventory.addItemStackToInventory(tOutput)) { + tFluid = GT_Utility.getFluidForFilledItem(tOutput, true); + tStack.stackSize--; + if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + if (tFluid != null) tMachine.getFillableStack().amount -= tFluid.amount; + if (tMachine.getFillableStack().amount <= 0 && tMachine.isFluidChangingAllowed()) tMachine.setFillableStack(null); + return null; + } + } + return null; + } return super.slotClick(aSlotIndex, aMouseclick, aShifthold, aPlayer); } } From 60891530c3aad63d40004be8ae311a00edb077cb Mon Sep 17 00:00:00 2001 From: MauveCloud Date: Tue, 27 Oct 2020 09:11:20 -0700 Subject: [PATCH 2/3] Added option to make machine input tanks less forgiving. Defaults to false, but if set true, players will not be able to simply use an empty fluid container to recover fluids mistakenly added to the input tank of a machine. --- src/main/java/gregtech/GT_Mod.java | 1 + src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java | 2 ++ src/main/java/gregtech/common/GT_Proxy.java | 1 + 3 files changed, 4 insertions(+) diff --git a/src/main/java/gregtech/GT_Mod.java b/src/main/java/gregtech/GT_Mod.java index 9ff12f4c6e..86e541576f 100644 --- a/src/main/java/gregtech/GT_Mod.java +++ b/src/main/java/gregtech/GT_Mod.java @@ -296,6 +296,7 @@ public void onPreLoad(FMLPreInitializationEvent aEvent) { gregtechproxy.ic2EnergySourceCompat = tMainConfig.get("general", "Ic2EnergySourceCompat", true).getBoolean(true); gregtechproxy.costlyCableConnection = tMainConfig.get("general", "CableConnectionRequiresSolderingMaterial", false).getBoolean(false); gregtechproxy.mHardRadonRecipe = tMainConfig.get("general","HardRadonRecipe",false).getBoolean(false); + gregtechproxy.mHardCoreInputTanks = tMainConfig.get("general", "HardCoreInputTanks",false).getBoolean(false); GT_LanguageManager.i18nPlaceholder = tMainConfig.get("general", "UsePlaceholderForMaterialNamesInLangFile", true).getBoolean(true); Materials[] tDisableOres = new Materials[]{Materials.Chrome, Materials.Naquadria, Materials.Silicon, Materials.Cobalt, Materials.Cadmium, Materials.Indium, Materials.Tungsten, 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 4dd8301d5d..97d682f6e4 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -2,6 +2,7 @@ import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import gregtech.GT_Mod; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; import gregtech.api.util.GT_Utility; @@ -255,6 +256,7 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti } return null; } + if (GT_Mod.gregtechproxy.mHardCoreInputTanks) return null; ItemStack tOutput = GT_Utility.fillFluidContainer(tMachine.getFillableStack(), tStack, false, true); if (tOutput != null && aPlayer.inventory.addItemStackToInventory(tOutput)) { tFluid = GT_Utility.getFluidForFilledItem(tOutput, true); diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index 2d0f4e287e..e66bd588e5 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -217,6 +217,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { public boolean costlyCableConnection = false; public boolean mMoreComplicatedChemicalRecipes = false; public boolean mHardRadonRecipe = true; + public boolean mHardCoreInputTanks = false; public GT_Proxy() { GameRegistry.registerFuelHandler(this); From f6fb69a67aa95158e0b8af1537a9b1d656fea782 Mon Sep 17 00:00:00 2001 From: MauveCloud Date: Fri, 20 Nov 2020 09:14:20 -0800 Subject: [PATCH 3/3] Fixed updating of fluid container stacks. Both the containers added to player inventory after filling/emptying, and the ones on the cursor. --- .../api/gui/GT_Container_BasicMachine.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 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 97d682f6e4..8f9e50f281 100644 --- a/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java +++ b/src/main/java/gregtech/api/gui/GT_Container_BasicMachine.java @@ -204,6 +204,7 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti tMachine.setDrainableStack(tFluid.copy()); tStack.stackSize--; if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + aPlayer.inventoryContainer.detectAndSendChanges(); } } } else { @@ -212,10 +213,11 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti tMachine.getDrainableStack().amount += tFluid.amount; tStack.stackSize--; if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + aPlayer.inventoryContainer.detectAndSendChanges(); } } } - return null; + return tStack; } ItemStack tOutput = GT_Utility.fillFluidContainer(tMachine.getDrainableStack(), tStack, false, true); if (tOutput != null && aPlayer.inventory.addItemStackToInventory(tOutput)) { @@ -224,7 +226,8 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); if (tFluid != null) tMachine.getDrainableStack().amount -= tFluid.amount; if (tMachine.getDrainableStack().amount <= 0 && tMachine.isFluidChangingAllowed()) tMachine.setDrainableStack(null); - return null; + aPlayer.inventoryContainer.detectAndSendChanges(); + return tStack; } } return null; @@ -243,6 +246,7 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti tMachine.setFillableStack(tFluid.copy()); tStack.stackSize--; if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + aPlayer.inventoryContainer.detectAndSendChanges(); } } } else { @@ -251,10 +255,11 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti tMachine.getFillableStack().amount += tFluid.amount; tStack.stackSize--; if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); + aPlayer.inventoryContainer.detectAndSendChanges(); } } } - return null; + return tStack; } if (GT_Mod.gregtechproxy.mHardCoreInputTanks) return null; ItemStack tOutput = GT_Utility.fillFluidContainer(tMachine.getFillableStack(), tStack, false, true); @@ -264,7 +269,8 @@ public ItemStack slotClick(int aSlotIndex, int aMouseclick, int aShifthold, Enti if (tStack.stackSize <= 0) aPlayer.inventory.setItemStack(null); if (tFluid != null) tMachine.getFillableStack().amount -= tFluid.amount; if (tMachine.getFillableStack().amount <= 0 && tMachine.isFluidChangingAllowed()) tMachine.setFillableStack(null); - return null; + aPlayer.inventoryContainer.detectAndSendChanges(); + return tStack; } } return null;