From 17565c0ea269e695183047dbe06e6483642fe46b Mon Sep 17 00:00:00 2001 From: dhyces Date: Mon, 27 Jun 2022 23:48:11 -0400 Subject: [PATCH] Fix missed vanilla method overrides in ForgeRegistry (#8766) --- .../registries/ForgeRegistry.java | 6 +++++ .../NamespacedDefaultedWrapper.java | 9 ++++++- .../registries/NamespacedHolderHelper.java | 25 +++++++++++++++---- .../registries/NamespacedWrapper.java | 9 ++++++- 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minecraftforge/registries/ForgeRegistry.java b/src/main/java/net/minecraftforge/registries/ForgeRegistry.java index 1f33ac24bf..a3338227e2 100644 --- a/src/main/java/net/minecraftforge/registries/ForgeRegistry.java +++ b/src/main/java/net/minecraftforge/registries/ForgeRegistry.java @@ -307,6 +307,12 @@ public class ForgeRegistry implements IForgeRegistryInternal, IForgeRegist return Collections.unmodifiableSet(this.names.keySet()); } + @NotNull + Set> getResourceKeys() + { + return Collections.unmodifiableSet(this.keys.keySet()); + } + @NotNull @Override public Collection getValues() diff --git a/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java b/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java index 6c89a2cecd..fcd5813801 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedDefaultedWrapper.java @@ -166,6 +166,12 @@ class NamespacedDefaultedWrapper extends DefaultedRegistry implements ILoc return this.delegate.getKeys(); } + @Override + public Set> registryKeySet() + { + return this.delegate.getResourceKeys(); + } + @Override public Set, T>> entrySet() { @@ -192,7 +198,8 @@ class NamespacedDefaultedWrapper extends DefaultedRegistry implements ILoc @Override public Optional> getHolder(int id) { return this.holders.getHolder(id); } @Override public Optional> getHolder(ResourceKey key) { return this.holders.getHolder(key); } - @Override public DataResult> getOrCreateHolder(ResourceKey key) { return DataResult.success(this.holders.getOrCreateHolder(key)); } + @Override public DataResult> getOrCreateHolder(ResourceKey key) { return this.holders.getOrCreateHolder(key); } + @Override public Holder getOrCreateHolderOrThrow(ResourceKey key) { return this.holders.getOrCreateHolderOrThrow(key); } @Override public Optional> getRandom(RandomSource rand) { return this.holders.getRandom(rand); } @Override public Stream> holders() { return this.holders.holders(); } @Override public boolean isKnownTagName(TagKey name) { return this.holders.isKnownTagName(name); } diff --git a/src/main/java/net/minecraftforge/registries/NamespacedHolderHelper.java b/src/main/java/net/minecraftforge/registries/NamespacedHolderHelper.java index 664b024da5..e5633c4f69 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedHolderHelper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedHolderHelper.java @@ -22,6 +22,8 @@ import java.util.stream.Stream; import com.google.common.collect.Multimap; import com.google.common.collect.Multimaps; +import com.mojang.serialization.DataResult; +import cpw.mods.modlauncher.api.LamdbaExceptionUtils; import net.minecraft.util.RandomSource; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -88,15 +90,28 @@ class NamespacedHolderHelper return Optional.ofNullable(this.holders.get(value)); } - Holder getOrCreateHolder(ResourceKey key) + DataResult> getOrCreateHolder(ResourceKey key) { - return this.holdersByName.computeIfAbsent(key.location(), k -> + Holder.Reference ref = this.holdersByName.get(key.location()); + if (ref == null) { if (this.holderLookup != null) - throw new IllegalStateException("This registry can't create new holders without value"); + return DataResult.error("This registry can't create new holders without value (requested key: " + key + ")"); + if (this.frozen) - throw new IllegalStateException("Registry is already frozen (trying to add key " + k + ")"); - return Holder.Reference.createStandAlone(this.self, key); + return DataResult.error("Registry is already frozen (trying to add key " + key + ")"); + + ref = Holder.Reference.createStandAlone(this.self, key); + this.holdersByName.put(key.location(), ref); + } + return DataResult.success(ref); + } + + Holder getOrCreateHolderOrThrow(ResourceKey key) + { + return getOrCreateHolder(key).getOrThrow(false, msg -> + { + throw new IllegalStateException(msg); }); } diff --git a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java index 526e295d1e..f9ce3227d9 100644 --- a/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java +++ b/src/main/java/net/minecraftforge/registries/NamespacedWrapper.java @@ -164,6 +164,12 @@ class NamespacedWrapper extends MappedRegistry implements ILockableRegistr return this.delegate.getKeys(); } + @Override + public Set> registryKeySet() + { + return this.delegate.getResourceKeys(); + } + @Override public Set, T>> entrySet() { @@ -190,7 +196,8 @@ class NamespacedWrapper extends MappedRegistry implements ILockableRegistr @Override public Optional> getHolder(int id) { return this.holders.getHolder(id); } @Override public Optional> getHolder(ResourceKey key) { return this.holders.getHolder(key); } - @Override public DataResult> getOrCreateHolder(ResourceKey key) { return DataResult.success(this.holders.getOrCreateHolder(key)); } + @Override public DataResult> getOrCreateHolder(ResourceKey key) { return this.holders.getOrCreateHolder(key); } + @Override public Holder getOrCreateHolderOrThrow(ResourceKey key) { return this.holders.getOrCreateHolderOrThrow(key); } @Override public Optional> getRandom(RandomSource rand) { return this.holders.getRandom(rand); } @Override public Stream> holders() { return this.holders.holders(); } @Override public boolean isKnownTagName(TagKey name) { return this.holders.isKnownTagName(name); }