diff options
| author | shedaniel <daniel@shedaniel.me> | 2021-03-20 14:51:53 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2021-03-20 14:51:53 +0800 |
| commit | dae95200cbb2eb3b8851ca955ffd770e0892dedd (patch) | |
| tree | 250a40d22cb533accd27b2bac7a211af6f688485 /runtime/src/main/java/me | |
| parent | ecfc6aa3f7a1540c74f0b17f33642d2dfdfec45d (diff) | |
| download | RoughlyEnoughItems-dae95200cbb2eb3b8851ca955ffd770e0892dedd.tar.gz RoughlyEnoughItems-dae95200cbb2eb3b8851ca955ffd770e0892dedd.tar.bz2 RoughlyEnoughItems-dae95200cbb2eb3b8851ca955ffd770e0892dedd.zip | |
Implement search modes and make tooltip always enabled by default.
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java/me')
10 files changed, 100 insertions, 29 deletions
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<String> { } @Override - public void addPart(SearchArgument<?, ?> argument, Collection<IntRange> 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<IntRange> 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<T, R> { void addSplitter(int index); - void addPart(SearchArgument<?, ?> argument, Collection<IntRange> grammarRanges, int index); + void addPart(SearchArgument<?, ?> argument, boolean usingGrammar, Collection<IntRange> grammarRanges, int index); } @ApiStatus.Internal @@ -109,6 +110,7 @@ public class SearchArgument<T, R> { 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<T, R> { 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<T, R> { 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<IntRange> 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,11 +52,17 @@ public final class ModArgument extends Argument<Unit, ModArgument.@Nullable ModI } @Override - public @Nullable String getPrefix() { + @Nullable + public String getPrefix() { return "@"; } @Override + public SearchMode getSearchMode() { + return ConfigObject.getInstance().getModSearchMode(); + } + + @Override public boolean matches(Mutable<@Nullable ModInfoPair> data, EntryStack<?> stack, String searchText, Unit filterData) { if (data.getValue() == null) { Optional<ResourceLocation> id = stack.getIdentifier(); @@ -78,7 +85,7 @@ public final class ModArgument extends Argument<Unit, ModArgument.@Nullable ModI } @Override - public @NotNull Style getHighlightedStyle() { + public Style getHighlightedStyle() { return STYLE; } diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java index 6161d4d17..b5662b667 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java @@ -30,7 +30,6 @@ import net.minecraft.network.chat.Style; import net.minecraft.network.chat.TextColor; 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.regex.Matcher; @@ -74,7 +73,7 @@ public final class RegexArgument extends Argument<@Nullable Pattern, String> { } @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,16 +54,22 @@ public final class TagArgument extends Argument<Unit, String[]> { } @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<String[]> data, EntryStack<?> stack, String searchText, Unit filterData) { if (data.getValue() == null) { Collection<ResourceLocation> tags = ((EntryDefinition<Object>) stack.getDefinition()).getTagsFor((EntryStack<Object>) stack, stack.getValue()); 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,16 +50,22 @@ public final class TooltipArgument extends Argument<Unit, String> { } @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<String> data, EntryStack<?> stack, String searchText, Unit filterData) { if (data.getValue() == null) { data.setValue(SearchArgument.tryGetEntryStackTooltip(stack).toLowerCase(Locale.ROOT)); |
