From 7bbef49785f594dfe3d6eac0cfc6ee84841aae80 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 21 Mar 2021 23:29:30 +0800 Subject: Rewrite search engine and expose as API Signed-off-by: shedaniel --- .../me/shedaniel/rei/api/config/ConfigObject.java | 2 ++ .../shedaniel/rei/api/ingredient/EntryStack.java | 10 +++--- .../api/ingredient/entry/type/EntryDefinition.java | 3 +- .../rei/api/ingredient/util/EntryStacks.java | 9 ++--- .../me/shedaniel/rei/api/search/SearchFilter.java | 42 ++++++++++++++++++++++ .../shedaniel/rei/api/search/SearchProvider.java | 19 ++++++++++ 6 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 api/src/main/java/me/shedaniel/rei/api/search/SearchFilter.java create mode 100644 api/src/main/java/me/shedaniel/rei/api/search/SearchProvider.java (limited to 'api/src/main/java/me/shedaniel') 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 4000844cb..d7cfb2023 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 @@ -172,5 +172,7 @@ public interface ConfigObject { SearchMode getTagSearchMode(); + SearchMode getIdentifierSearchMode(); + SearchMode getModSearchMode(); } diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java index 6f4b7294f..ad7857fe3 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/EntryStack.java @@ -47,7 +47,10 @@ import net.minecraft.util.Unit; import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Supplier; @@ -113,7 +116,8 @@ public interface EntryStack extends TextRepresentable, Renderer { return renderer == null ? EntryRenderer.empty() : renderer.cast(); } - Optional getIdentifier(); + @Nullable + ResourceLocation getIdentifier(); boolean isEmpty(); @@ -131,8 +135,6 @@ public interface EntryStack extends TextRepresentable, Renderer { int hash(ComparisonContext context); - boolean equals(EntryStack other, ComparisonContext context); - @Deprecated boolean equals(Object o); diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/type/EntryDefinition.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/type/EntryDefinition.java index a4ba8f2bd..8011364d5 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/type/EntryDefinition.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/entry/type/EntryDefinition.java @@ -33,7 +33,6 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.Nullable; import java.util.Collection; -import java.util.Optional; public interface EntryDefinition { Class getValueType(); @@ -42,7 +41,7 @@ public interface EntryDefinition { EntryRenderer getRenderer(); - Optional getIdentifier(EntryStack entry, T value); + @Nullable ResourceLocation getIdentifier(EntryStack entry, T value); boolean isEmpty(EntryStack entry, T value); diff --git a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java index b8a281ed2..80d007f6a 100644 --- a/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java +++ b/api/src/main/java/me/shedaniel/rei/api/ingredient/util/EntryStacks.java @@ -141,15 +141,15 @@ public final class EntryStacks { EntryType leftType = left.getType(); EntryType rightType = right.getType(); if (leftType == rightType) { - return left.equals((EntryStack) right, context); + return left.getDefinition().equals(left.getValue(), right.cast().getValue(), context); } - if (context == ComparisonContext.EXACT) return false; for (EntryTypeBridge bridge : EntryTypeRegistry.getInstance().getBridgesFor(leftType, rightType)) { InteractionResultHolder>> holder = bridge.bridge(left); if (holder.getResult() == InteractionResult.SUCCESS) { Iterator> iterator = holder.getObject().iterator(); while (iterator.hasNext()) { - if (iterator.next().equals(right, context)) { + EntryStack next = iterator.next(); + if (next.getDefinition().equals(next.getValue(), right.getValue(), context)) { return true; } } @@ -160,7 +160,8 @@ public final class EntryStacks { if (holder.getResult() == InteractionResult.SUCCESS) { Iterator> iterator = holder.getObject().iterator(); while (iterator.hasNext()) { - if (iterator.next().equals(left, context)) { + EntryStack next = iterator.next(); + if (next.getDefinition().equals(next.getValue(), left.getValue(), context)) { return true; } } diff --git a/api/src/main/java/me/shedaniel/rei/api/search/SearchFilter.java b/api/src/main/java/me/shedaniel/rei/api/search/SearchFilter.java new file mode 100644 index 000000000..d24241d84 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/search/SearchFilter.java @@ -0,0 +1,42 @@ +package me.shedaniel.rei.api.search; + +import me.shedaniel.rei.api.ingredient.EntryStack; + +import java.util.function.Predicate; + +public interface SearchFilter extends Predicate> { + static SearchFilter matchAll() { + return new SearchFilter() { + @Override + public String getFilter() { + return ""; + } + + @Override + public boolean test(EntryStack entryStack) { + return true; + } + }; + } + + static SearchFilter matchNone() { + return new SearchFilter() { + @Override + public String getFilter() { + return ""; + } + + @Override + public boolean test(EntryStack entryStack) { + return false; + } + }; + } + + /** + * Returns the original filter in {@link String}. + * + * @return the original filter + */ + String getFilter(); +} diff --git a/api/src/main/java/me/shedaniel/rei/api/search/SearchProvider.java b/api/src/main/java/me/shedaniel/rei/api/search/SearchProvider.java new file mode 100644 index 000000000..51abc5a14 --- /dev/null +++ b/api/src/main/java/me/shedaniel/rei/api/search/SearchProvider.java @@ -0,0 +1,19 @@ +package me.shedaniel.rei.api.search; + +import me.shedaniel.rei.api.plugins.PluginManager; +import me.shedaniel.rei.api.registry.Reloadable; + +public interface SearchProvider extends Reloadable { + static SearchProvider getInstance() { + return PluginManager.getInstance().get(SearchProvider.class); + } + + /** + * Creates a search filter, which respects user's config options and + * respects argument prefixes. + * + * @param searchTerm the search term of the filter + * @return the search filter + */ + SearchFilter createFilter(String searchTerm); +} -- cgit