From b093eda18787f29ec1aeba2e0b67b5b4bbafea98 Mon Sep 17 00:00:00 2001 From: miozune Date: Sun, 4 Jun 2023 19:54:27 +0900 Subject: Fix void protection for Sparge Tower and Dangote (#653) --- .../GregtechMetaTileEntity_SpargeTower.java | 35 +++++++++++++++++++++- ...egtechMetaTileEntity_Adv_DistillationTower.java | 6 ++++ 2 files changed, 40 insertions(+), 1 deletion(-) (limited to 'src/main/java') diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java index 64cce876c0..6f12db25ba 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/GregtechMetaTileEntity_SpargeTower.java @@ -29,6 +29,7 @@ import com.gtnewhorizon.structurelib.structure.StructureDefinition; import gregtech.api.interfaces.IHatchElement; import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.fluid.IFluidStore; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; @@ -215,7 +216,10 @@ public class GregtechMetaTileEntity_SpargeTower extends GregtechMeta_MultiBlockB .findRecipe(getBaseMetaTileEntity(), false, gregtech.api.enums.GT_Values.V[tTier], tFluids); if (tRecipe != null) { Logger.INFO("Found recipe!"); - if (tRecipe.isRecipeInputEqual(true, tFluids)) { + FluidStack[] possibleOutputs = getPossibleByproductsOfSparge( + tRecipe.mFluidInputs[0], + tRecipe.mFluidInputs[1]).toArray(new FluidStack[0]); + if (canOutputAll(possibleOutputs) && tRecipe.isRecipeInputEqual(true, tFluids)) { Logger.INFO("Found recipe that matches!"); this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); this.mEfficiencyIncrease = 10000; @@ -250,6 +254,30 @@ public class GregtechMetaTileEntity_SpargeTower extends GregtechMeta_MultiBlockB return false; } + private static List getPossibleByproductsOfSparge(final FluidStack aSpargeGas, + final FluidStack aSpentFuel) { + GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); + ArrayList aOutputGases = new ArrayList<>(); + if (aSpargeRecipe == null) { + return aOutputGases; + } + + aOutputGases.add(aSpargeRecipe.mOutputSpargedFuel.copy()); + ArrayList aTempMap = new ArrayList<>(); + for (int i = 2; i < aSpargeRecipe.mFluidOutputs.length; i++) { + int aGasAmount = aSpargeRecipe.mMaxOutputQuantity[i - 2] / 100; + FluidStack aOutput = aSpargeRecipe.mFluidOutputs[i].copy(); + FluidStack aSpargeOutput = null; + if (aGasAmount > 0) { + aSpargeOutput = new FluidStack(aOutput.getFluid(), aGasAmount); + } + aTempMap.add(aSpargeOutput); + } + aOutputGases.add(new FluidStack(aSpargeRecipe.mInputGas.getFluid(), aSpargeRecipe.mInputGas.amount)); + aOutputGases.addAll(aTempMap); + return aOutputGases; + } + private static ArrayList getByproductsOfSparge(final FluidStack aSpargeGas, final FluidStack aSpentFuel) { GasSpargingRecipe aSpargeRecipe = GasSpargingRecipeMap.findRecipe(aSpargeGas, aSpentFuel); @@ -315,6 +343,11 @@ public class GregtechMetaTileEntity_SpargeTower extends GregtechMeta_MultiBlockB return addedHatch; } + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); + } + @Override protected IAlignmentLimits getInitialAlignmentLimits() { // don't rotate a freaking tower, it won't work diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java index 8fd6c0bd5c..42eddd9769 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/processing/advanced/GregtechMetaTileEntity_Adv_DistillationTower.java @@ -35,6 +35,7 @@ import gregtech.api.GregTech_API; import gregtech.api.enums.Textures; import gregtech.api.interfaces.IHatchElement; import gregtech.api.interfaces.IIconContainer; +import gregtech.api.interfaces.fluid.IFluidStore; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Input; @@ -354,6 +355,11 @@ public class GregtechMetaTileEntity_Adv_DistillationTower extends } } + @Override + public List getFluidOutputSlots(FluidStack[] toOutput) { + return getFluidOutputSlotsByLayer(toOutput, mOutputHatchesByLayer); + } + @Override public String getMachineType() { return "Distillery, Distillation Tower"; -- cgit