aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-20 14:51:53 +0800
committershedaniel <daniel@shedaniel.me>2021-03-20 14:51:53 +0800
commitdae95200cbb2eb3b8851ca955ffd770e0892dedd (patch)
tree250a40d22cb533accd27b2bac7a211af6f688485 /runtime/src/main/java
parentecfc6aa3f7a1540c74f0b17f33642d2dfdfec45d (diff)
downloadRoughlyEnoughItems-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')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java11
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java18
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java3
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java13
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));