diff --git a/src/main/java/codechicken/nei/SearchField.java b/src/main/java/codechicken/nei/SearchField.java index 1ee033d4..9041c3d7 100644 --- a/src/main/java/codechicken/nei/SearchField.java +++ b/src/main/java/codechicken/nei/SearchField.java @@ -15,7 +15,6 @@ import net.minecraftforge.fluids.FluidStack; import codechicken.lib.gui.GuiDraw; import codechicken.nei.ItemList.NothingItemFilter; import codechicken.nei.SearchTokenParser.ISearchParserProvider; -import codechicken.nei.SearchTokenParser.SearchMode; import codechicken.nei.api.IRecipeFilter; import codechicken.nei.api.IRecipeFilter.IRecipeFilterProvider; import codechicken.nei.api.ItemFilter; @@ -85,8 +84,8 @@ public class SearchField extends TextField implements ItemFilterProvider { } @Override - public SearchMode getSearchMode() { - return SearchMode.fromInt(NEIClientConfig.getIntSetting("inventory.search." + this.name + "SearchMode")); + public String getName() { + return this.name; } } diff --git a/src/main/java/codechicken/nei/SearchTokenParser.java b/src/main/java/codechicken/nei/SearchTokenParser.java index 2fdeb3bb..c702afe4 100644 --- a/src/main/java/codechicken/nei/SearchTokenParser.java +++ b/src/main/java/codechicken/nei/SearchTokenParser.java @@ -59,7 +59,13 @@ public class SearchTokenParser { public EnumChatFormatting getHighlightedColor(); - public SearchMode getSearchMode(); + default SearchMode getSearchMode() { + return SearchMode.fromInt(NEIClientConfig.getIntSetting("inventory.search." + getName() + "SearchMode")); + } + + default String getName() { + return String.valueOf(getPrefix()); + } } private static class ProvidersCache { diff --git a/src/main/java/codechicken/nei/SubsetWidget.java b/src/main/java/codechicken/nei/SubsetWidget.java index fbefad25..654a61f9 100644 --- a/src/main/java/codechicken/nei/SubsetWidget.java +++ b/src/main/java/codechicken/nei/SubsetWidget.java @@ -399,8 +399,8 @@ public class SubsetWidget extends Button implements ItemFilterProvider { } @Override - public SearchMode getSearchMode() { - return SearchMode.fromInt(NEIClientConfig.getIntSetting("inventory.search.subsetsSearchMode")); + public String getName() { + return "subsets"; } private boolean matches(String name, String searchText, Pattern pattern) { diff --git a/src/main/java/codechicken/nei/recipe/GuiRecipe.java b/src/main/java/codechicken/nei/recipe/GuiRecipe.java index 8c9b6802..1baca6a1 100644 --- a/src/main/java/codechicken/nei/recipe/GuiRecipe.java +++ b/src/main/java/codechicken/nei/recipe/GuiRecipe.java @@ -34,6 +34,8 @@ import codechicken.nei.PositionedStack; import codechicken.nei.RecipeSearchField; import codechicken.nei.RestartableTask; import codechicken.nei.SearchField; +import codechicken.nei.SearchTokenParser.ISearchParserProvider; +import codechicken.nei.SearchTokenParser.SearchMode; import codechicken.nei.VisiblityData; import codechicken.nei.Widget; import codechicken.nei.api.IGuiContainerOverlay; @@ -54,6 +56,7 @@ import codechicken.nei.scroll.ScrollBar; import codechicken.nei.scroll.ScrollBar.OverflowType; import codechicken.nei.scroll.ScrollBar.ScrollPlace; import codechicken.nei.scroll.ScrollContainer; +import codechicken.nei.search.SearchExpressionUtils; import codechicken.nei.util.EmptyContainer; import codechicken.nei.util.SlotInaccessible; @@ -173,6 +176,59 @@ public abstract class GuiRecipe extends GuiContainer i return true; } + @Override + public void addTooltips(List tooltip) { + tooltip.add(NEIClientUtils.translate("recipe.search.tooltip.name") + GuiDraw.TOOLTIP_LINESPACE); + + if (NEIClientUtils.shiftKey()) { + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.input", + SearchExpressionUtils.HIGHLIGHTS.RECIPE + "<")); + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.output", + SearchExpressionUtils.HIGHLIGHTS.RECIPE + ">")); + + for (ISearchParserProvider provider : SearchField.searchParser.getProviders()) { + if (provider.getSearchMode() == SearchMode.PREFIX) { + addPrefixTooltip(tooltip, provider); + } + } + + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.exclude", + SearchExpressionUtils.HIGHLIGHTS.NEGATE + "-")); + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.exclude_recipe", + SearchExpressionUtils.HIGHLIGHTS.NEGATE + "!")); + tooltip.add( + NEIClientUtils + .translate("recipe.search.tooltip.or", SearchExpressionUtils.HIGHLIGHTS.OR.f + "|")); + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.exact", + SearchExpressionUtils.HIGHLIGHTS.QUOTED + "\"", + SearchExpressionUtils.HIGHLIGHTS.QUOTED + "\"")); + } else { + tooltip.add(NEIClientUtils.translate("recipe.search.tooltip.shift")); + } + + } + + private void addPrefixTooltip(List tooltip, ISearchParserProvider provider) { + final char prefix = SearchField.searchParser.getRedefinedPrefix(provider.getPrefix()); + final String modeName = NEIClientUtils.translate("recipe.search.tooltip.prefix." + provider.getName()); + + tooltip.add( + NEIClientUtils.translate( + "recipe.search.tooltip.prefix", + provider.getHighlightedColor() + String.valueOf(prefix), + modeName)); + } + }; /** @@ -760,6 +816,10 @@ public abstract class GuiRecipe extends GuiContainer i this.recipeTabs.handleTooltip(mousex, mousey, currenttip); + if (this.handler != null && this.handler.searchingAvailable()) { + currenttip = GuiRecipe.toggleSearch.handleTooltip(mousex, mousey, currenttip); + } + if (currenttip.isEmpty() && isHandlerTitleHovered(mousex, mousey)) { currenttip.add(NEIClientUtils.translate("recipe.tab.view_all.tooltip")); } diff --git a/src/main/resources/assets/nei/lang/en_US.lang b/src/main/resources/assets/nei/lang/en_US.lang index f0ca179b..e0cf7e8f 100644 --- a/src/main/resources/assets/nei/lang/en_US.lang +++ b/src/main/resources/assets/nei/lang/en_US.lang @@ -571,6 +571,24 @@ nei.debug.RecipeHandler.reset=Reset nei.recipe.page=Page %s/%s nei.recipe.tooltip=Recipes nei.recipe.tab.view_all.tooltip=View all categories +nei.recipe.search.tooltip.name=Filter Syntax +nei.recipe.search.tooltip.shift=§7Hold §6Shift§7 for more info +nei.recipe.search.tooltip.input=%s§ftext§8 - §7search in inputs +nei.recipe.search.tooltip.output=%s§ftext§8 - §7search in outputs +nei.recipe.search.tooltip.prefix=%stext§8 - §7%s + +nei.recipe.search.tooltip.prefix.modName=search by mod +nei.recipe.search.tooltip.prefix.tooltip=search by tooltip +nei.recipe.search.tooltip.prefix.oreDict=search by ore dict +nei.recipe.search.tooltip.prefix.identifier=search by resource ID +nei.recipe.search.tooltip.prefix.subsets=search by subsets +nei.recipe.search.tooltip.prefix.chemicalFormula=search by chemical formula + +nei.recipe.search.tooltip.exclude=%s§ftext§8 - §7exclude items with text +nei.recipe.search.tooltip.exclude_recipe=%s§ftext§8 - §7exclude recipes with text +nei.recipe.search.tooltip.or=§fa%s§fb§8 - §7match a or b +nei.recipe.search.tooltip.exact=%s§ftext%s§8 - §7match exact phrase + nei.recipe.shaped=Shaped Crafting nei.recipe.shapeless=Shapeless Crafting nei.recipe.furnace=Smelting