diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-04-12 17:44:34 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-04-12 18:01:16 +0800 |
| commit | 61fdb2dd7a63fd6584466e35819a7623581eaa41 (patch) | |
| tree | 62dfc4eadd7cf0f473e48f1c2ca5dfe7d6f1b38b /runtime | |
| parent | 9e5b678a2b540ef2963f1c02239e933c3cb04eca (diff) | |
| download | RoughlyEnoughItems-61fdb2dd7a63fd6584466e35819a7623581eaa41.tar.gz RoughlyEnoughItems-61fdb2dd7a63fd6584466e35819a7623581eaa41.tar.bz2 RoughlyEnoughItems-61fdb2dd7a63fd6584466e35819a7623581eaa41.zip | |
Fix #829
Diffstat (limited to 'runtime')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/client/entry/filtering/rules/SearchFilteringRule.java | 27 |
1 files changed, 18 insertions, 9 deletions
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<SearchFilteringRule> { - private SearchFilter filter; + private String filterStr; + private Supplier<SearchFilter> 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<SearchFilteringRu public SearchFilteringRule createFromTag(CompoundTag tag) { String filter = tag.getString("filter"); boolean show = tag.getBoolean("show"); - return new SearchFilteringRule(SearchProvider.getInstance().createFilter(filter), show); + return new SearchFilteringRule(filter, show); } @Override @@ -106,7 +115,7 @@ public class SearchFilteringRule extends AbstractFilteringRule<SearchFilteringRu @Override public SearchFilteringRule createNew() { - return new SearchFilteringRule(SearchFilter.matchAll(), true); + return new SearchFilteringRule("", true); } private void processList(Collection<EntryStack<?>> stacks, List<CompletableFuture<List<EntryStack<?>>>> completableFutures) { @@ -114,7 +123,7 @@ public class SearchFilteringRule extends AbstractFilteringRule<SearchFilteringRu completableFutures.add(CompletableFuture.supplyAsync(() -> { List<EntryStack<?>> 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<SearchFilteringRu entryConsumer.accept(entry = new TextFieldRuleEntry(width - 36, rule, widget -> { 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<SearchFilteringRu @Override public void save() { - rule.filter = SearchProvider.getInstance().createFilter(entry.getWidget().getValue()); + rule.setFilter(entry.getWidget().getValue()); rule.show = show.getBoolean(); } }); |
