From d9e3a0081ed9937a2667ef358b55e2693cd191ea Mon Sep 17 00:00:00 2001 From: matyrobbrt <65940752+Matyrobbrt@users.noreply.github.com> Date: Mon, 19 Dec 2022 18:03:56 +0200 Subject: [PATCH] [1.19.3] Fix `retrieveRegistryLookup` attempting to get the registry lookup from a `HolderGetter` (#9225) --- .../core/RegistrySetBuilder.java.patch | 21 +++++++++++++++++++ .../data/worldgen/BootstapContext.java.patch | 9 ++++++++ .../resources/RegistryOps.java.patch | 2 +- .../net/minecraftforge/common/ForgeHooks.java | 14 +++++++++++++ 4 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 patches/minecraft/net/minecraft/data/worldgen/BootstapContext.java.patch diff --git a/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch b/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch index d55edb7c85..6c3e27d22c 100644 --- a/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch +++ b/patches/minecraft/net/minecraft/core/RegistrySetBuilder.java.patch @@ -11,3 +11,24 @@ private RegistrySetBuilder.BuildState m_254900_(RegistryAccess p_256400_) { RegistrySetBuilder.BuildState registrysetbuilder$buildstate = RegistrySetBuilder.BuildState.m_255369_(p_256400_, this.f_254732_.stream().map(RegistrySetBuilder.RegistryStub::f_254738_)); this.f_254732_.forEach((p_255629_) -> { +@@ -81,7 +_,7 @@ + RegistrySetBuilder.UniversalLookup registrysetbuilder$universallookup = new RegistrySetBuilder.UniversalLookup(registrysetbuilder$compositeowner); + ImmutableMap.Builder> builder = ImmutableMap.builder(); + p_255995_.m_206193_().forEach((p_258197_) -> { +- builder.put(p_258197_.f_206233_().m_135782_(), RegistrySetBuilder.m_254882_(p_258197_.f_206234_().m_255303_())); ++ builder.put(p_258197_.f_206233_().m_135782_(), net.minecraftforge.common.ForgeHooks.wrapRegistryLookup(p_258197_.f_206234_().m_255303_())); + }); + p_256495_.forEach((p_256603_) -> { + builder.put(p_256603_.m_135782_(), registrysetbuilder$universallookup); +@@ -102,6 +_,11 @@ + + public HolderGetter m_255420_(ResourceKey> p_255961_) { + return (HolderGetter) BuildState.this.f_254690_.getOrDefault(p_255961_.m_135782_(), BuildState.this.f_254749_); ++ } ++ ++ @Override ++ public Optional> registryLookup(ResourceKey> registry) { ++ return Optional.ofNullable((HolderLookup.RegistryLookup) BuildState.this.f_254690_.get(registry.m_135782_())); + } + }; + } diff --git a/patches/minecraft/net/minecraft/data/worldgen/BootstapContext.java.patch b/patches/minecraft/net/minecraft/data/worldgen/BootstapContext.java.patch new file mode 100644 index 0000000000..91323556e2 --- /dev/null +++ b/patches/minecraft/net/minecraft/data/worldgen/BootstapContext.java.patch @@ -0,0 +1,9 @@ +--- a/net/minecraft/data/worldgen/BootstapContext.java ++++ b/net/minecraft/data/worldgen/BootstapContext.java +@@ -14,4 +_,6 @@ + } + + HolderGetter m_255420_(ResourceKey> p_256410_); ++ ++ default java.util.Optional> registryLookup(ResourceKey> registry) { return java.util.Optional.empty(); } + } diff --git a/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch b/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch index 5d1e7b26f5..f287b43809 100644 --- a/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch +++ b/patches/minecraft/net/minecraft/resources/RegistryOps.java.patch @@ -10,7 +10,7 @@ + return DataResult.error("Not a registry ops"); + + return registryOps.f_254668_.m_254838_(resourceKey).map(registryInfo -> { -+ if (!(registryInfo.f_254724_() instanceof HolderLookup.RegistryLookup registryLookup)) ++ if (!(registryInfo.f_254675_() instanceof HolderLookup.RegistryLookup registryLookup)) + return DataResult.>error("Found holder getter but was not a registry lookup for " + resourceKey); + + return DataResult.success(registryLookup, registryInfo.f_254751_()); diff --git a/src/main/java/net/minecraftforge/common/ForgeHooks.java b/src/main/java/net/minecraftforge/common/ForgeHooks.java index 37982544c1..93731a8f5e 100644 --- a/src/main/java/net/minecraftforge/common/ForgeHooks.java +++ b/src/main/java/net/minecraftforge/common/ForgeHooks.java @@ -24,6 +24,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Stream; import com.google.common.base.Strings; import com.google.common.collect.ImmutableMap; @@ -46,6 +47,8 @@ import net.minecraft.commands.SharedSuggestionProvider; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.Holder; +import net.minecraft.core.HolderLookup; +import net.minecraft.core.HolderSet; import net.minecraft.core.registries.Registries; import net.minecraft.network.chat.ChatDecorator; import net.minecraft.network.chat.ClickEvent; @@ -1586,4 +1589,15 @@ public class ForgeHooks } return false; } + + @ApiStatus.Internal + public static HolderLookup.RegistryLookup wrapRegistryLookup(final HolderLookup.RegistryLookup lookup) + { + return new HolderLookup.RegistryLookup.Delegate<>() + { + @Override protected RegistryLookup parent() { return lookup; } + @Override public Stream> listTags() { return Stream.empty(); } + @Override public Optional> get(TagKey key) { return Optional.of(HolderSet.emptyNamed(lookup, key)); } + }; + } } \ No newline at end of file