From 6cefcfb2b152fa66124b6c0f2443290f1f289ac9 Mon Sep 17 00:00:00 2001 From: Maxim Date: Wed, 12 Apr 2023 20:18:16 +0200 Subject: Fixed recipe lock not setting difference correctly (#1879) --- .../gregtech/api/util/GT_Single_Recipe_Check.java | 28 +++++++++++++++++----- .../GT_MetaTileEntity_LargeChemicalReactor.java | 4 ++-- .../multi/GT_MetaTileEntity_PyrolyseOven.java | 4 ++-- 3 files changed, 26 insertions(+), 10 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/gregtech/api/util/GT_Single_Recipe_Check.java b/src/main/java/gregtech/api/util/GT_Single_Recipe_Check.java index f46159a89f..4470139afa 100644 --- a/src/main/java/gregtech/api/util/GT_Single_Recipe_Check.java +++ b/src/main/java/gregtech/api/util/GT_Single_Recipe_Check.java @@ -340,16 +340,16 @@ public class GT_Single_Recipe_Check { } /** Call this before inputs are consumed by the recipe. */ - public Builder setBefore() { - beforeItems = buildItemMap(multiBlockBase); - beforeFluids = buildFluidMap(multiBlockBase); + public Builder setBefore(ItemStack[] inputs, FluidStack[] fluids) { + beforeItems = buildItemMapDirect(inputs); + beforeFluids = buildFluidMapDirect(fluids); return this; } /** Call this after inputs are consumed by the recipe. */ - public Builder setAfter() { - afterItems = buildItemMap(multiBlockBase); - afterFluids = buildFluidMap(multiBlockBase); + public Builder setAfter(ItemStack[] inputs, FluidStack[] fluids) { + afterItems = buildItemMapDirect(inputs); + afterFluids = buildFluidMapDirect(fluids); return this; } @@ -358,6 +358,22 @@ public class GT_Single_Recipe_Check { return this; } + static Map buildItemMapDirect(ItemStack[] inputs) { + Map itemMap = new HashMap<>(); + for (ItemStack itemStack : inputs) { + itemMap.merge(GT_Utility.ItemId.create(itemStack), itemStack.stackSize, Integer::sum); + } + return itemMap; + } + + static Map buildFluidMapDirect(FluidStack[] fluids) { + Map fluidMap = new HashMap<>(); + for (FluidStack fluidStack : fluids) { + fluidMap.merge(fluidStack.getFluid(), fluidStack.amount, Integer::sum); + } + return fluidMap; + } + public GT_Single_Recipe_Check build() { ImmutableMap.Builder itemCostBuilder = ImmutableMap.builder(); for (Map.Entry entry : beforeItems.entrySet()) { diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java index ee7821ddb8..de2f0ad24b 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_LargeChemicalReactor.java @@ -179,7 +179,7 @@ public class GT_MetaTileEntity_LargeChemicalReactor extends // We're locked to a single recipe, but haven't built the recipe checker yet. // Build the checker on next successful recipe. tSingleRecipeCheckBuilder = GT_Single_Recipe_Check.builder(this) - .setBefore(); + .setBefore(inputs, fluids); } tRecipe = GT_Recipe.GT_Recipe_Map.sMultiblockChemicalRecipes.findRecipe( @@ -195,7 +195,7 @@ public class GT_MetaTileEntity_LargeChemicalReactor extends } if (mLockedToSingleRecipe) { - mSingleRecipeCheck = tSingleRecipeCheckBuilder.setAfter() + mSingleRecipeCheck = tSingleRecipeCheckBuilder.setAfter(inputs, fluids) .setRecipe(tRecipe) .build(); } diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java index 00b3a1ff10..6a1964df3e 100644 --- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java +++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_PyrolyseOven.java @@ -176,7 +176,7 @@ public class GT_MetaTileEntity_PyrolyseOven // We're locked to a single recipe, but haven't built the recipe checker yet. // Build the checker on next successful recipe. tSingleRecipeCheckBuilder = GT_Single_Recipe_Check.builder(this) - .setBefore(); + .setBefore(tInputs, tFluids); } tRecipe = GT_Recipe.GT_Recipe_Map.sPyrolyseRecipes @@ -185,7 +185,7 @@ public class GT_MetaTileEntity_PyrolyseOven if (tRecipe == null || !tRecipe.isRecipeInputEqual(true, tFluids, tInputs)) return false; if (mLockedToSingleRecipe) { - mSingleRecipeCheck = tSingleRecipeCheckBuilder.setAfter() + mSingleRecipeCheck = tSingleRecipeCheckBuilder.setAfter(tInputs, tFluids) .setRecipe(tRecipe) .build(); } -- cgit