aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util/GT_ParallelHelper.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util/GT_ParallelHelper.java')
-rw-r--r--src/main/java/gregtech/api/util/GT_ParallelHelper.java32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/main/java/gregtech/api/util/GT_ParallelHelper.java b/src/main/java/gregtech/api/util/GT_ParallelHelper.java
index 64dd8cba96..0f0dc4549f 100644
--- a/src/main/java/gregtech/api/util/GT_ParallelHelper.java
+++ b/src/main/java/gregtech/api/util/GT_ParallelHelper.java
@@ -1,5 +1,6 @@
package gregtech.api.util;
+import java.util.Arrays;
import java.util.Objects;
import java.util.function.Function;
@@ -377,6 +378,13 @@ public class GT_ParallelHelper {
maxParallel *= batchModifier;
}
+ final ItemStack[] truncatedItemOutputs = recipe.mOutputs != null
+ ? Arrays.copyOfRange(recipe.mOutputs, 0, Math.min(machine.getItemOutputLimit(), recipe.mOutputs.length))
+ : new ItemStack[0];
+ final FluidStack[] truncatedFluidOutputs = recipe.mFluidOutputs != null ? Arrays
+ .copyOfRange(recipe.mFluidOutputs, 0, Math.min(machine.getFluidOutputLimit(), recipe.mFluidOutputs.length))
+ : new FluidStack[0];
+
SingleRecipeCheck recipeCheck = null;
SingleRecipeCheck.Builder tSingleRecipeCheckBuilder = null;
if (isRecipeLocked && singleRecipeMachine != null) {
@@ -399,8 +407,8 @@ public class GT_ParallelHelper {
}
VoidProtectionHelper voidProtectionHelper = new VoidProtectionHelper();
voidProtectionHelper.setMachine(machine)
- .setItemOutputs(recipe.mOutputs)
- .setFluidOutputs(recipe.mFluidOutputs)
+ .setItemOutputs(truncatedItemOutputs)
+ .setFluidOutputs(truncatedFluidOutputs)
.setMaxParallel(maxParallel)
.build();
maxParallel = Math.min(voidProtectionHelper.getMaxParallel(), maxParallel);
@@ -466,11 +474,11 @@ public class GT_ParallelHelper {
// If we want to calculate outputs we do it here
if (calculateOutputs && currentParallel > 0) {
- if (recipe.mOutputs != null) {
- calculateItemOutputs();
+ if (truncatedItemOutputs.length > 0) {
+ calculateItemOutputs(truncatedItemOutputs);
}
- if (recipe.mFluidOutputs != null) {
- calculateFluidOutputs();
+ if (truncatedFluidOutputs.length > 0) {
+ calculateFluidOutputs(truncatedFluidOutputs);
}
}
result = CheckRecipeResultRegistry.SUCCESSFUL;
@@ -491,13 +499,13 @@ public class GT_ParallelHelper {
fluidInputs = fluidInputsToUse;
}
- protected void calculateItemOutputs() {
+ private void calculateItemOutputs(ItemStack[] truncatedItemOutputs) {
if (customItemOutputCalculation != null) {
itemOutputs = customItemOutputCalculation.apply(currentParallel);
return;
}
- itemOutputs = new ItemStack[recipe.mOutputs.length];
- for (int i = 0; i < recipe.mOutputs.length; i++) {
+ itemOutputs = new ItemStack[truncatedItemOutputs.length];
+ for (int i = 0; i < truncatedItemOutputs.length; i++) {
if (recipe.getOutputChance(i) >= 10000) {
ItemStack item = recipe.getOutput(i)
.copy();
@@ -523,13 +531,13 @@ public class GT_ParallelHelper {
}
}
- protected void calculateFluidOutputs() {
+ private void calculateFluidOutputs(FluidStack[] truncatedFluidOutputs) {
if (customFluidOutputCalculation != null) {
fluidOutputs = customFluidOutputCalculation.apply(currentParallel);
return;
}
- fluidOutputs = new FluidStack[recipe.mFluidOutputs.length];
- for (int i = 0; i < recipe.mFluidOutputs.length; i++) {
+ fluidOutputs = new FluidStack[truncatedFluidOutputs.length];
+ for (int i = 0; i < truncatedFluidOutputs.length; i++) {
if (recipe.getFluidOutput(i) == null) {
fluidOutputs[i] = null;
} else {