aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2021-03-21 23:29:30 +0800
committershedaniel <daniel@shedaniel.me>2021-03-21 23:29:30 +0800
commit7bbef49785f594dfe3d6eac0cfc6ee84841aae80 (patch)
tree257f04b3d0e32001ba140967ff505d128f303ffc /runtime/src/main/java
parent53a861009ae84680993ee95355155fddc4554490 (diff)
downloadRoughlyEnoughItems-7bbef49785f594dfe3d6eac0cfc6ee84841aae80.tar.gz
RoughlyEnoughItems-7bbef49785f594dfe3d6eac0cfc6ee84841aae80.tar.bz2
RoughlyEnoughItems-7bbef49785f594dfe3d6eac0cfc6ee84841aae80.zip
Rewrite search engine and expose as API
Signed-off-by: shedaniel <daniel@shedaniel.me>
Diffstat (limited to 'runtime/src/main/java')
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/api/gui/config/entry/FilteringScreen.java15
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java12
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java21
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java17
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java8
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java5
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java7
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java2
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java219
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/TypedEntryStack.java13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/entry/EmptyEntryDefinition.java6
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/filtering/rules/SearchFilteringRule.java25
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/AlternativeArgument.java45
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/AlwaysMatchingArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/AlwaysMatchingArgument.java)10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/Argument.java189
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/ArgumentApplicableResult.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/MatchStatus.java)38
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/ArgumentType.java81
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/ArgumentTypesRegistry.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/ArgumentsRegistry.java)25
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/CompoundArgument.java63
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/IdentifierArgumentType.java93
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/ModArgument.java)13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/RegexArgument.java)13
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/SearchProviderImpl.java39
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/TagArgument.java)10
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/TextArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/TextArgument.java)9
-rw-r--r--runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgumentType.java (renamed from runtime/src/main/java/me/shedaniel/rei/impl/search/TooltipArgument.java)9
29 files changed, 626 insertions, 381 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/api/gui/config/entry/FilteringScreen.java b/runtime/src/main/java/me/shedaniel/rei/api/gui/config/entry/FilteringScreen.java
index ac7a5e0d6..798a1c9e3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/api/gui/config/entry/FilteringScreen.java
+++ b/runtime/src/main/java/me/shedaniel/rei/api/gui/config/entry/FilteringScreen.java
@@ -43,10 +43,13 @@ import me.shedaniel.rei.api.REIHelper;
import me.shedaniel.rei.api.gui.widgets.Tooltip;
import me.shedaniel.rei.api.ingredient.EntryStack;
import me.shedaniel.rei.api.registry.entry.EntryRegistry;
+import me.shedaniel.rei.api.search.SearchFilter;
+import me.shedaniel.rei.api.search.SearchProvider;
import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.gui.OverlaySearchField;
import me.shedaniel.rei.gui.widget.EntryWidget;
-import me.shedaniel.rei.impl.SearchArgument;
+import me.shedaniel.rei.impl.search.Argument;
+import me.shedaniel.rei.impl.search.CompoundArgument;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.components.Button;
import net.minecraft.client.gui.components.events.GuiEventListener;
@@ -103,7 +106,7 @@ public class FilteringScreen extends Screen {
private Button backButton;
private Rectangle selectionCache;
- private List<SearchArgument.SearchArguments> lastSearchArguments = Collections.emptyList();
+ private SearchFilter lastFilter = SearchFilter.matchAll();
public FilteringScreen(FilteringEntry filteringEntry) {
super(new TranslatableComponent("config.roughlyenoughitems.filteringScreen"));
@@ -311,10 +314,10 @@ public class FilteringScreen extends Screen {
}
public void updateSearch(String searchTerm) {
- lastSearchArguments = SearchArgument.processSearchTerm(searchTerm);
+ lastFilter = SearchProvider.getInstance().createFilter(searchTerm);
Set<EntryStack<?>> list = Sets.newLinkedHashSet();
EntryRegistry.getInstance().getEntryStacks().forEach(stack -> {
- if (canLastSearchTermsBeAppliedTo(stack)) {
+ if (matches(stack)) {
list.add(stack.normalize());
}
});
@@ -323,8 +326,8 @@ public class FilteringScreen extends Screen {
updateEntriesPosition();
}
- public boolean canLastSearchTermsBeAppliedTo(EntryStack<?> stack) {
- return lastSearchArguments.isEmpty() || SearchArgument.canSearchTermsBeAppliedTo(stack, lastSearchArguments);
+ public boolean matches(EntryStack<?> stack) {
+ return lastFilter.test(stack);
}
public void updateEntriesPosition() {
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java b/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
index 8d1a1209a..e466e342b 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/ContainerScreenOverlay.java
@@ -557,7 +557,7 @@ public class ContainerScreenOverlay extends REIOverlay {
AbstractContainerScreen<?> containerScreen = (AbstractContainerScreen<?>) Minecraft.getInstance().screen;
int x = containerScreen.leftPos, y = containerScreen.topPos;
for (Slot slot : containerScreen.getMenu().slots)
- if (!slot.hasItem() || !ENTRY_LIST_WIDGET.canLastSearchTermsBeAppliedTo(EntryStacks.of(slot.getItem())))
+ if (!slot.hasItem() || !ENTRY_LIST_WIDGET.matches(EntryStacks.of(slot.getItem())))
fillGradient(matrices, x + slot.x, y + slot.y, x + slot.x + 16, y + slot.y + 16, -601874400, -601874400);
}
matrices.popPose();
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 9a06211a2..3591f0ab6 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/OverlaySearchField.java
@@ -35,9 +35,9 @@ import me.shedaniel.rei.api.REIHelper;
import me.shedaniel.rei.api.gui.config.SyntaxHighlightingMode;
import me.shedaniel.rei.impl.OverlaySearchFieldSyntaxHighlighter;
import me.shedaniel.rei.impl.TextTransformations;
-import me.shedaniel.rei.impl.search.Argument;
-import me.shedaniel.rei.impl.search.ArgumentsRegistry;
-import me.shedaniel.rei.impl.search.TextArgument;
+import me.shedaniel.rei.impl.search.ArgumentType;
+import me.shedaniel.rei.impl.search.ArgumentTypesRegistry;
+import me.shedaniel.rei.impl.search.TextArgumentType;
import me.shedaniel.rei.impl.widgets.TextFieldWidget;
import net.minecraft.ChatFormatting;
import net.minecraft.client.Minecraft;
@@ -84,11 +84,11 @@ public class OverlaySearchField extends TextFieldWidget implements TextFieldWidg
style = ERROR_STYLE;
}
if (arg > 0) {
- Argument<?, ?> argument = ArgumentsRegistry.ARGUMENT_LIST.get((arg - 1) / 2);
+ ArgumentType<?, ?> argumentType = ArgumentTypesRegistry.ARGUMENT_TYPE_LIST.get((arg - 1) / 2);
if (!isPlain) {
- style = argument.getHighlightedStyle();
+ style = argumentType.getHighlightedStyle();
}
- if (!(argument instanceof TextArgument) && hasUnderscore && arg % 2 == 1) {
+ if (!(argumentType instanceof TextArgumentType) && hasUnderscore && arg % 2 == 1) {
style = style.withUnderlined(true);
}
} else if (!isPlain) {
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java
index b7d6312b4..85f3e8d86 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/FluidEntryDefinition.java
@@ -57,10 +57,12 @@ import net.minecraft.network.chat.TextComponent;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagCollection;
import net.minecraft.world.level.material.Fluid;
-import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-import java.util.*;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -69,23 +71,24 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
private final EntryRenderer<FluidStack> renderer = new FluidEntryRenderer();
@Override
- public @NotNull Class<FluidStack> getValueType() {
+ public Class<FluidStack> getValueType() {
return FluidStack.class;
}
@Override
- public @NotNull EntryType<FluidStack> getType() {
+ public EntryType<FluidStack> getType() {
return VanillaEntryTypes.FLUID;
}
@Override
- public @NotNull EntryRenderer<FluidStack> getRenderer() {
+ public EntryRenderer<FluidStack> getRenderer() {
return renderer;
}
@Override
- public @NotNull Optional<ResourceLocation> getIdentifier(EntryStack<FluidStack> entry, FluidStack value) {
- return Optional.ofNullable(Registry.FLUID.getKey(value.getFluid()));
+ @Nullable
+ public ResourceLocation getIdentifier(EntryStack<FluidStack> entry, FluidStack value) {
+ return Registry.FLUID.getKey(value.getFluid());
}
@Override
@@ -153,12 +156,12 @@ public class FluidEntryDefinition implements EntryDefinition<FluidStack>, EntryS
}
@Override
- public @NotNull Component asFormattedText(EntryStack<FluidStack> entry, FluidStack value) {
+ public Component asFormattedText(EntryStack<FluidStack> entry, FluidStack value) {
return value.getFluid().defaultFluidState().createLegacyBlock().getBlock().getName();
}
@Override
- public @NotNull Collection<ResourceLocation> getTagsFor(EntryStack<FluidStack> entry, FluidStack value) {
+ public Collection<ResourceLocation> getTagsFor(EntryStack<FluidStack> entry, FluidStack value) {
TagCollection<Fluid> collection = Minecraft.getInstance().getConnection().getTags().getFluids();
return collection == null ? Collections.emptyList() : collection.getMatchingTags(value.getFluid());
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java
index f3c913b72..3385ae958 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/plugin/entry/ItemEntryDefinition.java
@@ -32,8 +32,6 @@ import it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet;
import it.unimi.dsi.fastutil.objects.ReferenceSet;
import me.shedaniel.math.Point;
import me.shedaniel.math.Rectangle;
-import me.shedaniel.rei.api.ClientHelper;
-import me.shedaniel.rei.api.config.ConfigObject;
import me.shedaniel.rei.api.gui.widgets.Tooltip;
import me.shedaniel.rei.api.ingredient.EntryStack;
import me.shedaniel.rei.api.ingredient.entry.*;
@@ -55,8 +53,6 @@ import net.minecraft.client.resources.language.I18n;
import net.minecraft.client.resources.model.BakedModel;
import net.minecraft.core.Registry;
import net.minecraft.nbt.CompoundTag;
-import net.minecraft.nbt.ListTag;
-import net.minecraft.nbt.Tag;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagCollection;
@@ -90,8 +86,9 @@ public class ItemEntryDefinition implements EntryDefinition<ItemStack>, EntrySer
}
@Override
- public @NotNull Optional<ResourceLocation> getIdentifier(EntryStack<ItemStack> entry, ItemStack value) {
- return Optional.ofNullable(Registry.ITEM.getKey(value.getItem()));
+ @Nullable
+ public ResourceLocation getIdentifier(EntryStack<ItemStack> entry, ItemStack value) {
+ return Registry.ITEM.getKey(value.getItem());
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
index 005f670be..242be27be 100644
--- a/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
+++ b/runtime/src/main/java/me/shedaniel/rei/gui/widget/EntryListWidget.java
@@ -57,12 +57,15 @@ import me.shedaniel.rei.api.ingredient.util.EntryStacks;
import me.shedaniel.rei.api.registry.entry.EntryRegistry;
import me.shedaniel.rei.api.registry.screen.OverlayDecider;
import me.shedaniel.rei.api.registry.screen.ScreenRegistry;
+import me.shedaniel.rei.api.search.SearchFilter;
+import me.shedaniel.rei.api.search.SearchProvider;
import me.shedaniel.rei.api.util.CollectionUtils;
import me.shedaniel.rei.api.view.Views;
import me.shedaniel.rei.gui.ContainerScreenOverlay;
import me.shedaniel.rei.impl.ConfigManagerImpl;
import me.shedaniel.rei.impl.ConfigObjectImpl;
-import me.shedaniel.rei.impl.SearchArgument;
+import me.shedaniel.rei.impl.search.Argument;
+import me.shedaniel.rei.impl.search.CompoundArgument;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.screens.Screen;
import net.minecraft.client.player.LocalPlayer;
@@ -128,7 +131,7 @@ public class EntryListWidget extends WidgetWithBounds {
private List<EntryListEntry> entries = Collections.emptyList();
private List<Widget> renders = Collections.emptyList();
private List<Widget> widgets = Collections.emptyList();
- private List<SearchArgument.SearchArguments> lastSearchArguments = Collections.emptyList();
+ private SearchFilter lastFilter = SearchFilter.matchAll();
private String lastSearchTerm = null;
public static int entrySize() {
@@ -519,7 +522,7 @@ public class EntryListWidget extends WidgetWithBounds {
Stopwatch stopwatch = Stopwatch.createStarted();
if (ignoreLastSearch || this.lastSearchTerm == null || !this.lastSearchTerm.equals(searchTerm)) {
this.lastSearchTerm = searchTerm;
- this.lastSearchArguments = SearchArgument.processSearchTerm(searchTerm);
+ this.lastFilter = SearchProvider.getInstance().createFilter(searchTerm);
List<EntryStack<?>> list = Lists.newArrayList();
boolean checkCraftable = ConfigManager.getInstance().isCraftableOnlyEnabled() && !ContainerScreenOverlay.getInstance().inventoryStacks.isEmpty();
IntSet workingItems = checkCraftable ? new IntOpenHashSet() : null;
@@ -533,7 +536,7 @@ public class EntryListWidget extends WidgetWithBounds {
completableFutures.add(CompletableFuture.supplyAsync(() -> {
List<EntryStack<?>> filtered = Lists.newArrayList();
for (EntryStack<?> stack : partitionStacks) {
- if (canLastSearchTermsBeAppliedTo(stack)) {
+ if (matches(stack)) {
if (workingItems != null && !workingItems.contains(EntryStacks.hashExact(stack)))
continue;
filtered.add(stack.normalize());
@@ -554,7 +557,7 @@ public class EntryListWidget extends WidgetWithBounds {
}
} else {
for (EntryStack<?> stack : stacks) {
- if (canLastSearchTermsBeAppliedTo(stack)) {
+ if (matches(stack)) {
if (workingItems != null && !workingItems.contains(EntryStacks.hashExact(stack)))
continue;
list.add(stack.normalize());
@@ -580,8 +583,8 @@ public class EntryListWidget extends WidgetWithBounds {
updateEntriesPosition();
}
- public boolean canLastSearchTermsBeAppliedTo(EntryStack<?> stack) {
- return lastSearchArguments.isEmpty() || SearchArgument.canSearchTermsBeAppliedTo(stack, lastSearchArguments);
+ public boolean matches(EntryStack<?> stack) {
+ return lastFilter.test(stack);
}
@Override
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java b/runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
index c065ff64e..c77193309 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/AbstractEntryStack.java
@@ -36,6 +36,7 @@ import me.shedaniel.rei.api.gui.widgets.Tooltip;
import me.shedaniel.rei.api.ingredient.EntryStack;
import me.shedaniel.rei.api.ingredient.entry.comparison.ComparisonContext;
import me.shedaniel.rei.api.ingredient.util.EntryStacks;
+import net.minecraft.resources.ResourceLocation;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.Nullable;
@@ -107,13 +108,16 @@ public abstract class AbstractEntryStack<A> extends AbstractRenderer implements
@Override
@Nullable
public Tooltip getTooltip(Point mouse) {
- Tooltip[] tooltip = {this.getDefinition().getRenderer().getTooltip(this, mouse)};
+ Tooltip[] tooltip = {this.get(Settings.RENDER).apply(this).<A>cast().getTooltip(this, mouse)};
if (tooltip[0] == null) return null;
tooltip[0].getText().addAll(get(EntryStack.Settings.TOOLTIP_APPEND_EXTRA).apply(this));
tooltip[0] = get(EntryStack.Settings.TOOLTIP_PROCESSOR).apply(this, tooltip[0]);
if (tooltip[0] == null) return null;
if (ConfigObject.getInstance().shouldAppendModNames()) {
- getIdentifier().ifPresent(location -> ClientHelper.getInstance().appendModIdToTooltips(tooltip[0].getText(), location.getNamespace()));
+ ResourceLocation location = getIdentifier();
+ if (location != null) {
+ ClientHelper.getInstance().appendModIdToTooltips(tooltip[0].getText(), location.getNamespace());
+ }
}
return tooltip[0];
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
index e2e2460a6..a498fd2f1 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ClientHelperImpl.java
@@ -172,9 +172,10 @@ public class ClientHelperImpl implements ClientHelper {
return false;
}
} else {
- ResourceLocation identifier = entry.getIdentifier().orElse(null);
- if (identifier == null)
+ ResourceLocation identifier = entry.getIdentifier();
+ if (identifier == null) {
return false;
+ }
String tagMessage = cheatedStack.copy().getTag() != null && !cheatedStack.copy().getTag().isEmpty() ? cheatedStack.copy().getTag().getAsString() : "";
String og = cheatedStack.getCount() == 1 ? ConfigObject.getInstance().getGiveCommand().replaceAll(" \\{count}", "") : ConfigObject.getInstance().getGiveCommand();
String madeUpCommand = og.replaceAll("\\{player_name}", Minecraft.getInstance().player.getScoreboardName()).replaceAll("\\{item_name}", identifier.getPath()).replaceAll("\\{item_identifier}", identifier.toString()).replaceAll("\\{nbt}", tagMessage).replaceAll("\\{count}", String.valueOf(cheatedStack.getCount()));
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 9c019f19a..500713fd3 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/ConfigObjectImpl.java
@@ -371,6 +371,11 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
}
@Override
+ public SearchMode getIdentifierSearchMode() {
+ return advanced.search.identifierSearch;
+ }
+
+ @Override
public SearchMode getModSearchMode() {
return advanced.search.modSearch;
}
@@ -512,6 +517,8 @@ public class ConfigObjectImpl implements ConfigObject, ConfigData {
@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 identifierSearch = SearchMode.ALWAYS;
+ @ConfigEntry.Gui.EnumHandler(option = ConfigEntry.Gui.EnumHandler.EnumDisplayOption.BUTTON)
private SearchMode modSearch = SearchMode.PREFIX;
}
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 c2faf9110..25e92b926 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/OverlaySearchFieldSyntaxHighlighter.java
@@ -24,7 +24,8 @@
package me.shedaniel.rei.impl;
import me.shedaniel.rei.gui.OverlaySearchField;
-import me.shedaniel.rei.impl.search.ArgumentsRegistry;
+import me.shedaniel.rei.impl.search.ArgumentTypesRegistry;
+import me.shedaniel.rei.impl.search.Argument;
import net.minecraft.util.IntRange;
import org.jetbrains.annotations.ApiStatus;
@@ -44,7 +45,7 @@ public class OverlaySearchFieldSyntaxHighlighter implements Consumer<String> {
@Override
public void accept(String text) {
this.highlighted = new byte[text.length()];
- SearchArgument.processSearchTerm(text, new SearchArgument.ProcessedSink() {
+ Argument.bakeArguments(text, new Argument.ProcessedSink() {
@Override
public void addQuote(int index) {
highlighted[index] = -2;
@@ -56,9 +57,9 @@ public class OverlaySearchFieldSyntaxHighlighter implements Consumer<String> {
}
@Override
- public void addPart(SearchArgument<?, ?> argument, boolean usingGrammar, Collection<IntRange> grammarRanges, int index) {
+ public void addPart(Argument<?, ?> argument, boolean usingGrammar, Collection<IntRange> grammarRanges, int index) {
if (usingGrammar) {
- int argIndex = ArgumentsRegistry.ARGUMENT_LIST.indexOf(argument.getArgument()) * 2 + 1;
+ int argIndex = ArgumentTypesRegistry.ARGUMENT_TYPE_LIST.indexOf(argument.getArgument()) * 2 + 1;
for (int i = argument.start(); i < argument.end(); i++) {
highlighted[i] = (byte) argIndex;
}
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java
index 031f4b22e..e0d4f7274 100644
--- a/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java
+++ b/runtime/src/main/java/me/shedaniel/rei/impl/PluginManagerImpl.java
@@ -38,6 +38,7 @@ import me.shedaniel.rei.api.util.CollectionUtils;
import me.shedaniel.rei.impl.entry.ItemComparatorRegistryImpl;
import me.shedaniel.rei.impl.registry.CategoryRegistryImpl;
import me.shedaniel.rei.impl.registry.DisplayRegistryImpl;
+import me.shedaniel.rei.impl.search.SearchProviderImpl;
import me.shedaniel.rei.impl.subsets.SubsetsRegistryImpl;
import me.shedaniel.rei.impl.transfer.TransferHandlerRegistryImpl;
import net.fabricmc.api.EnvType;
@@ -62,6 +63,7 @@ public class PluginManagerImpl implements PluginManager {
private final List<REIPlugin> plugins = new ArrayList<>();
public PluginManagerImpl() {
+ registerReloadable(new SearchProviderImpl());
registerReloadable(new ConfigManagerImpl());
registerReloadable(new EntryTypeRegistryImpl());
registerReloadable(new ItemComparatorRegistryImpl());
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java b/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java
deleted file mode 100644
index bb209c019..000000000
--- a/runtime/src/main/java/me/shedaniel/rei/impl/SearchArgument.java
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * 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.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;
-import me.shedaniel.rei.impl.search.AlwaysMatchingArgument;
-import me.shedaniel.rei.impl.search.Argument;
-import me.shedaniel.rei.impl.search.ArgumentsRegistry;
-import me.shedaniel.rei.impl.search.MatchStatus;
-import net.fabricmc.api.EnvType;
-import net.fabricmc.api.Environment;
-import net.minecraft.client.Minecraft;
-import net.minecraft.network.chat.Component;
-import net.minecraft.util.IntRange;
-import net.minecraft.util.Unit;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.commons.lang3.mutable.MutableObject;
-import org.jetbrains.annotations.ApiStatus;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@ApiStatus.Internal
-@Environment(EnvType.CLIENT)
-public class SearchArgument<T, R> {
- public static final String SPACE = " ", EMPTY = "";
- private static final SearchArgument<Unit, Unit> ALWAYS = new SearchArgument<>(AlwaysMatchingArgument.INSTANCE, EMPTY, true, -1, -1);
- private Argument<T, R> argument;
- private String text;
- private T filterData;
- private boolean regular;
- private final int start;
- private final int end;
- private static final Pattern SPLIT_PATTERN = Pattern.compile("(?:\"([^\"]*)\")|([^\\s]+)");
-
- public SearchArgument(Argument<T, R> argument, String text, boolean regular, int start, int end) {
- this(argument, text, regular, start, end, true);
- }
-
- public SearchArgument(Argument<T, R> argument, String text, boolean regular, int start, int end, boolean lowercase) {
- this.argument = argument;
- this.text = lowercase ? text.toLowerCase(Locale.ROOT) : text;
- this.regular = regular;
- this.filterData = null;
- this.start = start;
- this.end = end;
- }
-
- public int start() {
- return start;
- }
-
- public int end() {
- return end;
- }
-
- public interface ProcessedSink {
- void addQuote(int inde