diff options
Diffstat (limited to 'src/main/java/gregtech/api/util')
| -rw-r--r-- | src/main/java/gregtech/api/util/GT_ParallelHelper.java | 10 | ||||
| -rw-r--r-- | src/main/java/gregtech/api/util/GT_Recipe.java | 131 |
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, |
