From ef8a7d8bd5ff2effe987d41c31e95d71af99fd93 Mon Sep 17 00:00:00 2001 From: slprime <31038811+slprime@users.noreply.github.com> Date: Wed, 5 Nov 2025 23:15:45 +0200 Subject: [PATCH] Create normalizeRecipeQueryStack (#772) Co-authored-by: Martin Robertz --- .../nei/api/IStackStringifyHandler.java | 4 +++ .../nei/recipe/GuiCraftingRecipe.java | 17 ++++----- .../nei/recipe/GuiUsageRecipe.java | 14 ++------ .../codechicken/nei/recipe/StackInfo.java | 10 ++++++ .../GTFluidStackStringifyHandler.java | 35 ++++++++++++------- 5 files changed, 46 insertions(+), 34 deletions(-) diff --git a/src/main/java/codechicken/nei/api/IStackStringifyHandler.java b/src/main/java/codechicken/nei/api/IStackStringifyHandler.java index 0ee443cb..27586f36 100644 --- a/src/main/java/codechicken/nei/api/IStackStringifyHandler.java +++ b/src/main/java/codechicken/nei/api/IStackStringifyHandler.java @@ -18,6 +18,10 @@ public interface IStackStringifyHandler { return null; } + default ItemStack normalizeRecipeQueryStack(ItemStack stack) { + return null; + } + default void pauseItemDamageSound(boolean pause) {} } diff --git a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java index 261bb38a..06f0211b 100644 --- a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java @@ -20,7 +20,6 @@ import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.bookmark.BookmarksGridSlot; import codechicken.nei.recipe.Recipe.RecipeId; -import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler; public class GuiCraftingRecipe extends GuiRecipe { @@ -36,10 +35,13 @@ public class GuiCraftingRecipe extends GuiRecipe { final Minecraft mc = NEIClientUtils.mc(); final RecipeId recipeId; - if ("item".equals(outputId)) { - for (int i = 0; i < results.length; i++) { - results[i] = normalizeItemStack((ItemStack) results[i]); + for (int i = 0; i < results.length; i++) { + if (results[i] instanceof ItemStack stack) { + results[i] = StackInfo.normalizeRecipeQueryStack(stack.copy()); } + } + + if ("item".equals(outputId)) { recipeId = getRecipeId(mc.currentScreen, (ItemStack) results[0]); } else if ("recipeId".equals(outputId)) { recipeId = (RecipeId) results[1]; @@ -105,13 +107,6 @@ public class GuiCraftingRecipe extends GuiRecipe { return GuiRecipeTab.getHandlerInfo(handler).getHandlerName(); } - private static ItemStack normalizeItemStack(ItemStack stack) { - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = true; - stack = StackInfo.loadFromNBT(StackInfo.itemStackToNBT(stack)); - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = false; - return stack; - } - public static RecipeId getRecipeId(GuiScreen gui, ItemStack stackover) { if (gui instanceof GuiRecipe guiRecipe) { diff --git a/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java b/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java index 0e00ddce..03513db5 100644 --- a/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java @@ -12,7 +12,6 @@ import codechicken.nei.ItemPanels; import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.recipe.Recipe.RecipeId; -import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler; public class GuiUsageRecipe extends GuiRecipe { @@ -22,9 +21,9 @@ public class GuiUsageRecipe extends GuiRecipe { public static boolean openRecipeGui(String inputId, Object... ingredients) { - if ("item".equals(inputId)) { - for (int i = 0; i < ingredients.length; i++) { - ingredients[i] = normalizeItemStack((ItemStack) ingredients[i]); + for (int i = 0; i < ingredients.length; i++) { + if (ingredients[i] instanceof ItemStack stack) { + ingredients[i] = StackInfo.normalizeRecipeQueryStack(stack.copy()); } } @@ -66,13 +65,6 @@ public class GuiUsageRecipe extends GuiRecipe { return recipeQuery.runWithProfiling(NEIClientUtils.translate("recipe.concurrent.usage")); } - private static ItemStack normalizeItemStack(ItemStack stack) { - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = true; - stack = StackInfo.loadFromNBT(StackInfo.itemStackToNBT(stack)); - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = false; - return stack; - } - public static void registerUsageHandler(IUsageHandler handler) { final String handlerId = handler.getHandlerId(); diff --git a/src/main/java/codechicken/nei/recipe/StackInfo.java b/src/main/java/codechicken/nei/recipe/StackInfo.java index db91c06c..ca4ad512 100644 --- a/src/main/java/codechicken/nei/recipe/StackInfo.java +++ b/src/main/java/codechicken/nei/recipe/StackInfo.java @@ -76,6 +76,16 @@ public class StackInfo { return stack; } + public static ItemStack normalizeRecipeQueryStack(ItemStack stack) { + ItemStack result = null; + + for (int i = stackStringifyHandlers.size() - 1; i >= 0 && result == null; i--) { + result = stackStringifyHandlers.get(i).normalizeRecipeQueryStack(stack); + } + + return result == null ? stack : result; + } + public static void pauseItemDamageSound(boolean pause) { if (isPausedItemDamageSound != (isPausedItemDamageSound = pause)) { for (IStackStringifyHandler handler : stackStringifyHandlers) { diff --git a/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java b/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java index 79661d42..16bff592 100644 --- a/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java +++ b/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java @@ -19,9 +19,8 @@ public class GTFluidStackStringifyHandler implements IStackStringifyHandler { protected static Class itemFluidDisplay = null; protected static Method getFluidDisplayStack = null; protected static Method getFluidFromDisplayStack = null; - public static boolean replaceAE2FCFluidDrop = false; - private static Class gtMetaGeneratedTool = null; - private static Field playSound = null; + protected static Class gtMetaGeneratedTool = null; + protected static Field playSound = null; static { try { @@ -48,7 +47,7 @@ public class GTFluidStackStringifyHandler implements IStackStringifyHandler { public NBTTagCompound convertItemStackToNBT(ItemStack stack, boolean saveStackSize) { - if (replaceAE2FCFluidDrop || stack.getItem() != GameRegistry.findItem("ae2fc", "fluid_drop")) { + if (stack.getItem() != GameRegistry.findItem("ae2fc", "fluid_drop")) { final FluidStack fluidStack = getFluid(stack); if (fluidStack != null) { @@ -69,14 +68,11 @@ public class GTFluidStackStringifyHandler implements IStackStringifyHandler { final Fluid fluid = FluidRegistry.getFluid(fluidName); final int amount = nbtTag.getInteger("Count"); - try { - final Object obj = getFluidDisplayStack.invoke(null, new FluidStack(fluid, amount), true); - - if (obj != null) { - return (ItemStack) obj; - } - - } catch (Exception e) {} + if (fluid != null) { + try { + return (ItemStack) getFluidDisplayStack.invoke(null, new FluidStack(fluid, amount), true); + } catch (Exception e) {} + } } return null; @@ -114,6 +110,21 @@ public class GTFluidStackStringifyHandler implements IStackStringifyHandler { return null; } + public ItemStack normalizeRecipeQueryStack(ItemStack stack) { + + if (stack.getItem() == GameRegistry.findItem("ae2fc", "fluid_drop")) { + final FluidStack fluidStack = getFluid(stack); + + if (fluidStack != null) { + try { + return (ItemStack) getFluidDisplayStack.invoke(null, fluidStack, true); + } catch (Exception e) {} + } + } + + return null; + } + @Override public void pauseItemDamageSound(boolean pause) { if (playSound != null) {