From ddbedf6a7dc89176ab7797e5aaa10d6ea563f9a9 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 8 Jul 2020 22:49:27 +0800 Subject: Custom Filtering Rules Signed-off-by: shedaniel --- src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java') diff --git a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java index 5dfa05331..b3274ae94 100644 --- a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java @@ -31,6 +31,10 @@ import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.EntryRegistry; import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.impl.filtering.FilteringContextImpl; +import me.shedaniel.rei.impl.filtering.FilteringRule; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.Pair; @@ -42,6 +46,7 @@ import java.util.*; import java.util.stream.Collectors; @ApiStatus.Internal +@Environment(EnvType.CLIENT) public class EntryRegistryImpl implements EntryRegistry { private final List preFilteredList = Lists.newCopyOnWriteArrayList(); @@ -117,14 +122,19 @@ public class EntryRegistryImpl implements EntryRegistry { public void refilter() { long started = System.currentTimeMillis(); - Collection filteredStacks = ConfigObject.getInstance().getFilteredStacks(); + FilteringContextImpl context = new FilteringContextImpl(getStacksList()); + List> rules = ConfigObject.getInstance().getFilteringRules(); + for (int i = rules.size() - 1; i >= 0; i--) { + context.handleResult(rules.get(i).processFilteredStacks(context)); + } preFilteredList.clear(); + Collection filteredStacks = context.getHiddenStacks(); for (EntryStack stack : getStacksList()) { if (findFirstOrNullEqualsEntryIgnoreAmount(filteredStacks, stack) == null) preFilteredList.add(stack); } long time = System.currentTimeMillis() - started; - RoughlyEnoughItemsCore.LOGGER.info("Refiltered %d entries in %dms.", filteredStacks.size(), time); + RoughlyEnoughItemsCore.LOGGER.info("Refiltered %d entries with %d rules in %dms.", filteredStacks.size(), rules.size(), time); } public void reset() { -- cgit