diff options
author | BlueWeabo <76872108+BlueWeabo@users.noreply.github.com> | 2023-01-23 18:53:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-23 17:53:41 +0100 |
commit | 236dd75b00ae81ce913fbd0e9ac8b2fdf2429cee (patch) | |
tree | 404ed25dcf2bd027c06c9f9f1a5c5452b2a622b0 | |
parent | 5be372876b8f68ef428a07c9338c6a27dd7ae941 (diff) | |
download | GT5-Unofficial-236dd75b00ae81ce913fbd0e9ac8b2fdf2429cee.tar.gz GT5-Unofficial-236dd75b00ae81ce913fbd0e9ac8b2fdf2429cee.tar.bz2 GT5-Unofficial-236dd75b00ae81ce913fbd0e9ac8b2fdf2429cee.zip |
Fixes parallel helper (#1674)
* fixes
* safety features
* spotless
* pain
* math hard
* math is very hard
* eight or seven
* more null checks
-rw-r--r-- | src/main/java/gregtech/api/util/GT_ParallelHelper.java | 58 | ||||
-rw-r--r-- | src/main/java/gregtech/api/util/GT_Recipe.java | 1 |
2 files changed, 37 insertions, 22 deletions
diff --git a/src/main/java/gregtech/api/util/GT_ParallelHelper.java b/src/main/java/gregtech/api/util/GT_ParallelHelper.java index 904afcad16..c320a5bd12 100644 --- a/src/main/java/gregtech/api/util/GT_ParallelHelper.java +++ b/src/main/java/gregtech/api/util/GT_ParallelHelper.java @@ -5,6 +5,7 @@ import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch_Output; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_MultiBlockBase; import gregtech.api.multitileentity.multiblock.base.MultiBlockController; +import gregtech.api.objects.XSTR; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_OutputBus_ME; import gregtech.common.tileentities.machines.GT_MetaTileEntity_Hatch_Output_ME; import java.util.Comparator; @@ -167,7 +168,7 @@ public class GT_ParallelHelper { throw new IllegalStateException("Tried to build twice"); } mBuilt = true; - determnieParallel(); + determineParallel(); return this; } @@ -219,7 +220,7 @@ public class GT_ParallelHelper { /** * Called by build(). Determines the parallels and everything else that needs to be done at build time */ - private void determnieParallel() { + private void determineParallel() { ItemStack[] tItemInputs = null; FluidStack[] tFluidInputs = null; boolean tMEOutputBus = false; @@ -230,14 +231,22 @@ public class GT_ParallelHelper { tItemInputs = mItemInputs; tFluidInputs = mFluidInputs; } else { - tItemInputs = new ItemStack[mItemInputs.length]; - for (int i = 0; i < mItemInputs.length; i++) { - tItemInputs[i] = mItemInputs[i].copy(); + if (mItemInputs == null) { + tItemInputs = new ItemStack[] {}; + } else { + tItemInputs = new ItemStack[mItemInputs.length]; + for (int i = 0; i < mItemInputs.length; i++) { + tItemInputs[i] = mItemInputs[i].copy(); + } } - tFluidInputs = new FluidStack[mFluidInputs.length]; - for (int i = 0; i < mFluidInputs.length; i++) { - tFluidInputs[i] = mFluidInputs[i].copy(); + if (mFluidInputs == null) { + mFluidInputs = new FluidStack[] {}; + } else { + tFluidInputs = new FluidStack[mFluidInputs.length]; + for (int i = 0; i < mFluidInputs.length; i++) { + tFluidInputs[i] = mFluidInputs[i].copy(); + } } } if (mBatchMode) { @@ -282,29 +291,34 @@ public class GT_ParallelHelper { // If Batch Mode is enabled determine how many extra parallels we can get if (mBatchMode) { int tExtraParallels = 0; - while (mRecipe.isRecipeInputEqual(true, true, tFluidInputs, tItemInputs) - && tExtraParallels < mCurrentParallel * mBatchModifier) { + while (tExtraParallels < mCurrentParallel * (mBatchModifier - 1) + && mRecipe.isRecipeInputEqual(false, false, tFluidInputs, tItemInputs)) { + mRecipe.isRecipeInputEqual(true, false, tFluidInputs, tItemInputs); tExtraParallels++; } + mDurationMultiplier = 1.0f + (float) tExtraParallels / mCurrentParallel; mCurrentParallel += tExtraParallels; - mDurationMultiplier = 1.0f + (float) mBatchModifier / tExtraParallels; } // If we want to calculate outputs we do it here if (mCalculateOutputs) { - mItemOutputs = new ItemStack[mRecipe.mOutputs.length]; - for (int i = 0; i < mRecipe.mOutputs.length; i++) { - if (mRecipe.mChances[i] <= mMachineMulti.getRandomNumber(10000)) { - ItemStack tItem = mRecipe.getOutput(i).copy(); - tItem.stackSize *= mCurrentParallel; - mItemOutputs[i] = tItem; + if (mRecipe.mOutputs != null) { + mItemOutputs = new ItemStack[mRecipe.mOutputs.length]; + for (int i = 0; i < mRecipe.mOutputs.length; i++) { + if (mRecipe.getOutputChance(i) >= XSTR.XSTR_INSTANCE.nextInt(10000)) { + ItemStack tItem = mRecipe.getOutput(i).copy(); + tItem.stackSize *= mCurrentParallel; + mItemOutputs[i] = tItem; + } } } - mFluidOutputs = new FluidStack[mRecipe.mFluidOutputs.length]; - for (int i = 0; i < mRecipe.mFluidOutputs.length; i++) { - FluidStack tFluid = mRecipe.getFluidOutput(i).copy(); - tFluid.amount *= mCurrentParallel; - mFluidOutputs[i] = tFluid; + if (mRecipe.mFluidOutputs != null) { + mFluidOutputs = new FluidStack[mRecipe.mFluidOutputs.length]; + for (int i = 0; i < mRecipe.mFluidOutputs.length; i++) { + FluidStack tFluid = mRecipe.getFluidOutput(i).copy(); + tFluid.amount *= mCurrentParallel; + mFluidOutputs[i] = tFluid; + } } } } diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java index 57164de89e..21d7d6ea3e 100644 --- a/src/main/java/gregtech/api/util/GT_Recipe.java +++ b/src/main/java/gregtech/api/util/GT_Recipe.java @@ -537,6 +537,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> { } public int getOutputChance(int aIndex) { + if (mChances == null) return 10000; if (aIndex < 0 || aIndex >= mChances.length) return 10000; return mChances[aIndex]; } |