diff --git a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java index dd8e33af..e561bf4e 100644 --- a/src/main/java/codechicken/nei/api/ShortcutInputHandler.java +++ b/src/main/java/codechicken/nei/api/ShortcutInputHandler.java @@ -19,7 +19,6 @@ import codechicken.nei.BookmarkContainerInfo; import codechicken.nei.FavoriteRecipes; import codechicken.nei.ItemPanels; import codechicken.nei.ItemQuantityField; -import codechicken.nei.ItemsGrid.ItemsGridSlot; import codechicken.nei.KeyManager; import codechicken.nei.LayoutManager; import codechicken.nei.NEIClientConfig; @@ -38,6 +37,7 @@ import codechicken.nei.recipe.GuiCraftingRecipe; import codechicken.nei.recipe.GuiFavoriteButton; import codechicken.nei.recipe.GuiRecipe; import codechicken.nei.recipe.GuiUsageRecipe; +import codechicken.nei.recipe.HoveredRecipe; import codechicken.nei.recipe.Recipe; import codechicken.nei.recipe.Recipe.RecipeId; import codechicken.nei.recipe.RecipeHandlerRef; @@ -415,41 +415,37 @@ public abstract class ShortcutInputHandler { private static Recipe getFocusedRecipe(ItemStack stackover, int mousex, int mousey, boolean useFavorites) { final GuiContainer gui = NEIClientUtils.getGuiContainer(); - Recipe recipe = null; - if (useFavorites) { - ItemsGridSlot itemSlot = ItemPanels.itemPanel.getSlotMouseOver(mousex, mousey); - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.historyPanel.getSlotMouseOver(mousex, mousey); - } - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.craftablesPanel.getSlotMouseOver(mousex, mousey); - } - - if (itemSlot != null) { - final RecipeId recipeId = itemSlot.getRecipeId(); - - if (recipeId != null && (recipe = Recipe.of(recipeId)) != null) { - - recipe.getIngredients().stream().forEach(ingr -> { - final List permutations = ingr.getPermutations(); - for (int index = 0; index < permutations.size(); index++) { - if (FavoriteRecipes.contains(permutations.get(index))) { - ingr.setActiveIndex(index); - break; - } - } - }); - - } + if (gui instanceof GuiRecipeguiRecipe) { + final Recipe focusedRecipe = guiRecipe.getFocusedRecipe(); + if (focusedRecipe != null) { + return focusedRecipe; } } - if (gui instanceof GuiRecipeguiRecipe) { - recipe = guiRecipe.getFocusedRecipe(); + if (!useFavorites) { + return null; + } + + final HoveredRecipe hovered = HoveredRecipe.of(gui, stackover); + + if (hovered == null || hovered.source != HoveredRecipe.Source.ITEM_PANEL) { + return null; + } + + final Recipe recipe = Recipe.of(hovered.recipeId); + + if (recipe != null) { + recipe.getIngredients().stream().forEach(ingr -> { + final List permutations = ingr.getPermutations(); + for (int index = 0; index < permutations.size(); index++) { + if (FavoriteRecipes.contains(permutations.get(index))) { + ingr.setActiveIndex(index); + break; + } + } + }); } return recipe; @@ -529,7 +525,9 @@ public abstract class ShortcutInputHandler { } final BookmarksGridSlot slot = ItemPanels.bookmarkPanel.getSlotMouseOver(mousex, mousey); - final RecipeId recipeId = getHotkeyRecipeId(gui, mousex, mousey, stack, slot); + final HoveredRecipe hovered = HoveredRecipe.of(gui, stack); + final RecipeId recipeId = hovered == null || hovered.source == HoveredRecipe.Source.OTHER + || hovered.source == HoveredRecipe.Source.BOOKMARK && hovered.favorite ? null : hovered.recipeId; if (slot != null) { final BookmarkGroup group = slot.getGroup(); @@ -729,36 +727,4 @@ public abstract class ShortcutInputHandler { } } - private static RecipeId getHotkeyRecipeId(GuiContainer gui, int mousex, int mousey, ItemStack stack, - BookmarksGridSlot slot) { - - if (slot != null) { - return slot.getType() == BookmarkItemType.INGREDIENT ? null : slot.getRecipeId(); - } - - ItemsGridSlot itemSlot = ItemPanels.itemPanel.getSlotMouseOver(mousex, mousey); - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.historyPanel.getSlotMouseOver(mousex, mousey); - } - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.craftablesPanel.getSlotMouseOver(mousex, mousey); - } - - if (itemSlot != null) { - return itemSlot.getRecipeId(); - } - - if (gui instanceof GuiRecipeguiRecipe) { - final Recipe focusedRecipe = guiRecipe.getFocusedRecipe(); - - if (focusedRecipe != null) { - return focusedRecipe.getRecipeId(); - } - } - - return null; - } - } diff --git a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java index b9d2b20e..80859ac8 100644 --- a/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiCraftingRecipe.java @@ -1,6 +1,5 @@ package codechicken.nei.recipe; -import java.awt.Point; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; @@ -13,14 +12,9 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraft.item.ItemStack; -import codechicken.lib.gui.GuiDraw; -import codechicken.nei.FavoriteRecipes; import codechicken.nei.ItemPanels; -import codechicken.nei.ItemsGrid.ItemsGridSlot; import codechicken.nei.NEIClientConfig; import codechicken.nei.NEIClientUtils; -import codechicken.nei.bookmark.BookmarkItem.BookmarkItemType; -import codechicken.nei.bookmark.BookmarksGridSlot; import codechicken.nei.recipe.Recipe.RecipeId; public class GuiCraftingRecipe extends GuiRecipe { @@ -138,39 +132,8 @@ public class GuiCraftingRecipe extends GuiRecipe { } public static RecipeId getRecipeId(GuiScreen gui, ItemStack stackover) { - - if (gui instanceof GuiRecipeguiRecipe) { - final Recipe focusedRecipe = guiRecipe.getFocusedRecipe(); - - if (focusedRecipe != null) { - return focusedRecipe.getRecipeId(); - } - } - - final Point mouseover = GuiDraw.getMousePosition(); - final BookmarksGridSlot panelSlot = ItemPanels.bookmarkPanel.getSlotMouseOver(mouseover.x, mouseover.y); - - if (panelSlot != null) { - return panelSlot.getType() == BookmarkItemType.INGREDIENT || panelSlot.getRecipeId() == null - ? FavoriteRecipes.getFavorite(stackover) - : panelSlot.getRecipeId(); - } - - ItemsGridSlot itemSlot = ItemPanels.itemPanel.getSlotMouseOver(mouseover.x, mouseover.y); - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.historyPanel.getSlotMouseOver(mouseover.x, mouseover.y); - } - - if (itemSlot == null) { - itemSlot = ItemPanels.itemPanel.craftablesPanel.getSlotMouseOver(mouseover.x, mouseover.y); - } - - if (itemSlot != null) { - return itemSlot.getRecipeId(); - } - - return null; + final HoveredRecipe hovered = HoveredRecipe.of(gui, stackover); + return hovered != null ? hovered.recipeId : null; } private GuiCraftingRecipe(ArrayList handlers) { diff --git a/src/main/java/codechicken/nei/recipe/HoveredRecipe.java b/src/main/java/codechicken/nei/recipe/HoveredRecipe.java new file mode 100644 index 00000000..6e7d81d1 --- /dev/null +++ b/src/main/java/codechicken/nei/recipe/HoveredRecipe.java @@ -0,0 +1,87 @@ +package codechicken.nei.recipe; + +import java.awt.Point; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.item.ItemStack; + +import codechicken.lib.gui.GuiDraw; +import codechicken.nei.FavoriteRecipes; +import codechicken.nei.ItemPanels; +import codechicken.nei.ItemsGrid.ItemsGridSlot; +import codechicken.nei.bookmark.BookmarkItem.BookmarkItemType; +import codechicken.nei.bookmark.BookmarksGridSlot; +import codechicken.nei.recipe.Recipe.RecipeId; + +public final class HoveredRecipe { + + public enum Source { + RECIPE_GUI, + BOOKMARK, + ITEM_PANEL, + OTHER + } + + public final RecipeId recipeId; + public final Source source; + public final boolean favorite; + + private HoveredRecipe(RecipeId recipeId, Source source, boolean favorite) { + this.recipeId = recipeId; + this.source = source; + this.favorite = favorite; + } + + public static HoveredRecipe of(GuiScreen gui, ItemStack stackover) { + + if (gui instanceof GuiRecipeguiRecipe) { + final Recipe focusedRecipe = guiRecipe.getFocusedRecipe(); + + if (focusedRecipe != null) { + return new HoveredRecipe(focusedRecipe.getRecipeId(), Source.RECIPE_GUI, false); + } + } + + final Point mouseover = GuiDraw.getMousePosition(); + final BookmarksGridSlot bookmarkSlot = ItemPanels.bookmarkPanel.getSlotMouseOver(mouseover.x, mouseover.y); + + if (bookmarkSlot != null) { + + if (bookmarkSlot.getType() != BookmarkItemType.INGREDIENT && bookmarkSlot.getRecipeId() != null) { + return new HoveredRecipe(bookmarkSlot.getRecipeId(), Source.BOOKMARK, false); + } + + return favorite(stackover, Source.BOOKMARK); + } + + ItemsGridSlot itemSlot = ItemPanels.itemPanel.getSlotMouseOver(mouseover.x, mouseover.y); + + if (itemSlot == null) { + itemSlot = ItemPanels.itemPanel.historyPanel.getSlotMouseOver(mouseover.x, mouseover.y); + } + + if (itemSlot == null) { + itemSlot = ItemPanels.itemPanel.craftablesPanel.getSlotMouseOver(mouseover.x, mouseover.y); + } + + if (itemSlot != null) { + + if (itemSlot.getRecipeId() != null) { + return new HoveredRecipe(itemSlot.getRecipeId(), Source.ITEM_PANEL, false); + } + + return favorite(stackover, Source.ITEM_PANEL); + } + + if (gui instanceof GuiRecipeguiRecipe && guiRecipe.getSlotAtPosition(mouseover.x, mouseover.y) != null) { + return favorite(stackover, Source.RECIPE_GUI); + } + + return favorite(stackover, Source.OTHER); + } + + private static HoveredRecipe favorite(ItemStack stackover, Source source) { + final RecipeId recipeId = FavoriteRecipes.getFavorite(stackover); + return recipeId != null ? new HoveredRecipe(recipeId, source, true) : null; + } +} diff --git a/src/main/java/codechicken/nei/recipe/RecipeItemInputHandler.java b/src/main/java/codechicken/nei/recipe/RecipeItemInputHandler.java index 976a4d1a..a12527f8 100644 --- a/src/main/java/codechicken/nei/recipe/RecipeItemInputHandler.java +++ b/src/main/java/codechicken/nei/recipe/RecipeItemInputHandler.java @@ -7,14 +7,10 @@ import net.minecraft.client.gui.inventory.GuiContainer; import net.minecraft.item.ItemStack; import codechicken.lib.gui.GuiDraw; -import codechicken.lib.vec.Rectangle4i; import codechicken.nei.BookmarkPanel.BookmarkViewMode; -import codechicken.nei.FavoriteRecipes; import codechicken.nei.ItemPanels; -import codechicken.nei.ItemsGrid.ItemsGridSlot; import codechicken.nei.NEIClientConfig; import codechicken.nei.api.ShortcutInputHandler; -import codechicken.nei.bookmark.BookmarkItem.BookmarkItemType; import codechicken.nei.bookmark.BookmarksGridSlot; import codechicken.nei.guihook.GuiContainerManager; import codechicken.nei.guihook.IContainerInputHandler; @@ -58,7 +54,9 @@ public class RecipeItemInputHandler implements IContainerInputHandler, IContaine List currenttip) { if (itemstack != null) { - final RecipeId recipeId = getHoveredRecipeId(gui, itemstack, mousex, mousey); + final HoveredRecipe hovered = HoveredRecipe.of(gui, itemstack); + final RecipeId recipeId = hovered != null && showRecipeTooltip(hovered, mousex, mousey) ? hovered.recipeId + : null; if (recipeId == null) { recipeTooltipLineHandler = null; @@ -76,49 +74,21 @@ public class RecipeItemInputHandler implements IContainerInputHandler, IContaine return currenttip; } - private RecipeId getHoveredRecipeId(GuiContainer gui, ItemStack itemstack, int mousex, int mousey) { + private boolean showRecipeTooltip(HoveredRecipe hovered, int mousex, int mousey) { + return switch (hovered.source) { + case BOOKMARK -> !hovered.favorite && showRecipeTooltipInBookmarks(mousex, mousey); + case ITEM_PANEL -> NEIClientConfig.showRecipeTooltipInPanel(); + case RECIPE_GUI -> hovered.favorite && NEIClientConfig.showRecipeTooltipInGui(); + default -> false; + }; + } - if (ItemPanels.bookmarkPanel.contains(mousex, mousey)) { - final BookmarksGridSlot slot = ItemPanels.bookmarkPanel.getSlotMouseOver(mousex, mousey); - - if (slot != null && slot.getRecipeId() != null - && slot.getType() != BookmarkItemType.INGREDIENT - && NEIClientConfig.getRecipeTooltipsMode() != 0) { - final int tooltipMode = NEIClientConfig.getRecipeTooltipsMode(); - final BookmarkViewMode viewMode = slot.getGroup().viewMode; - if (tooltipMode == 3 || viewMode == BookmarkViewMode.DEFAULT && tooltipMode == 1 - || viewMode == BookmarkViewMode.TODO_LIST && tooltipMode == 2) { - return slot.getRecipeId(); - } - } - - return null; - } - - if (NEIClientConfig.showRecipeTooltipInPanel()) { - ItemsGridSlot panelSlot = ItemPanels.itemPanel.getSlotMouseOver(mousex, mousey); - - if (panelSlot == null) { - panelSlot = ItemPanels.itemPanel.historyPanel.getSlotMouseOver(mousex, mousey); - } - - if (panelSlot == null) { - panelSlot = ItemPanels.itemPanel.craftablesPanel.getSlotMouseOver(mousex, mousey); - } - - if (panelSlot != null) { - return panelSlot.getRecipeId(); - } - } - - if (gui instanceof GuiRecipeguiRecipe - && new Rectangle4i(gui.guiLeft, gui.guiTop, gui.xSize, gui.ySize).contains(mousex, mousey) - && NEIClientConfig.showRecipeTooltipInGui() - && guiRecipe.getFocusedRecipe() == null) { - return FavoriteRecipes.getFavorite(itemstack); - } - - return null; + private boolean showRecipeTooltipInBookmarks(int mousex, int mousey) { + final BookmarksGridSlot slot = ItemPanels.bookmarkPanel.getSlotMouseOver(mousex, mousey); + final int tooltipMode = NEIClientConfig.getRecipeTooltipsMode(); + final BookmarkViewMode viewMode = slot.getGroup().viewMode; + return tooltipMode == 3 || viewMode == BookmarkViewMode.DEFAULT && tooltipMode == 1 + || viewMode == BookmarkViewMode.TODO_LIST && tooltipMode == 2; } @Override diff --git a/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java b/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java index 0b39f0a5..ab0bf37a 100644 --- a/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java +++ b/src/main/java/codechicken/nei/recipe/stackinfo/GTFluidStackStringifyHandler.java @@ -21,7 +21,6 @@ public class GTFluidStackStringifyHandler implements IStackStringifyHandler { protected static Method getFluidFromDisplayStack = null; protected static Class gtMetaGeneratedTool = null; protected static Field playSound = null; - private static boolean loggedNoNbtDisplay = false; static { try {