aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/xmod
diff options
context:
space:
mode:
authormiozune <miozune@gmail.com>2022-08-03 17:05:35 +0900
committerGitHub <noreply@github.com>2022-08-03 15:05:35 +0700
commita169dda9b44f6740a4550d629269526d355578bd (patch)
tree7cac9dabc8b9587cb8aec482255c6fc8c80bdcec /src/main/java/gtPlusPlus/xmod
parent04e48b02f1e27a446d6f0c5194557e047b01c49b (diff)
downloadGT5-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')
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/api/metatileentity/implementations/base/GregtechMeta_MultiBlockBase.java29
-rw-r--r--src/main/java/gtPlusPlus/xmod/gregtech/common/tileentities/machines/multi/production/GregtechMetaTileEntityTreeFarm.java45
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();