From 97c8436558d8b13b70587703be50d0bd434b3e8d Mon Sep 17 00:00:00 2001 From: shedaniel Date: Fri, 14 Feb 2020 00:22:40 +0800 Subject: 3.4.1 Signed-off-by: shedaniel --- .../me/shedaniel/rei/impl/EntryRegistryImpl.java | 34 ++++++++++++++++++++-- 1 file changed, 32 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 caa9a6356..5319b2731 100644 --- a/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java +++ b/src/main/java/me/shedaniel/rei/impl/EntryRegistryImpl.java @@ -7,6 +7,8 @@ package me.shedaniel.rei.impl; import com.google.common.collect.Lists; import com.google.common.collect.Queues; +import com.google.common.collect.Sets; +import me.shedaniel.rei.RoughlyEnoughItemsCore; import me.shedaniel.rei.api.ConfigObject; import me.shedaniel.rei.api.EntryRegistry; import me.shedaniel.rei.api.EntryStack; @@ -24,15 +26,24 @@ import java.util.concurrent.CopyOnWriteArrayList; @ApiStatus.Internal public class EntryRegistryImpl implements EntryRegistry { - private final CopyOnWriteArrayList allEntries = Lists.newCopyOnWriteArrayList(); + private final CopyOnWriteArrayList preFilteredList = Lists.newCopyOnWriteArrayList(); private final CopyOnWriteArrayList entries = Lists.newCopyOnWriteArrayList(); private final Queue>> queueRegisterEntryStackAfter = Queues.newConcurrentLinkedQueue(); private List reloadList; private boolean doingDistinct = false; + private static EntryStack findFirstOrNullEqualsEntryIgnoreAmount(Collection list, EntryStack obj) { + for (EntryStack t : list) { + if (t.equalsIgnoreAmount(obj)) + return t; + } + return null; + } + public void distinct() { + preFilteredList.clear(); doingDistinct = true; - TreeSet set = new TreeSet<>((i, j) -> i.equalsAll(j) ? 0 : 1); + Set set = Sets.newLinkedHashSet(); set.addAll(reloadList); entries.clear(); entries.addAll(set); @@ -58,12 +69,31 @@ public class EntryRegistryImpl implements EntryRegistry { return RecipeHelper.getInstance().arePluginsLoading() && !doingDistinct ? reloadList : entries; } + @Override + public List getPreFilteredList() { + return preFilteredList; + } + + public void refilter() { + long started = System.currentTimeMillis(); + Set set = Sets.newLinkedHashSet(); + set.addAll(ConfigObject.getInstance().getFilteredStacks()); + preFilteredList.clear(); + for (EntryStack stack : getStacksList()) { + if (findFirstOrNullEqualsEntryIgnoreAmount(set, stack) == null) + preFilteredList.add(stack); + } + long time = System.currentTimeMillis() - started; + RoughlyEnoughItemsCore.LOGGER.info("[REI] Refiltered %d entries in %dms.", set.size(), time); + } + public void reset() { doingDistinct = false; reloadList = Lists.newArrayList(); queueRegisterEntryStackAfter.clear(); entries.clear(); reloadList.clear(); + preFilteredList.clear(); } @Override -- cgit