diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-10-28 20:03:11 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-10-28 20:06:44 +0800 |
| commit | 85ab4c61276f249f27b42a794167f2831ca7656a (patch) | |
| tree | 81bf25f436d91d5bfd0ab1be4fef6e85f2c42c22 /runtime/src/main/java/me/shedaniel/rei/plugin | |
| parent | 9212045f0f4a1864817a64168f2020416e1524a1 (diff) | |
| download | RoughlyEnoughItems-85ab4c61276f249f27b42a794167f2831ca7656a.tar.gz RoughlyEnoughItems-85ab4c61276f249f27b42a794167f2831ca7656a.tar.bz2 RoughlyEnoughItems-85ab4c61276f249f27b42a794167f2831ca7656a.zip | |
Add filtering rules to the API (#1169)
Diffstat (limited to 'runtime/src/main/java/me/shedaniel/rei/plugin')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java index 3bdca8c15..923a416c2 100644 --- a/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java +++ b/runtime/src/main/java/me/shedaniel/rei/plugin/client/runtime/FilteredStacksVisibilityHandler.java @@ -29,23 +29,29 @@ import it.unimi.dsi.fastutil.objects.Reference2BooleanMap; import it.unimi.dsi.fastutil.objects.Reference2BooleanMaps; import it.unimi.dsi.fastutil.objects.Reference2BooleanOpenHashMap; import me.shedaniel.rei.api.client.config.ConfigObject; +import me.shedaniel.rei.api.client.entry.filtering.FilteringRule; import me.shedaniel.rei.api.client.registry.display.DisplayCategory; import me.shedaniel.rei.api.client.registry.display.DisplayRegistry; import me.shedaniel.rei.api.client.registry.display.visibility.DisplayVisibilityPredicate; import me.shedaniel.rei.api.common.display.Display; import me.shedaniel.rei.api.common.entry.EntryIngredient; import me.shedaniel.rei.impl.client.config.ConfigObjectImpl; -import me.shedaniel.rei.impl.client.entry.filtering.*; +import me.shedaniel.rei.impl.client.entry.filtering.FilteringContextImpl; +import me.shedaniel.rei.impl.client.entry.filtering.FilteringContextType; +import me.shedaniel.rei.impl.client.entry.filtering.FilteringResultImpl; import me.shedaniel.rei.impl.common.InternalLogger; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.function.Predicate; public class FilteredStacksVisibilityHandler implements DisplayVisibilityPredicate { private boolean checkHiddenStacks; private Reference2BooleanMap<Display> visible = Reference2BooleanMaps.synchronize(new Reference2BooleanOpenHashMap<>()); private List<FilteringRule<?>> filteringRules; - private FilteringCacheImpl cache; + private Map<FilteringRule<?>, Object> cache = new HashMap<>(); private final Predicate<Display> displayPredicate = this::checkHiddenStacks; @Override @@ -63,10 +69,10 @@ public class FilteredStacksVisibilityHandler implements DisplayVisibilityPredica if (checkHiddenStacks) { filteringRules = ((ConfigObjectImpl) ConfigObject.getInstance()).getFilteringRules(); - cache = new FilteringCacheImpl(); + cache = new HashMap<>(); for (int i = filteringRules.size() - 1; i >= 0; i--) { FilteringRule<?> rule = filteringRules.get(i); - cache.setCache(rule, rule.prepareCache(false)); + cache.put(rule, rule.prepareCache(false)); } cacheExisting(); @@ -105,11 +111,13 @@ public class FilteredStacksVisibilityHandler implements DisplayVisibilityPredica return true; } - private static boolean isEntryIngredientAllHidden(EntryIngredient ingredient, FilteringCache cache, List<FilteringRule<?>> rules) { + private static boolean isEntryIngredientAllHidden(EntryIngredient ingredient, Map<FilteringRule<?>, Object> cache, List<FilteringRule<?>> rules) { FilteringContextImpl context = new FilteringContextImpl(false, ingredient); for (int i = rules.size() - 1; i >= 0; i--) { FilteringRule<?> rule = rules.get(i); - context.handleResult(rule.processFilteredStacks(context, cache, false)); + context.handleResult((FilteringResultImpl) ((FilteringRule<Object>) rule).processFilteredStacks(context, + () -> new FilteringResultImpl(new ArrayList<>(), new ArrayList<>()), + cache.get(rule), false)); } return context.stacks.get(FilteringContextType.SHOWN).isEmpty() && context.stacks.get(FilteringContextType.DEFAULT).isEmpty(); } |
