From dae95200cbb2eb3b8851ca955ffd770e0892dedd Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 20 Mar 2021 14:51:53 +0800 Subject: Implement search modes and make tooltip always enabled by default. Signed-off-by: shedaniel --- .../me/shedaniel/rei/gui/OverlaySearchField.java | 11 +++++------ .../me/shedaniel/rei/impl/ConfigObjectImpl.java | 21 +++++++++++++++++++++ .../impl/OverlaySearchFieldSyntaxHighlighter.java | 18 ++++++++++-------- .../java/me/shedaniel/rei/impl/SearchArgument.java | 6 ++++-- .../java/me/shedaniel/rei/impl/search/Argument.java | 21 +++++++++++++++++++-- .../me/shedaniel/rei/impl/search/MatchStatus.java | 10 ++++++++++ .../me/shedaniel/rei/impl/search/ModArgument.java | 13 ++++++++++--- .../me/shedaniel/rei/impl/search/RegexArgument.java | 3 +-- .../me/shedaniel/rei/impl/search/TagArgument.java | 13 ++++++++++--- .../shedaniel/rei/impl/search/TooltipArgument.java | 13 ++++++++++--- 10 files changed, 100 insertions(+), 29 deletions(-) (limited to 'runtime/src/main/java') diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java b/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java index a65022f50..9eec7c84c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java +++ b/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java @@ -82,14 +82,13 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg Style style = Style.EMPTY; if (arg > 0) { Argument argument = ArgumentsRegistry.ARGUMENT_LIST.get((arg - 1) / 2); + if (isMain && ContainerScreenOverlay.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty()) { + style = ERROR_STYLE; + } if (!isPlain) { style = argument.getHighlightedStyle(); } - if (argument instanceof TextArgument) { - if (isMain && ContainerScreenOverlay.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty()) { - style = ERROR_STYLE; - } - } else if (hasUnderscore && arg % 2 == 1) { + if (!(argument instanceof TextArgument) && hasUnderscore && arg % 2 == 1) { style = style.withUnderlined(true); } } else if (!isPlain) { @@ -100,7 +99,6 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg } } - if (containsMouse(PointHelper.ofMouse()) || isFocused()) { return style; } @@ -132,6 +130,7 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg public void laterRender(PoseStack matrices, int int_1, int int_2, float float_1) { RenderSystem.disableDepthTest(); + setEditableColor(isMain && ContainerScreenOverlay.getEntryListWidget().getAllStacks().isEmpty() && !getText().isEmpty() ? 16733525 : isHighlighting && isMain ? -852212 : (containsMouse(PointHelper.ofMouse()) || isFocused()) ? (REIHelper.getInstance().isDarkThemeEnabled() ? -17587 : -1) : -6250336); setSuggestion(!isFocused() && getText().isEmpty() ? I18n.get("text.rei.search.field.suggestion") : null); super.render(matrices, int_1, int_2, float_1); RenderSystem.enableDepthTest(); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java index 0445416a3..ad1ea29b3 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java @@ -350,6 +350,21 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { return appearance.syntaxHighlightingMode; } + @Override + public SearchMode getTooltipSearchMode() { + return advanced.search.tooltipSearch; + } + + @Override + public SearchMode getTagSearchMode() { + return advanced.search.tagSearch; + } + + @Override + public SearchMode getModSearchMode() { + return advanced.search.modSearch; + } + @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.FIELD}) @interface DontApplyFieldName {} @@ -475,6 +490,12 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData { @Comment("Declares whether REI should search async.") private boolean asyncSearch = true; @Comment("Declares how many entries should be grouped one async search.") @ConfigEntry.BoundedDiscrete(min = 25, max = 400) private int asyncSearchPartitionSize = 100; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + private SearchMode tooltipSearch = SearchMode.ALWAYS; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + private SearchMode tagSearch = SearchMode.PREFIX; + @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON) + private SearchMode modSearch = SearchMode.PREFIX; } public static class Commands { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java index 62d4af27d..c2faf9110 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java @@ -56,14 +56,16 @@ public class OverlaySearchFieldSyntaxHighlighter implements Consumer { } @Override - public void addPart(SearchArgument argument, Collection grammarRanges, int index) { - int argIndex = ArgumentsRegistry.ARGUMENT_LIST.indexOf(argument.getArgument()) * 2 + 1; - for (int i = argument.start(); i < argument.end(); i++) { - highlighted[i] = (byte) argIndex; - } - for (IntRange grammarRange : grammarRanges) { - for (int i = grammarRange.getMinInclusive(); i <= grammarRange.getMaxInclusive(); i++) { - highlighted[i + index] = (byte) (argIndex + 1); + public void addPart(SearchArgument argument, boolean usingGrammar, Collection grammarRanges, int index) { + if (usingGrammar) { + int argIndex = ArgumentsRegistry.ARGUMENT_LIST.indexOf(argument.getArgument()) * 2 + 1; + for (int i = argument.start(); i < argument.end(); i++) { + highlighted[i] = (byte) argIndex; + } + for (IntRange grammarRange : grammarRanges) { + for (int i = grammarRange.getMinInclusive(); i <= grammarRange.getMaxInclusive(); i++) { + highlighted[i + index] = (byte) (argIndex + 1); + } } } } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java index 050f16f72..bb209c019 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java @@ -26,6 +26,7 @@ package me.shedaniel.rei.impl; import com.google.common.base.MoreObjects; import com.google.common.collect.Lists; import me.shedaniel.math.Point; +import me.shedaniel.rei.api.gui.config.SearchMode; import me.shedaniel.rei.api.gui.widgets.Tooltip; import me.shedaniel.rei.api.ingredient.EntryStack; import me.shedaniel.rei.api.util.CollectionUtils; @@ -90,7 +91,7 @@ public class SearchArgument { void addSplitter(int index); - void addPart(SearchArgument argument, Collection grammarRanges, int index); + void addPart(SearchArgument argument, boolean usingGrammar, Collection grammarRanges, int index); } @ApiStatus.Internal @@ -109,6 +110,7 @@ public class SearchArgument { while (terms.find()) { String term = MoreObjects.firstNonNull(terms.group(1), terms.group(2)); for (Argument argument : ArgumentsRegistry.ARGUMENT_LIST) { + if (argument.getSearchMode() == SearchMode.NEVER) continue; MatchStatus status = argument.matchesArgumentPrefix(term); if (status.isMatched()) { SearchArgument searchArgument; @@ -124,7 +126,7 @@ public class SearchArgument { arguments.add(searchArgument = new SearchArgument<>(argument, status.getText(), !status.isInverted(), terms.start(2) + tokenStartIndex, terms.end(2) + tokenStartIndex, !status.shouldPreserveCasing())); } if (sink != null) { - sink.addPart(searchArgument, status.grammarRanges(), terms.start() + tokenStartIndex); + sink.addPart(searchArgument, status.isUsingGrammar(), status.grammarRanges(), terms.start() + tokenStartIndex); } break; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java index bca7c6b87..dd0ca4eb8 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.search; +import me.shedaniel.rei.api.gui.config.SearchMode; import me.shedaniel.rei.api.ingredient.EntryStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -45,13 +46,29 @@ public abstract class Argument { return null; } - @NotNull public Style getHighlightedStyle() { return Style.EMPTY; } + public SearchMode getSearchMode() { + return SearchMode.PREFIX; + } + public MatchStatus matchesArgumentPrefix(String text) { - String prefix = getPrefix(); + MatchStatus status = checkMatchPrefix(text, getPrefix()); + if (status.isMatched()) { + return status; + } else if (getSearchMode() == SearchMode.ALWAYS) { + status = checkMatchPrefix(text, ""); + if (status.isMatched()) { + status.notUsingGrammar(); + } + return status; + } + return MatchStatus.unmatched(); + } + + private MatchStatus checkMatchPrefix(String text, String prefix) { if (prefix == null) return MatchStatus.unmatched(); if (text.startsWith("-" + prefix)) return MatchStatus.invertMatched(text.substring(1 + prefix.length())).grammar(0, prefix.length() + 1); if (text.startsWith(prefix + "-")) return MatchStatus.invertMatched(text.substring(1 + prefix.length())).grammar(0, prefix.length() + 1); diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java index bedfdda0f..58b00e597 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java @@ -39,6 +39,7 @@ public final class MatchStatus { @Nullable private final String text; private final boolean preserveCasing; + private boolean usingGrammar = true; private final List grammarRanges = new ArrayList<>(); private MatchStatus(MatchType type, @Nullable String text, boolean preserveCasing) { @@ -97,6 +98,15 @@ public final class MatchStatus { return type == MatchType.INVERT_MATCHED; } + public MatchStatus notUsingGrammar() { + usingGrammar = false; + return this; + } + + public boolean isUsingGrammar() { + return usingGrammar; + } + public boolean shouldPreserveCasing() { return preserveCasing; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java index 1c374c374..6a740f044 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java @@ -24,6 +24,8 @@ package me.shedaniel.rei.impl.search; import me.shedaniel.rei.api.ClientHelper; +import me.shedaniel.rei.api.config.ConfigObject; +import me.shedaniel.rei.api.gui.config.SearchMode; import me.shedaniel.rei.api.ingredient.EntryStack; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; @@ -33,7 +35,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Unit; import org.apache.commons.lang3.mutable.Mutable; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Locale; @@ -51,10 +52,16 @@ public final class ModArgument extends Argument data, EntryStack stack, String searchText, Unit filterData) { if (data.getValue() == null) { @@ -78,7 +85,7 @@ public final class ModArgument extends Argument { } @Override - public @NotNull Style getHighlightedStyle() { + public Style getHighlightedStyle() { return STYLE; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java index 9c4c844ab..5d5ee21e0 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java @@ -23,6 +23,8 @@ package me.shedaniel.rei.impl.search; +import me.shedaniel.rei.api.config.ConfigObject; +import me.shedaniel.rei.api.gui.config.SearchMode; import me.shedaniel.rei.api.ingredient.EntryStack; import me.shedaniel.rei.api.ingredient.entry.type.EntryDefinition; import net.fabricmc.api.EnvType; @@ -34,7 +36,6 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.util.Unit; import org.apache.commons.lang3.mutable.Mutable; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; @@ -53,15 +54,21 @@ public final class TagArgument extends Argument { } @Override - public @Nullable String getPrefix() { + @Nullable + public String getPrefix() { return "$"; } @Override - public @NotNull Style getHighlightedStyle() { + public Style getHighlightedStyle() { return STYLE; } + @Override + public SearchMode getSearchMode() { + return ConfigObject.getInstance().getTagSearchMode(); + } + @Override public boolean matches(Mutable data, EntryStack stack, String searchText, Unit filterData) { if (data.getValue() == null) { diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java index 1e641feb8..0c323feb5 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java @@ -23,6 +23,8 @@ package me.shedaniel.rei.impl.search; +import me.shedaniel.rei.api.config.ConfigObject; +import me.shedaniel.rei.api.gui.config.SearchMode; import me.shedaniel.rei.api.ingredient.EntryStack; import me.shedaniel.rei.impl.SearchArgument; import net.fabricmc.api.EnvType; @@ -32,7 +34,6 @@ import net.minecraft.network.chat.TextColor; import net.minecraft.util.Unit; import org.apache.commons.lang3.mutable.Mutable; import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Locale; @@ -49,15 +50,21 @@ public final class TooltipArgument extends Argument { } @Override - public @Nullable String getPrefix() { + @Nullable + public String getPrefix() { return "#"; } @Override - public @NotNull Style getHighlightedStyle() { + public Style getHighlightedStyle() { return STYLE; } + @Override + public SearchMode getSearchMode() { + return ConfigObject.getInstance().getTooltipSearchMode(); + } + @Override public boolean matches(Mutable data, EntryStack stack, String searchText, Unit filterData) { if (data.getValue() == null) { -- cgit