From 022ae0fc002800b42f6b870e62cf52d5a7cb5341 Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Sun, 8 Jan 2023 13:18:14 -0500 Subject: [PATCH] Instead of re-encoding the client-server registry, pass through the original --- .../proxy/protocol/packet/JoinGame.java | 32 +++++++++++-------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java index 5cf689cb..85a61ef4 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/JoinGame.java @@ -54,6 +54,7 @@ public class JoinGame implements MinecraftPacket { private int simulationDistance; // 1.18+ private @Nullable Pair lastDeathPosition; private CompoundBinaryTag chatTypeRegistry; // placeholder, 1.19+ + private @Nullable CompoundBinaryTag originalRegistryContainerTag; public int getEntityId() { return entityId; @@ -285,6 +286,7 @@ public class JoinGame implements MinecraftPacket { ImmutableSet readData = DimensionRegistry.fromGameData(dimensionRegistryContainer, version); this.dimensionRegistry = new DimensionRegistry(readData, levelNames); + this.originalRegistryContainerTag = registryContainer; String dimensionIdentifier; String levelName = null; @@ -378,21 +380,25 @@ public class JoinGame implements MinecraftPacket { } buf.writeByte(previousGamemode); ProtocolUtils.writeStringArray(buf, dimensionRegistry.getLevelNames().toArray(new String[0])); - CompoundBinaryTag.Builder registryContainer = CompoundBinaryTag.builder(); - ListBinaryTag encodedDimensionRegistry = dimensionRegistry.encodeRegistry(version); - if (version.compareTo(ProtocolVersion.MINECRAFT_1_16_2) >= 0) { - CompoundBinaryTag.Builder dimensionRegistryEntry = CompoundBinaryTag.builder(); - dimensionRegistryEntry.putString("type", "minecraft:dimension_type"); - dimensionRegistryEntry.put("value", encodedDimensionRegistry); - registryContainer.put("minecraft:dimension_type", dimensionRegistryEntry.build()); - registryContainer.put("minecraft:worldgen/biome", biomeRegistry); - if (version.compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) { - registryContainer.put("minecraft:chat_type", chatTypeRegistry); - } + if (this.originalRegistryContainerTag != null) { + ProtocolUtils.writeCompoundTag(buf, this.originalRegistryContainerTag); } else { - registryContainer.put("dimension", encodedDimensionRegistry); + CompoundBinaryTag.Builder registryContainer = CompoundBinaryTag.builder(); + ListBinaryTag encodedDimensionRegistry = dimensionRegistry.encodeRegistry(version); + if (version.compareTo(ProtocolVersion.MINECRAFT_1_16_2) >= 0) { + CompoundBinaryTag.Builder dimensionRegistryEntry = CompoundBinaryTag.builder(); + dimensionRegistryEntry.putString("type", "minecraft:dimension_type"); + dimensionRegistryEntry.put("value", encodedDimensionRegistry); + registryContainer.put("minecraft:dimension_type", dimensionRegistryEntry.build()); + registryContainer.put("minecraft:worldgen/biome", biomeRegistry); + if (version.compareTo(ProtocolVersion.MINECRAFT_1_19) >= 0) { + registryContainer.put("minecraft:chat_type", chatTypeRegistry); + } + } else { + registryContainer.put("dimension", encodedDimensionRegistry); + } + ProtocolUtils.writeCompoundTag(buf, registryContainer.build()); } - ProtocolUtils.writeCompoundTag(buf, registryContainer.build()); if (version.compareTo(ProtocolVersion.MINECRAFT_1_16_2) >= 0 && version.compareTo(ProtocolVersion.MINECRAFT_1_19) < 0) { ProtocolUtils.writeCompoundTag(buf, currentDimensionData.serializeDimensionDetails());