diff --git a/src/main/java/codechicken/nei/recipe/FireworkRecipeHandler.java b/src/main/java/codechicken/nei/recipe/FireworkRecipeHandler.java index 312527cf..7ddff569 100644 --- a/src/main/java/codechicken/nei/recipe/FireworkRecipeHandler.java +++ b/src/main/java/codechicken/nei/recipe/FireworkRecipeHandler.java @@ -150,7 +150,7 @@ public class FireworkRecipeHandler extends ShapelessRecipeHandler { } @Override - public List handleTooltip(GuiRecipe gui, List currenttip, int recipe) { + public List handleTooltip(GuiRecipe gui, List currenttip, int recipe) { currenttip = super.handleTooltip(gui, currenttip, recipe); Point mousepos = GuiDraw.getMousePosition(); Point relMouse = new Point(mousepos.x - gui.guiLeft, mousepos.y - gui.guiTop); diff --git a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java index db589060..ffe57d6f 100644 --- a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java @@ -1,88 +1,46 @@ package codechicken.nei.recipe; -import codechicken.core.TaskProfiler; -import codechicken.nei.ItemList; import codechicken.nei.ItemPanels; import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; import codechicken.nei.PositionedStack; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; -import java.util.stream.Collectors; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; -import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; -import net.minecraft.util.ChatComponentTranslation; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IChatComponent; -public class GuiCraftingRecipe extends GuiRecipe { +public class GuiCraftingRecipe extends GuiRecipe { + public static ArrayList craftinghandlers = new ArrayList<>(); + public static ArrayList serialCraftingHandlers = new ArrayList<>(); + public static boolean openRecipeGui(String outputId, Object... results) { return openRecipeGui(outputId, false, results); } public static boolean openRecipeGui(String outputId, Boolean overlay, Object... results) { - Minecraft mc = NEIClientUtils.mc(); - GuiScreen prevscreen = mc.currentScreen; // instanceof GuiContainer ? (GuiContainer) mc.currentScreen : null; - - ArrayList handlers; - TaskProfiler profiler = ProfilerRecipeHandler.getProfiler(); - profiler.start("recipe.concurrent.crafting"); - - // Pre-find the fuels so we're not fighting over it - FuelRecipeHandler.findFuelsOnceParallel(); - - try { - handlers = serialCraftingHandlers.stream() - .map(h -> h.getRecipeHandler(outputId, results)) - .filter(h -> h.numRecipes() > 0) - .collect(Collectors.toCollection(ArrayList::new)); - - handlers.addAll(ItemList.forkJoinPool - .submit(() -> craftinghandlers.parallelStream() - .map(h -> h.getRecipeHandler(outputId, results)) - .filter(h -> h.numRecipes() > 0) - .collect(Collectors.toCollection(ArrayList::new))) - .get()); - } catch (InterruptedException | ExecutionException e) { - e.printStackTrace(); - EntityPlayer player = Minecraft.getMinecraft().thePlayer; - if (player != null) { - IChatComponent chat = new ChatComponentTranslation("nei.chat.recipe.error"); - chat.getChatStyle().setColor(EnumChatFormatting.RED); - player.addChatComponentMessage(chat); - } - return false; - } finally { - profiler.end(); - } - + RecipeHandlerQuery recipeQuery = new RecipeHandlerQuery<>( + h -> h.getRecipeHandler(outputId, results), craftinghandlers, serialCraftingHandlers); + ArrayList handlers = recipeQuery.runWithProfiling("recipe.concurrent.crafting"); if (handlers.isEmpty()) return false; - handlers.sort(NEIClientConfig.HANDLER_COMPARATOR); + Minecraft mc = NEIClientUtils.mc(); - BookmarkRecipeId recipeId = null; + BookmarkRecipeId recipeId = (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() && "item".equals(outputId)) + ? getRecipeId(mc.currentScreen, (ItemStack) results[0]) + : getCurrentRecipe(); - if ("item".equals(outputId)) { - recipeId = getRecipeId(prevscreen, (ItemStack) results[0]); - } + if (overlay && recipeId == null) return false; - GuiCraftingRecipe gui = new GuiCraftingRecipe(prevscreen, handlers, recipeId); + GuiCraftingRecipe gui = new GuiCraftingRecipe(handlers, recipeId); mc.displayGuiScreen(gui); - if (NEIClientConfig.saveCurrentRecipeInBookmarksEnabled()) - if (!NEIClientUtils.shiftKey() || overlay) { - gui.openTargetRecipe(gui.recipeId); - } + if (recipeId != null && (!NEIClientUtils.shiftKey() || overlay)) { + gui.openTargetRecipe(gui.recipeId); + } if (overlay) { - if (!NEIClientConfig.saveCurrentRecipeInBookmarksEnabled() || gui.recipeId == null) { - mc.displayGuiScreen(prevscreen); - return false; - } gui.overlayRecipe(gui.recipeId.position); } @@ -92,8 +50,8 @@ public class GuiCraftingRecipe extends GuiRecipe { protected static BookmarkRecipeId getRecipeId(GuiScreen gui, ItemStack stackover) { if (gui instanceof GuiRecipe) { - final List ingredients = ((GuiRecipe) gui).getFocusedRecipeIngredients(); - final String handlerName = ((GuiRecipe) gui).getHandlerName(); + final List ingredients = ((GuiRecipe) gui).getFocusedRecipeIngredients(); + final String handlerName = ((GuiRecipe) gui).getHandlerName(); if (ingredients != null && !ingredients.isEmpty()) { return new BookmarkRecipeId(handlerName, ingredients); @@ -103,16 +61,12 @@ public class GuiCraftingRecipe extends GuiRecipe { return ItemPanels.bookmarkPanel.getBookmarkRecipeId(stackover); } - private GuiCraftingRecipe(GuiScreen prevgui, ArrayList handlers, BookmarkRecipeId recipeId) { - this(prevgui, handlers); + private GuiCraftingRecipe(ArrayList handlers, BookmarkRecipeId recipeId) { + super(NEIClientUtils.mc().currentScreen); + this.currenthandlers = handlers; this.recipeId = recipeId; } - private GuiCraftingRecipe(GuiScreen prevgui, ArrayList handlers) { - super(prevgui); - currenthandlers = handlers; - } - public static void registerRecipeHandler(ICraftingHandler handler) { final String handlerId = handler.getHandlerId(); if (craftinghandlers.stream().anyMatch(h -> h.getHandlerId().equals(handlerId)) @@ -123,12 +77,8 @@ public class GuiCraftingRecipe extends GuiRecipe { else craftinghandlers.add(handler); } - public ArrayList getCurrentRecipeHandlers() { + @Override + public ArrayList getCurrentRecipeHandlers() { return currenthandlers; } - - public ArrayList currenthandlers; - - public static ArrayList craftinghandlers = new ArrayList<>(); - public static ArrayList serialCraftingHandlers = new ArrayList<>(); } diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipe.java b/src/main/java/codechicken/nei/recipe/GuiRecipe.java index b8ffc343..bf1d4594 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipe.java @@ -28,6 +28,7 @@ import java.util.Optional; import java.util.regex.Matcher; import java.util.stream.Collectors; import java.util.stream.IntStream; +import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.inventory.GuiContainer; @@ -38,7 +39,7 @@ import net.minecraft.item.ItemStack; import org.lwjgl.input.Keyboard; import org.lwjgl.opengl.GL11; -public abstract class GuiRecipe extends GuiContainer +public abstract class GuiRecipe extends GuiContainer implements IGuiContainerOverlay, IGuiClientSide, IGuiHandleMouseWheel, @@ -66,7 +67,7 @@ public abstract class GuiRecipe extends GuiContainer final DrawableResource bgBottom = new DrawableBuilder("nei:textures/gui/recipebg.png", 0, BG_BOTTOM_Y, 176, BG_BOTTOM_HEIGHT).build(); - public ArrayList currenthandlers = new ArrayList<>(); + public ArrayList currenthandlers = new ArrayList<>(); public int page; public int recipetype; @@ -80,13 +81,13 @@ public abstract class GuiRecipe extends GuiContainer private GuiButton nexttype; private GuiButton prevtype; - private int OVERLAY_BUTTON_ID_START = 4; + private final int OVERLAY_BUTTON_ID_START = 4; private GuiButton[] overlayButtons; private final Rectangle area = new Rectangle(); private final GuiRecipeTabs recipeTabs; private final GuiRecipeCatalyst guiRecipeCatalyst; - private IRecipeHandler handler; + private H handler; private HandlerInfo handlerInfo; private int yShift = 0; @@ -236,7 +237,7 @@ public abstract class GuiRecipe extends GuiContainer if (recipeId.handlerName != null) { for (int j = 0; j < currenthandlers.size(); j++) { - IRecipeHandler localHandler = currenthandlers.get(j); + H localHandler = currenthandlers.get(j); HandlerInfo localHandlerInfo = GuiRecipeTab.getHandlerInfo(localHandler); if (localHandlerInfo.getHandlerName().equals(recipeId.handlerName)) { @@ -293,7 +294,7 @@ public abstract class GuiRecipe extends GuiContainer return handlerInfo.getHandlerName(); } - public IRecipeHandler getHandler() { + public H getHandler() { return handler; } @@ -686,7 +687,7 @@ public abstract class GuiRecipe extends GuiContainer return new Point(5, 32 + yShift + ((recipe % getRecipesPerPage()) * handlerInfo.getHeight())); } - public abstract ArrayList getCurrentRecipeHandlers(); + public abstract ArrayList getCurrentRecipeHandlers(); @Override public VisiblityData modifyVisiblity(GuiContainer gui, VisiblityData currentVisibility) { @@ -713,4 +714,15 @@ public abstract class GuiRecipe extends GuiContainer // Because some of the handlers *cough avaritia* are oversized return area.intersects(x, y, w, h); } + + static BookmarkRecipeId getCurrentRecipe() { + Minecraft mc = NEIClientUtils.mc(); + if (mc.currentScreen instanceof GuiRecipe) { + GuiRecipe gui = (GuiRecipe) mc.currentScreen; + return new BookmarkRecipeId( + gui.handlerInfo.getHandlerName(), + gui.getHandler().getIngredientStacks(gui.page * gui.getRecipesPerPage())); + } + return null; + } } diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipeCatalyst.java b/src/main/java/codechicken/nei/recipe/GuiRecipeCatalyst.java index 02e76f7d..b4ccee36 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipeCatalyst.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipeCatalyst.java @@ -9,7 +9,7 @@ import net.minecraft.util.ResourceLocation; import org.lwjgl.util.Rectangle; public class GuiRecipeCatalyst extends INEIGuiAdapter { - private GuiRecipe guiRecipe; + private GuiRecipe guiRecipe; public static final int ingredientSize = 16; public static final int ingredientBorder = 1; public static final int tabBorder = 5; @@ -18,7 +18,7 @@ public class GuiRecipeCatalyst extends INEIGuiAdapter { private static final Rectangle catalystRect = new Rectangle(); private static final Rectangle targetRect = new Rectangle(); - public GuiRecipeCatalyst(GuiRecipe guiRecipe) { + public GuiRecipeCatalyst(GuiRecipe guiRecipe) { this.guiRecipe = guiRecipe; } @@ -49,7 +49,7 @@ public class GuiRecipeCatalyst extends INEIGuiAdapter { @Override public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) { if (!(gui instanceof GuiRecipe)) return false; - guiRecipe = (GuiRecipe) gui; + guiRecipe = (GuiRecipe) gui; int catalystsSize = RecipeCatalysts.getRecipeCatalysts(guiRecipe.getHandler()).size(); if (catalystsSize == 0) return false; diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipeTab.java b/src/main/java/codechicken/nei/recipe/GuiRecipeTab.java index 2cef1c70..680a73de 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipeTab.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipeTab.java @@ -35,7 +35,7 @@ public abstract class GuiRecipeTab extends Widget { public static HashMap handlerAdderFromIMC = new HashMap<>(); public static Set handlerRemoverFromIMC = new HashSet<>(); - private final GuiRecipe guiRecipe; + private final GuiRecipe guiRecipe; private final IRecipeHandler handler; private final String handlerName; private final String handlerID; @@ -54,7 +54,7 @@ public abstract class GuiRecipeTab extends Widget { protected abstract int getForegroundIconY(); - public GuiRecipeTab(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { + public GuiRecipeTab(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { super(); this.x = x; this.y = y; diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipeTabCreative.java b/src/main/java/codechicken/nei/recipe/GuiRecipeTabCreative.java index ea5f2235..5e1dcf49 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipeTabCreative.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipeTabCreative.java @@ -11,7 +11,7 @@ public class GuiRecipeTabCreative extends GuiRecipeTab { private static final DrawableResource unselectedTabImage = new DrawableBuilder("minecraft:textures/gui/container/creative_inventory/tabs.png", 28, 0, 28, 30).build(); - public GuiRecipeTabCreative(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { + public GuiRecipeTabCreative(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { super(guiRecipe, handler, x, y); } diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipeTabJEI.java b/src/main/java/codechicken/nei/recipe/GuiRecipeTabJEI.java index 4ae53841..6d376997 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipeTabJEI.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipeTabJEI.java @@ -11,7 +11,7 @@ public class GuiRecipeTabJEI extends GuiRecipeTab { private static final DrawableResource unselectedTabImage = new DrawableBuilder("nei:textures/nei_tabbed_sprites.png", 24, 16, 24, 24).build(); - public GuiRecipeTabJEI(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { + public GuiRecipeTabJEI(GuiRecipe guiRecipe, IRecipeHandler handler, int x, int y) { super(guiRecipe, handler, x, y); } diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipeTabs.java b/src/main/java/codechicken/nei/recipe/GuiRecipeTabs.java index ac1f3636..7f43235c 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipeTabs.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipeTabs.java @@ -8,12 +8,11 @@ import java.util.ArrayList; import java.util.List; public class GuiRecipeTabs { - private final GuiRecipe guiRecipe; + private final GuiRecipe guiRecipe; private final List tabs = new ArrayList<>(); private final List