diff options
author | HoleFish <48403212+HoleFish@users.noreply.github.com> | 2024-01-13 18:24:58 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-13 11:24:58 +0100 |
commit | 6b481e98d5be69fc1f7bf3ee427266e01f125a4b (patch) | |
tree | bce51a65bf63c0bc3e5989d75d886240ef51afa7 | |
parent | 4a12b1eb580217385c46d7665c47d9e143d62bae (diff) | |
download | GT5-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
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; } |