From 1b60f0b3afe7465203b0d4e690c02fdeb220a3aa Mon Sep 17 00:00:00 2001 From: slprime Date: Sat, 3 Feb 2024 18:10:44 +0200 Subject: [PATCH] Open GuiRecipe: normalizeItemStack --- .../nei/api/ShortcutInputHandler.java | 13 +---- .../nei/recipe/GuiCraftingRecipe.java | 9 ++++ .../nei/recipe/GuiUsageRecipe.java | 51 ++++++++++++++----- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java index b9cbbd8c3..7eefce1a2 100644 --- a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java +++ b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java @@ -20,8 +20,6 @@ import codechicken.nei.recipe.GuiCraftingRecipe; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.GuiUsageRecipe; -import codechicken.nei.recipe.StackInfo; -import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler; public abstract class ShortcutInputHandler { @@ -67,11 +65,11 @@ public static boolean handleKeyEvent(ItemStack stackover) { } if (NEIClientConfig.isKeyHashDown("gui.recipe")) { - return GuiCraftingRecipe.openRecipeGui("item", normalizeItemStack(stackover)); + return GuiCraftingRecipe.openRecipeGui("item", stackover); } if (NEIClientConfig.isKeyHashDown("gui.usage")) { - return GuiUsageRecipe.openRecipeGui("item", normalizeItemStack(stackover)); + return GuiUsageRecipe.openRecipeGui("item", stackover); } if (NEIClientConfig.isKeyHashDown("gui.bookmark")) { @@ -101,7 +99,6 @@ public static boolean handleMouseClick(ItemStack stackover) { if (stackover != null) { final int button = Mouse.getEventButton(); - stackover = stackover.copy(); if (button == 0) { return GuiCraftingRecipe.openRecipeGui("item", stackover); @@ -167,10 +164,4 @@ private static boolean saveRecipeInBookmark(ItemStack stack, boolean saveIngredi return false; } - private static ItemStack normalizeItemStack(ItemStack stack) { - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = true; - stack = StackInfo.loadFromNBT(StackInfo.itemStackToNBT(stack)); - GTFluidStackStringifyHandler.replaceAE2FCFluidDrop = false; - return stack; - } } diff --git a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java index d4140d474..1425c95ec 100644 --- a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java @@ -18,6 +18,7 @@ import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.PositionedStack; +import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler; public class GuiCraftingRecipe extends GuiRecipe { @@ -33,6 +34,7 @@ public static GuiRecipe createRecipeGui(String outputId, boolean open, Object final BookmarkRecipeId recipeId; if ("item".equals(outputId)) { + results = Arrays.asList(results).stream().map(rslt -> normalizeItemStack((ItemStack) rslt)).toArray(); recipeId = getRecipeId(mc.currentScreen, (ItemStack) results[0]); } else if ("recipeId".equals(outputId)) { recipeId = (BookmarkRecipeId) results[1]; @@ -114,6 +116,13 @@ private static String getHandlerName(ICraftingHandler handler) { 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; + } + protected static BookmarkRecipeId getRecipeId(GuiScreen gui, ItemStack stackover) { if (gui instanceof GuiRecipe) { diff --git a/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java b/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java index fd4ba184f..4453980b0 100644 --- a/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiUsageRecipe.java @@ -4,9 +4,11 @@ import java.util.Arrays; import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; +import codechicken.nei.recipe.stackinfo.GTFluidStackStringifyHandler; public class GuiUsageRecipe extends GuiRecipe { @@ -14,29 +16,50 @@ public class GuiUsageRecipe extends GuiRecipe { public static ArrayList serialUsageHandlers = new ArrayList<>(); public static boolean openRecipeGui(String inputId, Object... ingredients) { - RecipeHandlerQuery recipeQuery = new RecipeHandlerQuery<>( + + if ("item".equals(inputId)) { + ingredients = Arrays.asList(ingredients).stream().map(ingr -> normalizeItemStack((ItemStack) ingr)) + .toArray(); + } + + final ArrayList handlers = getUsageHandlers(inputId, ingredients); + + if (!handlers.isEmpty()) { + final Minecraft mc = NEIClientUtils.mc(); + final BookmarkRecipeId recipeId = getCurrentRecipe(mc.currentScreen); + final GuiUsageRecipe gui = new GuiUsageRecipe(handlers); + + mc.displayGuiScreen(gui); + gui.openTargetRecipe(recipeId); + return true; + } + + return false; + } + + private GuiUsageRecipe(ArrayList handlers) { + super(NEIClientUtils.mc().currentScreen); + this.currenthandlers = handlers; + } + + public static ArrayList getUsageHandlers(String inputId, Object... ingredients) { + + final RecipeHandlerQuery recipeQuery = new RecipeHandlerQuery<>( h -> getUsageOrCatalystHandler(h, inputId, ingredients), usagehandlers, serialUsageHandlers, "Error while looking up usage recipe", "inputId: " + inputId, "ingredients: " + Arrays.toString(ingredients)); - ArrayList handlers = recipeQuery.runWithProfiling("recipe.concurrent.usage"); - if (handlers.isEmpty()) return false; - Minecraft mc = NEIClientUtils.mc(); - BookmarkRecipeId recipeId = getCurrentRecipe(mc.currentScreen); - GuiUsageRecipe gui = new GuiUsageRecipe(handlers); - - mc.displayGuiScreen(gui); - gui.openTargetRecipe(recipeId); - - return true; + return recipeQuery.runWithProfiling("recipe.concurrent.usage"); } - private GuiUsageRecipe(ArrayList handlers) { - super(NEIClientUtils.mc().currentScreen); - this.currenthandlers = handlers; + 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) {