From 88bb2cb516a0c81816ff1f80afe44efc69cc84c8 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sat, 29 Oct 2022 22:34:57 +0800 Subject: Prevent crashes due to unresolved displays --- .../registry/display/DisplayRegistryImpl.java | 46 ++++++++++++++++++++-- 1 file changed, 42 insertions(+), 4 deletions(-) (limited to 'runtime/src/main/java/me/shedaniel') diff --git a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java index bd29f9142..c88d31d5c 100644 --- a/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java +++ b/runtime/src/main/java/me/shedaniel/rei/impl/client/registry/display/DisplayRegistryImpl.java @@ -27,6 +27,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.ForwardingMap; import com.google.common.collect.ForwardingMapEntry; import com.google.common.collect.Iterators; +import com.google.common.collect.Sets; import dev.architectury.event.EventResult; import me.shedaniel.rei.api.client.plugins.REIClientPlugin; import me.shedaniel.rei.api.client.registry.category.CategoryRegistry; @@ -73,16 +74,18 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl CategoryRegistry.getInstance().tryGet(key).isPresent()); } private static class RemappingMap extends ForwardingMap { protected final Map map; protected final UnaryOperator remapper; + protected final Predicate keyPredicate; - public RemappingMap(Map map, UnaryOperator remapper) { + public RemappingMap(Map map, UnaryOperator remapper, Predicate keyPredicate) { this.map = map; this.remapper = remapper; + this.keyPredicate = keyPredicate; } @Override @@ -93,7 +96,21 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl keySet() { + return Sets.filter(super.keySet(), keyPredicate::test); } @SuppressWarnings("UnstableApiUsage") @@ -108,8 +125,29 @@ public class DisplayRegistryImpl extends RecipeManagerContextImpl values() { + return new AbstractCollection() { + @Override + public Iterator iterator() { + return Iterators.transform(entrySet().iterator(), Entry::getValue); + } + + @Override + public int size() { + return RemappingMap.this.size(); + } + }; + } + private Iterator> mapIterator(Iterator> iterator) { - return Iterators.transform(iterator, this::mapEntry); + return Iterators.transform(Iterators.filter(iterator, entry -> this.keyPredicate.test(entry.getKey())), + this::mapEntry); } private Entry mapEntry(Entry entry) { -- cgit