aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHoleFish <48403212+HoleFish@users.noreply.github.com>2024-01-13 18:24:58 +0800
committerGitHub <noreply@github.com>2024-01-13 11:24:58 +0100
commit6b481e98d5be69fc1f7bf3ee427266e01f125a4b (patch)
treebce51a65bf63c0bc3e5989d75d886240ef51afa7
parent4a12b1eb580217385c46d7665c47d9e143d62bae (diff)
downloadGT5-Unofficial-6b481e98d5be69fc1f7bf3ee427266e01f125a4b.tar.gz
GT5-Unofficial-6b481e98d5be69fc1f7bf3ee427266e01f125a4b.tar.bz2
GT5-Unofficial-6b481e98d5be69fc1f7bf3ee427266e01f125a4b.zip
PCB coolant hatch supports ME hatch (#2451)
add and apply drain method
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java43
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java6
2 files changed, 45 insertions, 4 deletions
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
index 2649f9cbef..53a7514d2a 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_MultiBlockBase.java
@@ -1331,6 +1331,49 @@ public abstract class GT_MetaTileEntity_MultiBlockBase extends MetaTileEntity
return rList;
}
+ /**
+ * Drains fluid from the given hatch, including {@link IDualInputHatch}.
+ *
+ * @param doDrain If false, fluid will not actually be consumed
+ * @return Whether the hatch contains enough fluid to drain
+ */
+ public boolean drain(GT_MetaTileEntity_Hatch hatch, FluidStack fluid, boolean doDrain) {
+ if (fluid == null || hatch == null) return false;
+ if (supportsCraftingMEBuffer() && hatch instanceof IDualInputHatch tHatch && tHatch.supportsFluids()) {
+ Optional<IDualInputInventory> inventory = tHatch.getFirstNonEmptyInventory();
+ if (inventory.isPresent()) {
+ for (FluidStack storedFluid : Lists.newArrayList(
+ inventory.get()
+ .getFluidInputs())) {
+ if (fluid.isFluidEqual(storedFluid)) {
+ if (doDrain) storedFluid.amount = Math.max(storedFluid.amount - fluid.amount, 0);
+ return storedFluid.amount >= fluid.amount;
+ }
+ }
+ }
+ }
+
+ if (hatch instanceof GT_MetaTileEntity_Hatch_Input tHatch && tHatch.isValid()) {
+ setHatchRecipeMap(tHatch);
+ if (tHatch instanceof GT_MetaTileEntity_Hatch_Input_ME meHatch) {
+ meHatch.startRecipeProcessing();
+ for (FluidStack fluidStack : meHatch.getStoredFluids()) {
+ if (fluid.isFluidEqual(fluidStack)) {
+ if (doDrain) fluidStack.amount = Math.max(fluidStack.amount - fluid.amount, 0);
+ meHatch.endRecipeProcessing(this);
+ return fluidStack.amount >= fluid.amount;
+ }
+ }
+ meHatch.endRecipeProcessing(this);
+ } else {
+ FluidStack tFluid = tHatch.drain(ForgeDirection.UNKNOWN, fluid, doDrain);
+ return tFluid != null && tFluid.amount >= fluid.amount;
+ }
+ }
+
+ return false;
+ }
+
public ArrayList<ItemStack> getStoredInputs() {
if (supportsCraftingMEBuffer()) {
for (IDualInputHatch tHatch : mDualInputHatches) {
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
index 535f1ee239..4a6ca3ee7a 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PCBFactory.java
@@ -617,8 +617,7 @@ public class GT_MetaTileEntity_PCBFactory extends
return false;
}
FluidStack tFluid = GT_ModHandler.getDistilledWater(COOLANT_CONSUMED_PER_SEC);
- FluidStack tLiquid = mCoolantInputHatch.drain(tFluid.amount, true);
- if (tLiquid == null || tLiquid.amount < tFluid.amount || !tLiquid.equals(tFluid)) {
+ if (!drain(mCoolantInputHatch, tFluid, true)) {
criticalStopMachine();
return false;
}
@@ -631,8 +630,7 @@ public class GT_MetaTileEntity_PCBFactory extends
}
Fluid superCoolant = FluidRegistry.getFluid("supercoolant");
FluidStack tFluid = new FluidStack(superCoolant, COOLANT_CONSUMED_PER_SEC);
- FluidStack tLiquid = mCoolantInputHatch.drain(tFluid.amount, true);
- if (tLiquid == null || tLiquid.amount < tFluid.amount || !tLiquid.equals(tFluid)) {
+ if (!drain(mCoolantInputHatch, tFluid, true)) {
criticalStopMachine();
return false;
}