From 61fdb2dd7a63fd6584466e35819a7623581eaa41 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Tue, 12 Apr 2022 17:44:34 +0800 Subject: Fix #829 --- .../entry/filtering/rules/SearchFilteringRule.java | 27 ++++++++++++++-------- 1 file changed, 18 insertions(+), 9 deletions(-) (limited to 'runtime/src') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java index 58ad942ba..5f5969674 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java @@ -23,6 +23,7 @@ package me.shedaniel.rei.impl.client.entry.filtering.rules; +import com.google.common.base.Suppliers; import com.google.common.collect.Lists; import me.shedaniel.rei.api.client.search.SearchFilter; import me.shedaniel.rei.api.client.search.SearchProvider; @@ -41,6 +42,7 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.chat.Component; import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.util.StringUtil; import java.util.Collection; import java.util.List; @@ -51,23 +53,30 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.function.BiFunction; import java.util.function.Consumer; +import java.util.function.Supplier; @Environment(EnvType.CLIENT) public class SearchFilteringRule extends AbstractFilteringRule { - private SearchFilter filter; + private String filterStr; + private Supplier filter; private boolean show; public SearchFilteringRule() { } - public SearchFilteringRule(SearchFilter filter, boolean show) { - this.filter = filter; + public SearchFilteringRule(String filter, boolean show) { + setFilter(filter); this.show = show; } + public void setFilter(String filter) { + this.filterStr = filter; + this.filter = Suppliers.memoize(() -> StringUtil.isNullOrEmpty(filter) ? SearchFilter.matchAll() : SearchProvider.getInstance().createFilter(filter)); + } + @Override public CompoundTag save(CompoundTag tag) { - tag.putString("filter", filter.getFilter()); + tag.putString("filter", filterStr); tag.putBoolean("show", show); return tag; } @@ -76,7 +85,7 @@ public class SearchFilteringRule extends AbstractFilteringRule> stacks, List>>> completableFutures) { @@ -114,7 +123,7 @@ public class SearchFilteringRule extends AbstractFilteringRule { List> output = Lists.newArrayList(); for (EntryStack stack : partitionStacks) { - if (stack != null && filter.test(stack)) { + if (stack != null && filter.get().test(stack)) { output.add(stack); } } @@ -146,7 +155,7 @@ public class SearchFilteringRule extends AbstractFilteringRule { widget.setMaxLength(9999); if (entry != null) widget.setValue(entry.getWidget().getValue()); - else widget.setValue(rule.filter.getFilter()); + else widget.setValue(rule.filterStr); })); addEmpty(entryConsumer, 10); addText(entryConsumer, new TranslatableComponent("rule.roughlyenoughitems.filtering.search.show").withStyle(ChatFormatting.GRAY)); @@ -157,7 +166,7 @@ public class SearchFilteringRule extends AbstractFilteringRule