diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-01-29 15:31:06 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-01-29 18:11:26 +0800 |
| commit | 3e6cb1e47261f0ff40485382346fdef110ab9f21 (patch) | |
| tree | 171adf0c298acd30c436a88a569836c64cd8261f /runtime/src/main/java | |
| parent | 07413ab5f5375e99b4d50b5927fdd7c8cbb54bca (diff) | |
| download | RoughlyEnoughItems-3e6cb1e47261f0ff40485382346fdef110ab9f21.tar.gz RoughlyEnoughItems-3e6cb1e47261f0ff40485382346fdef110ab9f21.tar.bz2 RoughlyEnoughItems-3e6cb1e47261f0ff40485382346fdef110ab9f21.zip | |
Close #739
Diffstat (limited to 'runtime/src/main/java')
| -rw-r--r-- | runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java index f2a202778..42e20d6b8 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/common/entry/comparison/EntryComparatorRegistryImpl.java @@ -29,11 +29,14 @@ import me.shedaniel.rei.api.common.entry.comparison.EntryComparatorRegistry; import me.shedaniel.rei.api.common.registry.ReloadStage; import org.jetbrains.annotations.ApiStatus; +import java.util.ArrayList; import java.util.IdentityHashMap; +import java.util.List; import java.util.Map; @ApiStatus.Internal public abstract class EntryComparatorRegistryImpl<T, S> implements EntryComparatorRegistry<T, S> { + private final List<EntryComparator<T>> globalComparators = new ArrayList<>(); private final Map<S, EntryComparator<T>> comparators = new IdentityHashMap<>(); @Override @@ -46,12 +49,18 @@ public abstract class EntryComparatorRegistryImpl<T, S> implements EntryComparat } @Override + public void registerGlobal(EntryComparator<T> comparator) { + this.globalComparators.add(comparator); + } + + @Override public ReloadStage getStage() { return ReloadStage.START; } @Override public void startReload() { + globalComparators.clear(); comparators.clear(); } @@ -62,19 +71,22 @@ public abstract class EntryComparatorRegistryImpl<T, S> implements EntryComparat @Override public long hashOf(ComparisonContext context, T stack) { EntryComparator<T> comparator = comparators.get(getEntry(stack)); - if (comparator != null) { - return comparator.hash(context, stack); + if (comparator == null) comparator = defaultComparator(); + long hash = 1L; + hash = hash * 31 + comparator.hash(context, stack); + for (EntryComparator<T> globalComparator : globalComparators) { + hash = hash * 31 + globalComparator.hash(context, stack); } - return defaultComparator().hash(context, stack); + return hash; } @Override public boolean containsComparator(S item) { - return comparators.containsKey(item); + return !globalComparators.isEmpty() || comparators.containsKey(item); } @Override public int comparatorSize() { - return this.comparators.size(); + return this.globalComparators.size() + this.comparators.size(); } } |
