diff options
| author | shedaniel <daniel@shedaniel.me> | 2022-01-29 15:31:06 +0800 |
|---|---|---|
| committer | shedaniel <daniel@shedaniel.me> | 2022-01-29 15:31:06 +0800 |
| commit | c2b7f0458968e2c0c3793c5a3364d8a878266dd6 (patch) | |
| tree | 67a6e81c8cc599b86a15b6c3766f6a5d8a77f6fc /runtime | |
| parent | d21c7a39267c2bdc78cba0cde6da926830006552 (diff) | |
| download | RoughlyEnoughItems-c2b7f0458968e2c0c3793c5a3364d8a878266dd6.tar.gz RoughlyEnoughItems-c2b7f0458968e2c0c3793c5a3364d8a878266dd6.tar.bz2 RoughlyEnoughItems-c2b7f0458968e2c0c3793c5a3364d8a878266dd6.zip | |
Close #739
Diffstat (limited to 'runtime')
| -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(); } } |
