aboutsummaryrefslogtreecommitdiff
path: root/runtime/src/main/java/me/shedaniel/rei/plugin
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-10-28 20:03:11 +0800
committershedaniel <daniel@shedaniel.me>2022-10-28 20:06:44 +0800
commit85ab4c61276f249f27b42a794167f2831ca7656a (patch)
tree81bf25f436d91d5bfd0ab1be4fef6e85f2c42c22 /runtime/src/main/java/me/shedaniel/rei/plugin
parent9212045f0f4a1864817a64168f2020416e1524a1 (diff)
downloadRoughlyEnoughItems-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.java20
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();
}