From 5db39ab195634ba3a4d58af72777be6a6da24a69 Mon Sep 17 00:00:00 2001
From: Jake Potrebic <jake.m.potrebic@gmail.com>
Date: Sun, 2 Jun 2024 15:19:17 -0700
Subject: [PATCH] Use RegistryOps in the correct places (#10843)

---
 patches/server/Adventure.patch | 27 +++++++++++++++++----------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/patches/server/Adventure.patch b/patches/server/Adventure.patch
index 710fec585a..86978a18e4 100644
--- a/patches/server/Adventure.patch
+++ b/patches/server/Adventure.patch
@@ -1594,7 +1594,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +
 +        @Override
 +        public @NotNull BinaryTagHolder asBinaryTag() {
-+            return BinaryTagHolder.encode(this.codec.encodeStart(NbtOps.INSTANCE, this.value).getOrThrow(IllegalArgumentException::new), NBT_CODEC);
++            return BinaryTagHolder.encode(this.codec.encodeStart(CraftRegistry.getMinecraftRegistry().createSerializationContext(NbtOps.INSTANCE), this.value).getOrThrow(IllegalArgumentException::new), NBT_CODEC);
 +        }
 +    }
 +
@@ -1622,7 +1622,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    // Style
 +
 +    public static net.minecraft.network.chat.Style asVanilla(final Style style) {
-+        final RegistryOps<Object> ops = RegistryOps.create(JavaOps.INSTANCE, CraftRegistry.getMinecraftRegistry());
++        final RegistryOps<Object> ops = CraftRegistry.getMinecraftRegistry().createSerializationContext(JavaOps.INSTANCE);
 +        final Object encoded = AdventureCodecs.STYLE_MAP_CODEC.codec()
 +            .encodeStart(ops, style).getOrThrow(IllegalStateException::new);
 +
@@ -1631,7 +1631,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +    }
 +
 +    public static Style asAdventure(final net.minecraft.network.chat.Style style) {
-+        final RegistryOps<Object> ops = RegistryOps.create(JavaOps.INSTANCE, CraftRegistry.getMinecraftRegistry());
++        final RegistryOps<Object> ops = CraftRegistry.getMinecraftRegistry().createSerializationContext(JavaOps.INSTANCE);
 +        final Object encoded = net.minecraft.network.chat.Style.Serializer.CODEC
 +            .encodeStart(ops, style).getOrThrow(IllegalStateException::new);
 +
@@ -1661,7 +1661,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        if (input instanceof AdventureComponent) {
 +            return ((AdventureComponent) input).adventure;
 +        }
-+        final RegistryOps<Object> ops = RegistryOps.create(JavaOps.INSTANCE, CraftRegistry.getMinecraftRegistry());
++        final RegistryOps<Object> ops = CraftRegistry.getMinecraftRegistry().createSerializationContext(JavaOps.INSTANCE);
 +        final Object obj = ComponentSerialization.CODEC.encodeStart(ops, input)
 +            .getOrThrow(s -> new RuntimeException("Failed to encode Minecraft Component: " + input + "; " + s));
 +        final Pair<Component, Object> converted = AdventureCodecs.COMPONENT_CODEC.decode(ops, obj)
@@ -1671,7 +1671,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +
 +    @Override
 +    public net.minecraft.network.chat.Component serialize(final Component component) {
-+        final RegistryOps<Object> ops = RegistryOps.create(JavaOps.INSTANCE, CraftRegistry.getMinecraftRegistry());
++        final RegistryOps<Object> ops = CraftRegistry.getMinecraftRegistry().createSerializationContext(JavaOps.INSTANCE);
 +        final Object obj = AdventureCodecs.COMPONENT_CODEC.encodeStart(ops, component)
 +            .getOrThrow(s -> new RuntimeException("Failed to encode adventure Component: " + component + "; " + s));
 +        final Pair<net.minecraft.network.chat.Component, Object> converted = ComponentSerialization.CODEC.decode(ops, obj)
@@ -1837,6 +1837,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +
 +import com.google.gson.JsonElement;
 +import com.mojang.brigadier.exceptions.CommandSyntaxException;
++import com.mojang.serialization.DynamicOps;
 +import com.mojang.serialization.JsonOps;
 +import io.papermc.paper.adventure.PaperAdventure;
 +import java.util.List;
@@ -1849,6 +1850,8 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +import net.minecraft.core.registries.BuiltInRegistries;
 +import net.minecraft.nbt.NbtOps;
 +import net.minecraft.nbt.Tag;
++import net.minecraft.resources.RegistryOps;
++import org.bukkit.craftbukkit.CraftRegistry;
 +import org.checkerframework.checker.nullness.qual.NonNull;
 +import org.checkerframework.checker.nullness.qual.Nullable;
 +import org.checkerframework.framework.qual.DefaultQualifier;
@@ -1865,6 +1868,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +        return ID;
 +    }
 +
++    private static <T> RegistryOps<T> createOps(final DynamicOps<T> delegate) {
++        return CraftRegistry.getMinecraftRegistry().createSerializationContext(delegate);
++    }
++
 +    @SuppressWarnings({"unchecked", "rawtypes"})
 +    @Override
 +    public Iterable<DataComponentValueConverterRegistry.Conversion<?, ?>> conversions() {
@@ -1872,7 +1879,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            DataComponentValueConverterRegistry.Conversion.convert(
 +                PaperAdventure.DataComponentValueImpl.class,
 +                GsonDataComponentValue.class,
-+                (key, dataComponentValue) -> gsonDataComponentValue((JsonElement) dataComponentValue.codec().encodeStart(JsonOps.INSTANCE, dataComponentValue.value()).getOrThrow())
++                (key, dataComponentValue) -> gsonDataComponentValue((JsonElement) dataComponentValue.codec().encodeStart(createOps(JsonOps.INSTANCE), dataComponentValue.value()).getOrThrow())
 +            ),
 +            DataComponentValueConverterRegistry.Conversion.convert(
 +                GsonDataComponentValue.class,
@@ -1882,13 +1889,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                    if (type == null) {
 +                        throw new IllegalArgumentException("Unknown data component type: " + key);
 +                    }
-+                    return new PaperAdventure.DataComponentValueImpl(type.codecOrThrow(), type.codecOrThrow().parse(JsonOps.INSTANCE, dataComponentValue.element()).getOrThrow(IllegalArgumentException::new));
++                    return new PaperAdventure.DataComponentValueImpl(type.codecOrThrow(), type.codecOrThrow().parse(createOps(JsonOps.INSTANCE), dataComponentValue.element()).getOrThrow(IllegalArgumentException::new));
 +                }
 +            ),
 +            DataComponentValueConverterRegistry.Conversion.convert(
 +                PaperAdventure.DataComponentValueImpl.class,
 +                DataComponentValue.TagSerializable.class,
-+                (key, dataComponentValue) -> BinaryTagHolder.encode((Tag) dataComponentValue.codec().encodeStart(NbtOps.INSTANCE, dataComponentValue.value()).getOrThrow(), PaperAdventure.NBT_CODEC)
++                (key, dataComponentValue) -> BinaryTagHolder.encode((Tag) dataComponentValue.codec().encodeStart(createOps(NbtOps.INSTANCE), dataComponentValue.value()).getOrThrow(), PaperAdventure.NBT_CODEC)
 +            ),
 +            DataComponentValueConverterRegistry.Conversion.convert(
 +                DataComponentValue.TagSerializable.class,
@@ -1899,7 +1906,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +                        throw new IllegalArgumentException("Unknown data component type: " + key);
 +                    }
 +                    try {
-+                        return new PaperAdventure.DataComponentValueImpl(type.codecOrThrow(), type.codecOrThrow().parse(NbtOps.INSTANCE, tagSerializable.asBinaryTag().get(PaperAdventure.NBT_CODEC)).getOrThrow(IllegalArgumentException::new));
++                        return new PaperAdventure.DataComponentValueImpl(type.codecOrThrow(), type.codecOrThrow().parse(createOps(NbtOps.INSTANCE), tagSerializable.asBinaryTag().get(PaperAdventure.NBT_CODEC)).getOrThrow(IllegalArgumentException::new));
 +                    } catch (final CommandSyntaxException e) {
 +                        throw new IllegalArgumentException(e);
 +                    }
@@ -5923,7 +5930,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000
 +            JavaOps.INSTANCE,
 +            JsonOps.INSTANCE
 +        )
-+            .map(ops -> RegistryOps.create(ops, AbstractTestingBase.REGISTRY_CUSTOM))
++            .map(ops -> AbstractTestingBase.REGISTRY_CUSTOM.createSerializationContext(ops))
 +            .toList();
 +    }
 +