aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api/util')
-rw-r--r--src/main/java/gregtech/api/util/GT_ParallelHelper.java10
-rw-r--r--src/main/java/gregtech/api/util/GT_Recipe.java131
2 files changed, 88 insertions, 53 deletions
diff --git a/src/main/java/gregtech/api/util/GT_ParallelHelper.java b/src/main/java/gregtech/api/util/GT_ParallelHelper.java
index b44e9167f5..13fe6290f3 100644
--- a/src/main/java/gregtech/api/util/GT_ParallelHelper.java
+++ b/src/main/java/gregtech/api/util/GT_ParallelHelper.java
@@ -215,7 +215,7 @@ public class GT_ParallelHelper {
/**
* Set if we should consume inputs or not when trying for parallels
- *
+ *
* @param consume Should we consume inputs
*/
public GT_ParallelHelper setConsumption(boolean consume) {
@@ -251,7 +251,7 @@ public class GT_ParallelHelper {
/**
* Sets if we should calculate outputs with the parallels we found or not
- *
+ *
* @param calculateOutputs Should we calculate outputs with the helper or not
*/
public GT_ParallelHelper setOutputCalculation(boolean calculateOutputs) {
@@ -402,6 +402,11 @@ public class GT_ParallelHelper {
.setEUtDiscount(eutModifier);
}
+ final int tRecipeEUt = (int) Math.ceil(recipe.mEUt * eutModifier);
+ if (availableEUt < tRecipeEUt) {
+ result = CheckRecipeResultRegistry.insufficientPower(tRecipeEUt);
+ }
+
// Save the original max parallel before calculating our overclocking under 1 tick
int originalMaxParallel = maxParallel;
double tickTimeAfterOC = calculator.setParallel(originalMaxParallel)
@@ -450,7 +455,6 @@ public class GT_ParallelHelper {
maxParallelBeforeBatchMode = Math.min(maxParallel, maxParallelBeforeBatchMode);
- final int tRecipeEUt = (int) Math.ceil(recipe.mEUt * eutModifier);
// Consume inputs to determine normal parallel
if (recipeCheck != null) {
int actualMaxParallel = (int) Math.min(maxParallelBeforeBatchMode, availableEUt / tRecipeEUt);
diff --git a/src/main/java/gregtech/api/util/GT_Recipe.java b/src/main/java/gregtech/api/util/GT_Recipe.java
index 2442e5b720..cc2a2b0626 100644
--- a/src/main/java/gregtech/api/util/GT_Recipe.java
+++ b/src/main/java/gregtech/api/util/GT_Recipe.java
@@ -30,19 +30,11 @@ import static net.minecraft.util.EnumChatFormatting.GRAY;
import static net.minecraft.util.StatCollector.translateToLocal;
import java.awt.Rectangle;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
import java.util.function.Function;
+import java.util.function.Predicate;
import java.util.function.Supplier;
import javax.annotation.Nonnull;
@@ -3999,9 +3991,40 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
* @return Result of the recipe search
*/
@Nonnull
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
+ public final FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
ItemStack... aInputs) {
+ return findRecipeWithResult(
+ aRecipe,
+ recipe -> aVoltage * mAmperage >= recipe.mEUt,
+ aNotUnificated,
+ aDontCheckStackSizes,
+ aVoltage,
+ aFluids,
+ aSpecialSlot,
+ aInputs);
+ }
+
+ /**
+ * finds a Recipe matching the aFluid and ItemStack Inputs.
+ *
+ * @param aRecipe in case this is != null it will try to use this Recipe first when looking things
+ * up.
+ * @param aIsValidRecipe predicate to help identify, if the recipe matches our machine
+ * @param aNotUnificated if this is T the Recipe searcher will unificate the ItemStack Inputs
+ * @param aDontCheckStackSizes if set to false will only return recipes that can be executed at least once with
+ * the provided input
+ * @param aVoltage Voltage of the Machine or Long.MAX_VALUE if it has no Voltage
+ * @param aFluids the Fluid Inputs
+ * @param aSpecialSlot the content of the Special Slot, the regular Manager doesn't do anything with
+ * this, but some custom ones do.
+ * @param aInputs the Item Inputs
+ * @return Result of the recipe search
+ */
+ @Nonnull
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
// No Recipes? Well, nothing to be found then.
if (mRecipeList.isEmpty()) return NOT_FOUND;
@@ -4032,9 +4055,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
&& aRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs)) {
if (!isSpecialSlotSensitive
|| GT_Utility.areStacksEqualOrNull((ItemStack) aRecipe.mSpecialItems, aSpecialSlot)) {
- return aRecipe.mEnabled && aVoltage * mAmperage >= aRecipe.mEUt
- ? FindRecipeResult.ofSuccess(aRecipe)
- : FindRecipeResult.ofInsufficientVoltage(aRecipe);
+ if (aRecipe.mEnabled && aIsValidRecipe.test(aRecipe)) {
+ return ofSuccess(aRecipe);
+ }
}
}
@@ -4045,9 +4068,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
&& tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs)) {
if (!isSpecialSlotSensitive
|| GT_Utility.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) {
- return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt
- ? FindRecipeResult.ofSuccess(tRecipe)
- : FindRecipeResult.ofInsufficientVoltage(tRecipe);
+ if (tRecipe.mEnabled && aIsValidRecipe.test(tRecipe)) {
+ return ofSuccess(tRecipe);
+ }
}
}
tRecipes = mRecipeItemMap.get(new GT_ItemStack(tStack, true));
@@ -4055,9 +4078,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
&& tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs)) {
if (!isSpecialSlotSensitive
|| GT_Utility.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) {
- return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt
- ? FindRecipeResult.ofSuccess(tRecipe)
- : FindRecipeResult.ofInsufficientVoltage(tRecipe);
+ if (tRecipe.mEnabled && aIsValidRecipe.test(tRecipe)) {
+ return ofSuccess(tRecipe);
+ }
}
}
}
@@ -4072,9 +4095,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
&& tRecipe.isRecipeInputEqual(false, aDontCheckStackSizes, aFluids, aInputs)) {
if (!isSpecialSlotSensitive
|| GT_Utility.areStacksEqualOrNull((ItemStack) tRecipe.mSpecialItems, aSpecialSlot)) {
- return tRecipe.mEnabled && aVoltage * mAmperage >= tRecipe.mEUt
- ? FindRecipeResult.ofSuccess(tRecipe)
- : FindRecipeResult.ofInsufficientVoltage(tRecipe);
+ if (tRecipe.mEnabled && aIsValidRecipe.test(tRecipe)) {
+ return ofSuccess(tRecipe);
+ }
}
}
}
@@ -4941,9 +4964,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
if (aInputs == null || aInputs.length == 0 || aInputs[0] == null) return NOT_FOUND;
if (aRecipe != null && aRecipe.isRecipeInputEqual(false, true, aFluids, aInputs))
return FindRecipeResult.ofSuccess(aRecipe);
@@ -4998,9 +5021,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
if (aInputs == null || aInputs.length == 0 || aInputs[0] == null) return NOT_FOUND;
if (aRecipe != null && aRecipe.isRecipeInputEqual(false, true, aFluids, aInputs))
return FindRecipeResult.ofSuccess(aRecipe);
@@ -5118,12 +5141,13 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
if (aInputs == null || aInputs.length == 0 || !ItemList.IC2_Scrapbox.isStackEqual(aInputs[0], false, true))
return super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5133,6 +5157,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
ItemStack tOutput = GT_ModHandler.getRandomScrapboxDrop();
if (tOutput == null) return super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5193,11 +5218,12 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
FindRecipeResult result = super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5293,9 +5319,9 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
if (aInputs == null || aInputs.length == 0 || aInputs[0] == null) return NOT_FOUND;
if (aRecipe != null && aRecipe.isRecipeInputEqual(false, true, aFluids, aInputs))
return FindRecipeResult.ofSuccess(aRecipe);
@@ -5348,12 +5374,13 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
if (aInputs == null || aInputs.length == 0 || aInputs[0] == null || !GregTech_API.sPostloadFinished)
return super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5362,6 +5389,7 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
aInputs);
FindRecipeResult result = super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5466,12 +5494,13 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
FindRecipeResult result = super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
true,
aDontCheckStackSizes,
aVoltage,
@@ -5535,11 +5564,12 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
FindRecipeResult result = super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,
@@ -5637,11 +5667,12 @@ public class GT_Recipe implements Comparable<GT_Recipe> {
@Nonnull
@Override
- public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, boolean aNotUnificated,
- boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids, ItemStack aSpecialSlot,
- ItemStack... aInputs) {
+ public FindRecipeResult findRecipeWithResult(GT_Recipe aRecipe, Predicate<GT_Recipe> aIsValidRecipe,
+ boolean aNotUnificated, boolean aDontCheckStackSizes, long aVoltage, FluidStack[] aFluids,
+ ItemStack aSpecialSlot, ItemStack... aInputs) {
FindRecipeResult result = super.findRecipeWithResult(
aRecipe,
+ aIsValidRecipe,
aNotUnificated,
aDontCheckStackSizes,
aVoltage,