diff options
author | miozune <miozune@gmail.com> | 2022-08-03 17:05:35 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-03 15:05:35 +0700 |
commit | a169dda9b44f6740a4550d629269526d355578bd (patch) | |
tree | 7cac9dabc8b9587cb8aec482255c6fc8c80bdcec /src/main/java/gtPlusPlus/xmod | |
parent | 04e48b02f1e27a446d6f0c5194557e047b01c49b (diff) | |
download | GT5-Unofficial-a169dda9b44f6740a4550d629269526d355578bd.tar.gz GT5-Unofficial-a169dda9b44f6740a4550d629269526d355578bd.tar.bz2 GT5-Unofficial-a169dda9b44f6740a4550d629269526d355578bd.zip |
Implement void protection for TGS (#261)
Diffstat (limited to 'src/main/java/gtPlusPlus/xmod')
2 files changed, 42 insertions, 32 deletions
diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java index 4a509f07fe..af807d190b 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java @@ -404,11 +404,8 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En } public int canBufferOutputs(final GT_Recipe aRecipe, int aParallelRecipes, boolean aAllow16SlotWithoutCheck) { - if (mVoidExcess) return aParallelRecipes; - log("Determining if we have space to buffer outputs. Parallel: "+aParallelRecipes); - - // Null recipe or a recipe with lots of outputs? - // E.G. Gendustry custom comb with a billion centrifuge outputs? + // Null recipe or a recipe with lots of outputs? + // E.G. Gendustry custom comb with a billion centrifuge outputs? // Do it anyway, provided the multi allows it. Default behaviour is aAllow16SlotWithoutCheck = true. if (aRecipe == null || aRecipe.mOutputs.length > 16) { if (aRecipe == null) { @@ -416,18 +413,24 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En } else if (aRecipe.mOutputs.length > 16) { if (aAllow16SlotWithoutCheck) { - return aParallelRecipes; + return aParallelRecipes; } else { - // Do nothing, we want to check this recipe properly. + // Do nothing, we want to check this recipe properly. } - } - } + } + } + return canBufferOutputs(aRecipe.mOutputs, aRecipe.mFluidOutputs, aParallelRecipes); + } + + public int canBufferOutputs(ItemStack[] aItemOutputs, FluidStack[] aFluidOutputs, int aParallelRecipes) { + if (mVoidExcess) return aParallelRecipes; + log("Determining if we have space to buffer outputs. Parallel: "+aParallelRecipes); // Do we even need to check for item outputs? - boolean aDoesOutputItems = aRecipe.mOutputs.length > 0; + boolean aDoesOutputItems = aItemOutputs.length > 0; // Do we even need to check for fluid outputs? - boolean aDoesOutputFluids = aRecipe.mFluidOutputs.length > 0; + boolean aDoesOutputFluids = aFluidOutputs.length > 0; @@ -447,7 +450,7 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En */ AutoMap<FlexiblePair<ItemStack, Integer>> aItemMap = new AutoMap<FlexiblePair<ItemStack, Integer>>(); - AutoMap<ItemStack> aOutputs = new AutoMap<ItemStack>(aRecipe.mOutputs); + AutoMap<ItemStack> aOutputs = new AutoMap<ItemStack>(aItemOutputs); for (final GT_MetaTileEntity_Hatch_OutputBus tBus : this.mOutputBusses) { if (!isValidMetaTileEntity(tBus)) { @@ -606,7 +609,7 @@ public abstract class GregtechMeta_MultiBlockBase<T extends GT_MetaTileEntity_En // Create a map of all the fluids we would like to output, we can iterate over this and see how many we can merge into existing hatch stacks. ArrayList<FluidStack> aOutputFluids = new ArrayList<FluidStack>(); // Ugly ass boxing - aOutputFluids.addAll(new AutoMap<FluidStack>(aRecipe.mFluidOutputs)); + aOutputFluids.addAll(new AutoMap<FluidStack>(aFluidOutputs)); // Iterate the Hatches, updating their 'stored' data. //for (Triplet<GT_MetaTileEntity_Hatch_Output, FluidStack, Integer> aHatchData : aOutputHatches) { for (int i = 0;i<aOutputHatches.size();i++) { diff --git a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java index c515369abb..290c52ece8 100644 --- a/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java +++ b/src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java @@ -46,6 +46,7 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase< public static String mCasingName = "Sterile Farm Casing"; // public static TreeGenerator mTreeData; public static HashMap<String, ItemStack> sLogCache = new HashMap<>(); + private static final int TICKS_PER_OPERATION = 100; private int mCasing; private IStructureDefinition<GregtechMetaTileEntityTreeFarm> STRUCTURE_DEFINITION = null; @@ -174,33 +175,39 @@ public class GregtechMetaTileEntityTreeFarm extends GregtechMeta_MultiBlockBase< long tVoltage = getMaxInputVoltage(); byte tTier = (byte) Math.max(1, GT_Utility.getTier(tVoltage)); - this.mMaxProgresstime = 100; - this.mEUt = (int) tVoltage; - - this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); - this.mEfficiencyIncrease = 10000; - - if (this.mEUt > 0) { - this.mEUt = (-this.mEUt); - } - - int aOutputAmount = ((2 * (tTier * tTier)) - (2 * tTier) + 5) * (mMaxProgresstime / 20) * getSawBoost(mToolType); + int aOutputAmount = ((2 * (tTier * tTier)) - (2 * tTier) + 5) * (TICKS_PER_OPERATION / 20) * getSawBoost(mToolType); int aFert = hasLiquidFert(); + ItemStack[] toOutput; if (aFert > 0) { //Sapling - if (aFert < aOutputAmount) { aOutputAmount /= 10; - } else { - tryConsumeLiquidFert(aOutputAmount); } - - aOutputAmount = (int) (aOutputAmount * saplingsModifier); - this.mOutputItems = new ItemStack[]{ItemUtils.getSimpleStack(mSapling, aOutputAmount)}; + int amplifiedOutputAmount = (int) (aOutputAmount * saplingsModifier); + toOutput = new ItemStack[]{ItemUtils.getSimpleStack(mSapling, amplifiedOutputAmount)}; } else { //Log + int amplifiedOutputAmount = (int) (aOutputAmount * heightModifier * girthModifier); + toOutput = new ItemStack[]{ItemUtils.getSimpleStack(mWood, amplifiedOutputAmount)}; + } - aOutputAmount = (int) (aOutputAmount * heightModifier * girthModifier); - this.mOutputItems = new ItemStack[]{ItemUtils.getSimpleStack(mWood, aOutputAmount)}; + if (canBufferOutputs(toOutput, new FluidStack[]{}, 1) == 0) { + return false; + } + + if (aFert > 0 && aFert >= aOutputAmount) { + tryConsumeLiquidFert(aOutputAmount); + } + + this.mOutputItems = toOutput; + + this.mMaxProgresstime = TICKS_PER_OPERATION; + this.mEUt = (int) tVoltage; + + this.mEfficiency = (10000 - (getIdealStatus() - getRepairStatus()) * 1000); + this.mEfficiencyIncrease = 10000; + + if (this.mEUt > 0) { + this.mEUt = (-this.mEUt); } this.tryDamageTool(); |