aboutsummaryrefslogtreecommitdiff
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
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>
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/config/ConfigObject.java6
-rw-r--r--api/src/main/java/me/shedaniel/rei/api/gui/config/SearchMode.java44
-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
-rwxr-xr-xsrc/main/resources/assets/roughlyenoughitems/lang/en_us.json6
13 files changed, 156 insertions, 29 deletions
diff --git a/api/src/main/java/me/shedaniel/rei/api/config/ConfigObject.java b/api/src/main/java/me/shedaniel/rei/api/config/ConfigObject.java
index bc471d90f..32f967fd3 100644
--- a/api/src/main/java/me/shedaniel/rei/api/config/ConfigObject.java
+++ b/api/src/main/java/me/shedaniel/rei/api/config/ConfigObject.java
@@ -162,4 +162,10 @@ public interface ConfigObject {
@ApiStatus.Experimental
SyntaxHighlightingMode getSyntaxHighlightingMode();
+
+ SearchMode getTooltipSearchMode();
+
+ SearchMode getTagSearchMode();
+
+ SearchMode getModSearchMode();
}
diff --git a/api/src/main/java/me/shedaniel/rei/api/gui/config/SearchMode.java b/api/src/main/java/me/shedaniel/rei/api/gui/config/SearchMode.java
new file mode 100644
index 000000000..2f105bed5
--- /dev/null
+++ b/api/src/main/java/me/shedaniel/rei/api/gui/config/SearchMode.java
@@ -0,0 +1,44 @@
+/*
+ * This file is licensed under the MIT License, part of Roughly Enough Items.
+ * Copyright (c) 2018, 2019, 2020 shedaniel
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+package me.shedaniel.rei.api.gui.config;
+
+import me.shedaniel.clothconfig2.gui.entries.SelectionListEntry;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.minecraft.client.resources.language.I18n;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.Locale;
+
+@Environment(EnvType.CLIENT)
+public enum SearchMode implements SelectionListEntry.Translatable {
+ ALWAYS,
+ PREFIX,
+ NEVER;
+
+ @Override
+ public @NotNull String getKey() {
+ return I18n.get("config.roughlyenoughitems.search_mode." + name().toLowerCase(Locale.ROOT));
+ }
+}
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));
diff --git a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
index 1a3864c54..f4ff589cf 100755
--- a/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
+++ b/src/main/resources/assets/roughlyenoughitems/lang/en_us.json
@@ -172,6 +172,12 @@
"config.roughlyenoughitems.accessibility.displayPanelLocation": "Entry Panel Position:",
"config.roughlyenoughitems.accessibility.displayPanelLocation.left": "Left Side",
"config.roughlyenoughitems.accessibility.displayPanelLocation.right": "Right Side",
+ "config.roughlyenoughitems.search.tooltipSearch": "Tooltip Search (#):",
+ "config.roughlyenoughitems.search.tagSearch": "Tag Search ($):",
+ "config.roughlyenoughitems.search.modSearch": "Mod Search (@):",
+ "config.roughlyenoughitems.search_mode.always": "Always Enabled",
+ "config.roughlyenoughitems.search_mode.prefix": "While Using Prefix",
+ "config.roughlyenoughitems.search_mode.never": "Always Disabled",
"config.roughlyenoughitems.layout.debugRenderTimeRequired": "Entry Panel Debug Mode:",
"config.roughlyenoughitems.search.debugSearchTimeRequired": "Search Debug Mode:",
"config.roughlyenoughitems.accessibility.resizeDynamically": "Resize Dynamically:",