aboutsummaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorshedaniel <daniel@shedaniel.me>2022-01-29 15:31:06 +0800
committershedaniel <daniel@shedaniel.me>2022-01-29 15:31:06 +0800
commitc2b7f0458968e2c0c3793c5a3364d8a878266dd6 (patch)
tree67a6e81c8cc599b86a15b6c3766f6a5d8a77f6fc /runtime
parentd21c7a39267c2bdc78cba0cde6da926830006552 (diff)
downloadRoughlyEnoughItems-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.java22
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();
}
}