From 1c3528981c1334ba2a0edbb1ef570a25fc0723d2 Mon Sep 17 00:00:00 2001 From: Integer Limit <103940576+IntegerLimit@users.noreply.github.com> Date: Tue, 20 Aug 2024 21:08:05 +1000 Subject: [PATCH] Fix Parallelization of Recipes with Uncached Inputs --- .../mixin/gregtech/RecipeBuilderMixin.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/com/nomiceu/nomilabs/mixin/gregtech/RecipeBuilderMixin.java b/src/main/java/com/nomiceu/nomilabs/mixin/gregtech/RecipeBuilderMixin.java index 1db9dc79..61d481cf 100644 --- a/src/main/java/com/nomiceu/nomilabs/mixin/gregtech/RecipeBuilderMixin.java +++ b/src/main/java/com/nomiceu/nomilabs/mixin/gregtech/RecipeBuilderMixin.java @@ -14,6 +14,8 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; import com.cleanroommc.groovyscript.api.GroovyLog; import com.cleanroommc.groovyscript.api.IIngredient; @@ -32,6 +34,9 @@ import gregtech.api.recipes.ingredients.nbtmatch.NBTMatcher; import gregtech.api.util.EnumValidationResult; +/** + * Adds some util functions to Recipe Builders. Also fixes an issue with parallelizing recipes with non-cached inputs. + */ @SuppressWarnings({ "unchecked", "DataFlowIssue" }) @Mixin(value = RecipeBuilder.class, remap = false) public abstract class RecipeBuilderMixin> { @@ -76,6 +81,20 @@ private static GTRecipeInput ofGroovyIngredient(IIngredient ingredient) { @Shadow protected GTRecipeCategory category; + @Redirect(method = "lambda$multiplyInputsAndOutputs$1", + at = @At(value = "INVOKE", + target = "Lgregtech/api/recipes/ingredients/GTRecipeInput;withAmount(I)Lgregtech/api/recipes/ingredients/GTRecipeInput;")) + private static GTRecipeInput fixCopyingInputs(GTRecipeInput instance, int amount) { + return instance.copyWithAmount(amount); + } + + @Redirect(method = "lambda$multiplyInputsAndOutputs$2", + at = @At(value = "INVOKE", + target = "Lgregtech/api/recipes/ingredients/GTRecipeInput;withAmount(I)Lgregtech/api/recipes/ingredients/GTRecipeInput;")) + private static GTRecipeInput fixCopyingFluidInputs(GTRecipeInput instance, int amount) { + return instance.copyWithAmount(amount); + } + @Unique @SuppressWarnings("unused") public R changeRecycling() {