From 84ce034ad0eeffd6e88ea7a1cae821779b620841 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Wed, 6 Jul 2022 17:16:20 +0800 Subject: Fix #970 --- .../client/categories/tag/DefaultTagCategory.java | 4 ++-- .../rei/plugin/common/displays/tag/TagNodes.java | 17 ++++++++++------- .../me/shedaniel/rei/mixin/fabric/MixinTagLoader.java | 1 + .../me/shedaniel/rei/mixin/forge/MixinTagLoader.java | 6 ++---- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java index 24296cfaa..94cab72f8 100644 --- a/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java +++ b/default-plugin/src/main/java/me/shedaniel/rei/plugin/client/categories/tag/DefaultTagCategory.java @@ -129,7 +129,7 @@ public class DefaultTagCategory implements DisplayCategory void create(TagKey tagKey, Consumer>> callback) { Registry registry = ((Registry>) Registry.REGISTRY).get((ResourceKey>) tagKey.registry()); requestTagData(tagKey.registry(), result -> { - callback.accept(result.flatMap(dataMap -> dataMap != null ? resolveTag(tagKey, registry, dataMap) : DataResult.error("No tag data"))); + callback.accept(result.flatMap(dataMap -> dataMap != null ? resolveTag(tagKey, registry, dataMap).orElse(DataResult.error("No tag data")) : DataResult.error("No tag data"))); }); } - private static DataResult> resolveTag(TagKey tagKey, Registry registry, Map tagDataMap) { + private static Optional>> resolveTag(TagKey tagKey, Registry registry, Map tagDataMap) { TagData tagData = tagDataMap.get(tagKey.location()); - if (tagData == null) return DataResult.error("Tag Missing: " + tagKey.location()); + if (tagData == null) return Optional.empty(); TagNode self = TagNode.ofReference(tagKey); List> holders = new ArrayList<>(); @@ -201,11 +201,14 @@ public class TagNodes { for (ResourceLocation childTagId : tagData.otherTags()) { TagKey childTagKey = TagKey.create(tagKey.registry(), childTagId); if (registry.getTag(childTagKey).isPresent()) { - DataResult> result = resolveTag(childTagKey, registry, tagDataMap); - if (result.error().isPresent()) return DataResult.error(result.error().get().message()); - self.addChild(result.result().get()); + Optional>> resultOptional = resolveTag(childTagKey, registry, tagDataMap); + if (resultOptional.isPresent()) { + DataResult> result = resultOptional.get(); + if (result.error().isPresent()) return Optional.of(DataResult.error(result.error().get().message())); + self.addChild(result.result().get()); + } } } - return DataResult.success(self); + return Optional.of(DataResult.success(self)); } } diff --git a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java index 4e1f3b020..d82c5ab02 100644 --- a/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java +++ b/fabric/src/main/java/me/shedaniel/rei/mixin/fabric/MixinTagLoader.java @@ -66,6 +66,7 @@ public class MixinTagLoader { if (resourceKey == null) return; TagNodes.TAG_DATA_MAP.put(resourceKey, new HashMap<>()); Map tagDataMap = TagNodes.TAG_DATA_MAP.get(resourceKey); + if (tagDataMap == null) return; Registry registry = ((Registry>) Registry.REGISTRY).get((ResourceKey>) resourceKey); Stopwatch stopwatch = Stopwatch.createStarted(); diff --git a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinTagLoader.java b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinTagLoader.java index d6c164b86..66606b9bd 100644 --- a/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinTagLoader.java +++ b/forge/src/main/java/me/shedaniel/rei/mixin/forge/MixinTagLoader.java @@ -40,10 +40,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; +import java.util.*; @Mixin(TagLoader.class) public class MixinTagLoader { @@ -65,6 +62,7 @@ public class MixinTagLoader { if (resourceKey == null) return; TagNodes.TAG_DATA_MAP.put(resourceKey, new HashMap<>()); Map tagDataMap = TagNodes.TAG_DATA_MAP.get(resourceKey); + if (tagDataMap == null) return; Registry registry = ((Registry>) Registry.REGISTRY).get((ResourceKey>) resourceKey); Stopwatch stopwatch = Stopwatch.createStarted(); -- cgit