From 54330702b1b66486a21c661b5f6a343da493a4d3 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Fri, 6 Oct 2023 20:56:08 +1000 Subject: [PATCH] 23w40a --- .../api/ViaBackwardsPlatform.java | 4 +- .../packets/BlockItemPackets1_11.java | 4 +- .../packets/BlockItemPackets1_12.java | 2 +- .../packets/BlockItemPackets1_13.java | 8 +- .../packets/BlockItemPackets1_16.java | 2 +- .../packets/EntityPackets1_16.java | 2 +- .../packets/BlockItemPackets1_16_2.java | 2 +- .../packets/EntityPackets1_16_2.java | 8 +- .../packets/EntityPackets1_17.java | 12 +- .../packets/BlockItemPackets1_18.java | 4 +- .../packets/EntityPackets1_18.java | 8 +- .../packets/EntityPackets1_19.java | 10 +- .../Protocol1_18To1_18_2.java | 10 +- .../packets/EntityPackets1_19_3.java | 4 +- .../packets/EntityPackets1_19_4.java | 4 +- .../packets/EntityPackets1_20.java | 4 +- .../Protocol1_19To1_19_1.java | 4 +- .../Protocol1_20_2To1_20_3.java | 263 ++++++++++++++++++ .../rewriter/EntityPacketRewriter1_20_3.java | 61 ++++ .../Protocol1_20To1_20_2.java | 2 +- .../BlockItemPacketRewriter1_20_2.java | 4 +- .../rewriter/EntityPacketRewriter1_20_2.java | 4 +- .../Protocol1_9_1_2To1_9_3_4.java | 4 +- .../chunks/BlockEntity.java | 2 +- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- 26 files changed, 381 insertions(+), 55 deletions(-) create mode 100644 common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/Protocol1_20_2To1_20_3.java create mode 100644 common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/rewriter/EntityPacketRewriter1_20_3.java diff --git a/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java b/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java index cf0734c8..4743f6be 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/ViaBackwardsPlatform.java @@ -51,6 +51,7 @@ import com.viaversion.viabackwards.protocol.protocol1_19_1to1_19_3.Protocol1_19_ import com.viaversion.viabackwards.protocol.protocol1_19_3to1_19_4.Protocol1_19_3To1_19_4; import com.viaversion.viabackwards.protocol.protocol1_19_4to1_20.Protocol1_19_4To1_20; import com.viaversion.viabackwards.protocol.protocol1_19to1_19_1.Protocol1_19To1_19_1; +import com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_3.Protocol1_20_2To1_20_3; import com.viaversion.viabackwards.protocol.protocol1_20to1_20_2.Protocol1_20To1_20_2; import com.viaversion.viabackwards.protocol.protocol1_9_1_2to1_9_3_4.Protocol1_9_1_2To1_9_3_4; import com.viaversion.viabackwards.protocol.protocol1_9_4to1_10.Protocol1_9_4To1_10; @@ -66,7 +67,7 @@ import java.util.logging.Logger; public interface ViaBackwardsPlatform { - String MINIMUM_VV_VERSION = "4.8.1"; + String MINIMUM_VV_VERSION = "4.9.0"; /** * Initialize ViaBackwards. @@ -133,6 +134,7 @@ public interface ViaBackwardsPlatform { protocolManager.registerProtocol(new Protocol1_19_4To1_20(), ProtocolVersion.v1_19_4, ProtocolVersion.v1_20); protocolManager.registerProtocol(new Protocol1_20To1_20_2(), ProtocolVersion.v1_20, ProtocolVersion.v1_20_2); + protocolManager.registerProtocol(new Protocol1_20_2To1_20_3(), ProtocolVersion.v1_20_2, ProtocolVersion.v1_20_3); } /** diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java index 263908db..55d9077b 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_10to1_11/packets/BlockItemPackets1_11.java @@ -228,7 +228,7 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter { // Remove on shulkerbox decleration @@ -237,7 +237,7 @@ public class BlockItemPackets1_11 extends LegacyBlockItemRewriter { // Remove bed color diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_12_2to1_13/packets/BlockItemPackets1_13.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_12_2to1_13/packets/BlockItemPackets1_13.java index 6a5b14d2..8ab898a3 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_12_2to1_13/packets/BlockItemPackets1_13.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_12_2to1_13/packets/BlockItemPackets1_13.java @@ -147,7 +147,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit public void register() { map(Type.POSITION); // 0 - Position map(Type.UNSIGNED_BYTE); // 1 - Action - map(Type.NBT); // 2 - NBT Data + map(Type.NAMED_COMPOUND_TAG); // 2 - NBT Data handler(wrapper -> { BackwardsBlockEntityProvider provider = Via.getManager().getProviders().get(BackwardsBlockEntityProvider.class); @@ -157,11 +157,11 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit wrapper.cancel(); } - wrapper.set(Type.NBT, 0, + wrapper.set(Type.NAMED_COMPOUND_TAG, 0, provider.transform( wrapper.user(), wrapper.get(Type.POSITION, 0), - wrapper.get(Type.NBT, 0) + wrapper.get(Type.NAMED_COMPOUND_TAG, 0) )); }); } @@ -980,7 +980,7 @@ public class BlockItemPackets1_13 extends com.viaversion.viabackwards.api.rewrit PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_12_1.BLOCK_ENTITY_DATA, user); wrapper.write(Type.POSITION, position); wrapper.write(Type.UNSIGNED_BYTE, (short) 5); - wrapper.write(Type.NBT, nbt); + wrapper.write(Type.NAMED_COMPOUND_TAG, nbt); wrapper.scheduleSend(Protocol1_12_2To1_13.class); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java index 54a33196..627b3441 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/BlockItemPackets1_16.java @@ -237,7 +237,7 @@ public class BlockItemPackets1_16 extends com.viaversion.viabackwards.api.rewrit protocol.registerClientbound(ClientboundPackets1_16.BLOCK_ENTITY_DATA, wrapper -> { wrapper.passthrough(Type.POSITION1_14); // Position wrapper.passthrough(Type.UNSIGNED_BYTE); // Action - CompoundTag tag = wrapper.passthrough(Type.NBT); + CompoundTag tag = wrapper.passthrough(Type.NAMED_COMPOUND_TAG); handleBlockEntity(tag); }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java index 4f147754..10506c00 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/packets/EntityPackets1_16.java @@ -151,7 +151,7 @@ public class EntityPackets1_16 extends EntityRewriter { WorldNameTracker worldNameTracker = wrapper.user().get(WorldNameTracker.class); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/BlockItemPackets1_16_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/BlockItemPackets1_16_2.java index ff25a700..75df2a4d 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/BlockItemPackets1_16_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/BlockItemPackets1_16_2.java @@ -105,7 +105,7 @@ public class BlockItemPackets1_16_2 extends com.viaversion.viabackwards.api.rewr map(Type.POSITION1_14); map(Type.UNSIGNED_BYTE); handler(wrapper -> { - handleBlockEntity(wrapper.passthrough(Type.NBT)); + handleBlockEntity(wrapper.passthrough(Type.NAMED_COMPOUND_TAG)); }); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java index 450d562b..c29bd74e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_1to1_16_2/packets/EntityPackets1_16_2.java @@ -72,7 +72,7 @@ public class EntityPackets1_16_2 extends EntityRewriter { - CompoundTag registry = wrapper.read(Type.NBT); + CompoundTag registry = wrapper.read(Type.NAMED_COMPOUND_TAG); if (wrapper.user().getProtocolInfo().getProtocolVersion() <= ProtocolVersion.v1_15_2.getVersion()) { // Store biomes for <1.16 client handling CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome"); @@ -91,9 +91,9 @@ public class EntityPackets1_16_2 extends EntityRewriter { - CompoundTag dimensionData = wrapper.read(Type.NBT); + CompoundTag dimensionData = wrapper.read(Type.NAMED_COMPOUND_TAG); wrapper.write(Type.STRING, getDimensionFromData(dimensionData)); }); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java index baa0436c..ab19e41a 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_16_4to1_17/packets/EntityPackets1_17.java @@ -71,8 +71,8 @@ public final class EntityPackets1_17 extends EntityRewriter { byte previousGamemode = wrapper.get(Type.BYTE, 0); @@ -83,7 +83,7 @@ public final class EntityPackets1_17 extends EntityRewriter { - CompoundTag registry = wrapper.get(Type.NBT, 0); + CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome"); ListTag biomes = biomeRegistry.get("value"); for (Tag biome : biomes) { @@ -101,7 +101,7 @@ public final class EntityPackets1_17 extends EntityRewriter reduceExtendedHeight(wrapper.get(Type.NBT, 0), true)); + handler(wrapper -> reduceExtendedHeight(wrapper.get(Type.NAMED_COMPOUND_TAG, 0), true)); } }); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java index 71b7d24e..0f87d2f7 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_17_1to1_18/packets/BlockItemPackets1_18.java @@ -131,7 +131,7 @@ public final class BlockItemPackets1_18 extends ItemRewriter { final int id = wrapper.read(Type.VAR_INT); - final CompoundTag tag = wrapper.read(Type.NBT); + final CompoundTag tag = wrapper.read(Type.NAMED_COMPOUND_TAG); final int mappedId = BlockEntityIds.mappedId(id); if (mappedId == -1) { @@ -162,7 +162,7 @@ public final class BlockItemPackets1_18 extends ItemRewriter { - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final CompoundTag biomeRegistry = registry.get("minecraft:worldgen/biome"); final ListTag biomes = biomeRegistry.get("value"); for (final Tag biome : biomes.getValue()) { @@ -85,7 +85,7 @@ public final class EntityPackets1_18 extends EntityRewriter { // Remove factor data if (wrapper.read(Type.BOOLEAN)) { - wrapper.read(Type.NBT); + wrapper.read(Type.NAMED_COMPOUND_TAG); } }); } @@ -123,14 +123,14 @@ public final class EntityPackets1_19 extends EntityRewriter { final DimensionRegistryStorage dimensionRegistryStorage = wrapper.user().get(DimensionRegistryStorage.class); dimensionRegistryStorage.clear(); // Cache dimensions and find current dimension final String dimensionKey = wrapper.read(Type.STRING); - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final ListTag dimensions = ((CompoundTag) registry.get("minecraft:dimension_type")).get("value"); boolean found = false; for (final Tag dimension : dimensions) { @@ -140,7 +140,7 @@ public final class EntityPackets1_19 extends EntityRewriter { - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final CompoundTag dimensionsHolder = registry.get("minecraft:dimension_type"); final ListTag dimensions = dimensionsHolder.get("value"); for (final Tag dimension : dimensions) { removeTagPrefix(((CompoundTag) dimension).get("element")); } - removeTagPrefix(wrapper.get(Type.NBT, 1)); + removeTagPrefix(wrapper.get(Type.NAMED_COMPOUND_TAG, 1)); }); } }); - registerClientbound(ClientboundPackets1_18.RESPAWN, wrapper -> removeTagPrefix(wrapper.passthrough(Type.NBT))); + registerClientbound(ClientboundPackets1_18.RESPAWN, wrapper -> removeTagPrefix(wrapper.passthrough(Type.NAMED_COMPOUND_TAG))); } private void removeTagPrefix(CompoundTag tag) { diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_1to1_19_3/packets/EntityPackets1_19_3.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_1to1_19_3/packets/EntityPackets1_19_3.java index d73e417a..2bcaafcb 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_1to1_19_3/packets/EntityPackets1_19_3.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_1to1_19_3/packets/EntityPackets1_19_3.java @@ -70,7 +70,7 @@ public final class EntityPackets1_19_3 extends EntityRewriter { final ChatTypeStorage1_19_3 chatTypeStorage = wrapper.user().get(ChatTypeStorage1_19_3.class); chatTypeStorage.clear(); - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final ListTag chatTypes = ((CompoundTag) registry.get("minecraft:chat_type")).get("value"); for (final Tag chatType : chatTypes) { final CompoundTag chatTypeCompound = (CompoundTag) chatType; diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_3to1_19_4/packets/EntityPackets1_19_4.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_3to1_19_4/packets/EntityPackets1_19_4.java index 1e697efd..298c57ab 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_3to1_19_4/packets/EntityPackets1_19_4.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_3to1_19_4/packets/EntityPackets1_19_4.java @@ -52,14 +52,14 @@ public final class EntityPackets1_19_4 extends EntityRewriter { - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); registry.remove("minecraft:trim_pattern"); registry.remove("minecraft:trim_material"); registry.remove("minecraft:damage_type"); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_4to1_20/packets/EntityPackets1_20.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_4to1_20/packets/EntityPackets1_20.java index 6d00a273..ad6442c4 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_4to1_20/packets/EntityPackets1_20.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19_4to1_20/packets/EntityPackets1_20.java @@ -61,7 +61,7 @@ public final class EntityPackets1_20 extends EntityRewriter { - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); ListTag values; // A 1.20 server can't send this element, and the 1.20 client still works, if the element is missing diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19to1_19_1/Protocol1_19To1_19_1.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19to1_19_1/Protocol1_19To1_19_1.java index 7d1b118e..e4c50712 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19to1_19_1/Protocol1_19To1_19_1.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_19to1_19_1/Protocol1_19To1_19_1.java @@ -96,14 +96,14 @@ public final class Protocol1_19To1_19_1 extends BackwardsProtocol { final ChatRegistryStorage chatTypeStorage = wrapper.user().get(ChatRegistryStorage1_19_1.class); chatTypeStorage.clear(); - final CompoundTag registry = wrapper.get(Type.NBT, 0); + final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final ListTag chatTypes = ((CompoundTag) registry.get("minecraft:chat_type")).get("value"); for (final Tag chatType : chatTypes) { final CompoundTag chatTypeCompound = (CompoundTag) chatType; diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/Protocol1_20_2To1_20_3.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/Protocol1_20_2To1_20_3.java new file mode 100644 index 00000000..238af4a8 --- /dev/null +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/Protocol1_20_2To1_20_3.java @@ -0,0 +1,263 @@ +/* + * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards + * Copyright (C) 2023 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_3; + +import com.viaversion.viabackwards.api.BackwardsProtocol; +import com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_3.rewriter.EntityPacketRewriter1_20_3; +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; +import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType; +import com.viaversion.viaversion.api.protocol.packet.State; +import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; +import com.viaversion.viaversion.api.protocol.remapper.PacketHandlers; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.data.entity.EntityTrackerBase; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.Tag; +import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundConfigurationPackets1_20_2; +import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundPackets1_20_2; +import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundConfigurationPackets1_20_2; +import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ServerboundPackets1_20_2; +import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.Protocol1_20_3To1_20_2; +import java.util.BitSet; + +public final class Protocol1_20_2To1_20_3 extends BackwardsProtocol { + + private final EntityPacketRewriter1_20_3 entityRewriter = new EntityPacketRewriter1_20_3(this); + + public Protocol1_20_2To1_20_3() { + super(ClientboundPackets1_20_2.class, ClientboundPackets1_20_2.class, ServerboundPackets1_20_2.class, ServerboundPackets1_20_2.class); + } + + @Override + protected void registerPackets() { + super.registerPackets(); + + // Components are now (mostly) written as nbt instead of json strings + registerClientbound(ClientboundPackets1_20_2.ADVANCEMENTS, wrapper -> { + wrapper.passthrough(Type.BOOLEAN); // Reset/clear + final int size = wrapper.passthrough(Type.VAR_INT); // Mapping size + for (int i = 0; i < size; i++) { + wrapper.passthrough(Type.STRING); // Identifier + + // Parent + if (wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.STRING); + } + + // Display data + if (wrapper.passthrough(Type.BOOLEAN)) { + convertComponent(wrapper); // Title + convertComponent(wrapper); // Description + wrapper.passthrough(Type.ITEM1_20_2); // Icon + wrapper.passthrough(Type.VAR_INT); // Frame type + final int flags = wrapper.passthrough(Type.INT); + if ((flags & 1) != 0) { + wrapper.passthrough(Type.STRING); // Background texture + } + wrapper.passthrough(Type.FLOAT); // X + wrapper.passthrough(Type.FLOAT); // Y + } + + final int requirements = wrapper.passthrough(Type.VAR_INT); + for (int array = 0; array < requirements; array++) { + wrapper.passthrough(Type.STRING_ARRAY); + } + + wrapper.passthrough(Type.BOOLEAN); // Send telemetry + } + }); + registerClientbound(ClientboundPackets1_20_2.TAB_COMPLETE, wrapper -> { + wrapper.passthrough(Type.VAR_INT); // Transaction id + wrapper.passthrough(Type.VAR_INT); // Start + wrapper.passthrough(Type.VAR_INT); // Length + + final int suggestions = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < suggestions; i++) { + wrapper.passthrough(Type.STRING); // Suggestion + convertOptionalComponent(wrapper); // Tooltip + } + }); + registerClientbound(ClientboundPackets1_20_2.MAP_DATA, wrapper -> { + wrapper.passthrough(Type.VAR_INT); // Map id + wrapper.passthrough(Type.BYTE); // Scale + wrapper.passthrough(Type.BOOLEAN); // Locked + if (wrapper.passthrough(Type.BOOLEAN)) { + final int icons = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < icons; i++) { + wrapper.passthrough(Type.BYTE); // Type + wrapper.passthrough(Type.BYTE); // X + wrapper.passthrough(Type.BYTE); // Y + wrapper.passthrough(Type.BYTE); // Rotation + convertOptionalComponent(wrapper); // Display name + } + } + }); + registerClientbound(ClientboundPackets1_20_2.PLAYER_CHAT, wrapper -> { + wrapper.passthrough(Type.UUID); // Sender + wrapper.passthrough(Type.VAR_INT); // Index + wrapper.passthrough(Type.OPTIONAL_SIGNATURE_BYTES); // Signature + wrapper.passthrough(Type.STRING); // Plain content + wrapper.passthrough(Type.LONG); // Timestamp + wrapper.passthrough(Type.LONG); // Salt + + final int lastSeen = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < lastSeen; i++) { + final int index = wrapper.passthrough(Type.VAR_INT); + if (index == 0) { + wrapper.passthrough(Type.SIGNATURE_BYTES); + } + } + + convertOptionalComponent(wrapper); // Unsigned content + + final int filterMaskType = wrapper.passthrough(Type.VAR_INT); + if (filterMaskType == 2) { + wrapper.passthrough(Type.LONG_ARRAY_PRIMITIVE); // Mask + } + + wrapper.passthrough(Type.VAR_INT); // Chat type + convertComponent(wrapper); // Sender + convertOptionalComponent(wrapper); // Target + }); + registerClientbound(ClientboundPackets1_20_2.SCOREBOARD_OBJECTIVE, wrapper -> { + wrapper.passthrough(Type.STRING); // Objective Name + final byte action = wrapper.passthrough(Type.BYTE); // Mode + if (action == 0 || action == 2) { + convertComponent(wrapper); // Display Name + } + }); + registerClientbound(ClientboundPackets1_20_2.TEAMS, wrapper -> { + wrapper.passthrough(Type.STRING); // Team Name + final byte action = wrapper.passthrough(Type.BYTE); // Mode + if (action == 0 || action == 2) { + convertComponent(wrapper); // Display Name + wrapper.passthrough(Type.BYTE); // Flags + wrapper.passthrough(Type.STRING); // Name Tag Visibility + wrapper.passthrough(Type.STRING); // Collision rule + wrapper.passthrough(Type.VAR_INT); // Color + convertComponent(wrapper); // Prefix + convertComponent(wrapper); // Suffix + } + }); + + registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.DISCONNECT.getId(), ClientboundConfigurationPackets1_20_2.DISCONNECT.getId(), this::convertComponent); + registerClientbound(State.CONFIGURATION, ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), ClientboundConfigurationPackets1_20_2.RESOURCE_PACK.getId(), resourcePackHandler()); + registerClientbound(ClientboundPackets1_20_2.DISCONNECT, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.RESOURCE_PACK, resourcePackHandler()); + registerClientbound(ClientboundPackets1_20_2.SERVER_DATA, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.ACTIONBAR, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.TITLE_TEXT, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.TITLE_SUBTITLE, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.DISGUISED_CHAT, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.SYSTEM_CHAT, this::convertComponent); + registerClientbound(ClientboundPackets1_20_2.OPEN_WINDOW, new PacketHandlers() { + @Override + public void register() { + map(Type.VAR_INT); // Id + map(Type.VAR_INT); // Window Type + handler(wrapper -> convertComponent(wrapper)); + } + }); + registerClientbound(ClientboundPackets1_20_2.TAB_LIST, wrapper -> { + convertComponent(wrapper); + convertComponent(wrapper); + }); + + registerClientbound(ClientboundPackets1_20_2.COMBAT_KILL, new PacketHandlers() { + @Override + public void register() { + map(Type.VAR_INT); // Duration + handler(wrapper -> convertComponent(wrapper)); + } + }); + registerClientbound(ClientboundPackets1_20_2.PLAYER_INFO_UPDATE, wrapper -> { + final BitSet actions = wrapper.passthrough(Type.PROFILE_ACTIONS_ENUM); + final int entries = wrapper.passthrough(Type.VAR_INT); + for (int i = 0; i < entries; i++) { + wrapper.passthrough(Type.UUID); + if (actions.get(0)) { + wrapper.passthrough(Type.STRING); // Player Name + + final int properties = wrapper.passthrough(Type.VAR_INT); + for (int j = 0; j < properties; j++) { + wrapper.passthrough(Type.STRING); // Name + wrapper.passthrough(Type.STRING); // Value + wrapper.passthrough(Type.OPTIONAL_STRING); // Signature + } + } + if (actions.get(1) && wrapper.passthrough(Type.BOOLEAN)) { + wrapper.passthrough(Type.UUID); // Session UUID + wrapper.passthrough(Type.PROFILE_KEY); + } + if (actions.get(2)) { + wrapper.passthrough(Type.VAR_INT); // Gamemode + } + if (actions.get(3)) { + wrapper.passthrough(Type.BOOLEAN); // Listed + } + if (actions.get(4)) { + wrapper.passthrough(Type.VAR_INT); // Latency + } + if (actions.get(5)) { + convertOptionalComponent(wrapper); // Display name + } + } + }); + } + + private PacketHandler resourcePackHandler() { + return wrapper -> { + wrapper.passthrough(Type.STRING); // Url + wrapper.passthrough(Type.STRING); // Hash + wrapper.passthrough(Type.BOOLEAN); // Required + convertOptionalComponent(wrapper); + }; + } + + private void convertComponent(final PacketWrapper wrapper) throws Exception { + final Tag tag = wrapper.read(Type.TAG); + wrapper.write(Type.COMPONENT, Protocol1_20_3To1_20_2.tagComponentToJson(tag)); + } + + private void convertOptionalComponent(final PacketWrapper wrapper) throws Exception { + final Tag tag = wrapper.read(Type.OPTIONAL_TAG); + wrapper.write(Type.OPTIONAL_COMPONENT, Protocol1_20_3To1_20_2.tagComponentToJson(tag)); + } + + @Override + public void init(final UserConnection connection) { + addEntityTracker(connection, new EntityTrackerBase(connection, Entity1_19_4Types.PLAYER)); + } + + @Override + protected ServerboundPacketType serverboundFinishConfigurationPacket() { + return ServerboundConfigurationPackets1_20_2.FINISH_CONFIGURATION; + } + + @Override + protected ClientboundPacketType clientboundFinishConfigurationPacket() { + return ClientboundConfigurationPackets1_20_2.FINISH_CONFIGURATION; + } + + @Override + public EntityPacketRewriter1_20_3 getEntityRewriter() { + return entityRewriter; + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/rewriter/EntityPacketRewriter1_20_3.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/rewriter/EntityPacketRewriter1_20_3.java new file mode 100644 index 00000000..8e4df11c --- /dev/null +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20_2to1_20_3/rewriter/EntityPacketRewriter1_20_3.java @@ -0,0 +1,61 @@ +/* + * This file is part of ViaBackwards - https://github.com/ViaVersion/ViaBackwards + * Copyright (C) 2023 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_3.rewriter; + +import com.viaversion.viabackwards.api.rewriters.EntityRewriter; +import com.viaversion.viabackwards.protocol.protocol1_20_2to1_20_3.Protocol1_20_2To1_20_3; +import com.viaversion.viaversion.api.minecraft.entities.Entity1_19_4Types; +import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import com.viaversion.viaversion.api.minecraft.metadata.MetaType; +import com.viaversion.viaversion.api.type.types.version.Types1_20_2; +import com.viaversion.viaversion.api.type.types.version.Types1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_2to1_20.packet.ClientboundPackets1_20_2; +import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.Protocol1_20_3To1_20_2; + +public final class EntityPacketRewriter1_20_3 extends EntityRewriter { + + public EntityPacketRewriter1_20_3(final Protocol1_20_2To1_20_3 protocol) { + super(protocol); + } + + @Override + public void registerPackets() { + registerSpawnTracker(ClientboundPackets1_20_2.SPAWN_ENTITY); + registerMetadataRewriter(ClientboundPackets1_20_2.ENTITY_METADATA, Types1_20_3.METADATA_LIST, Types1_20_2.METADATA_LIST); + registerRemoveEntities(ClientboundPackets1_20_2.REMOVE_ENTITIES); + } + + @Override + protected void registerRewrites() { + filter().handler((event, meta) -> { + final MetaType type = meta.metaType(); + if (type == Types1_20_3.META_TYPES.componentType) { + meta.setTypeAndValue(Types1_20_2.META_TYPES.componentType, Protocol1_20_3To1_20_2.tagComponentToJson(meta.value())); + } else if (type == Types1_20_3.META_TYPES.optionalComponentType) { + meta.setTypeAndValue(Types1_20_2.META_TYPES.optionalComponentType, Protocol1_20_3To1_20_2.tagComponentToJson(meta.value())); + } else { + meta.setMetaType(Types1_20_2.META_TYPES.byId(type.typeId())); + } + }); + } + + @Override + public EntityType typeFromId(final int type) { + return Entity1_19_4Types.getTypeFromId(type); + } +} \ No newline at end of file diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java index 10d6374f..9c8e6d9d 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/Protocol1_20To1_20_2.java @@ -117,7 +117,7 @@ public final class Protocol1_20To1_20_2 extends BackwardsProtocol { wrapper.cancel(); - final CompoundTag registry = wrapper.read(Type.NAMELESS_NBT); + final CompoundTag registry = wrapper.read(Type.COMPOUND_TAG); entityPacketRewriter.trackBiomeSize(wrapper.user(), registry); entityPacketRewriter.cacheDimensionData(wrapper.user(), registry); wrapper.user().get(ConfigurationPacketStorage.class).setRegistry(registry); diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/BlockItemPacketRewriter1_20_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/BlockItemPacketRewriter1_20_2.java index d5b6e8f0..e7e8587e 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/BlockItemPacketRewriter1_20_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/BlockItemPacketRewriter1_20_2.java @@ -77,13 +77,13 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter { wrapper.passthrough(Type.VAR_INT); // Transaction id - wrapper.write(Type.NBT, wrapper.read(Type.NAMELESS_NBT)); + wrapper.write(Type.NAMED_COMPOUND_TAG, wrapper.read(Type.COMPOUND_TAG)); }); protocol.registerClientbound(ClientboundPackets1_20_2.BLOCK_ENTITY_DATA, wrapper -> { wrapper.passthrough(Type.POSITION1_14); // Position wrapper.passthrough(Type.VAR_INT); // Type - wrapper.write(Type.NBT, handleBlockEntity(wrapper.read(Type.NAMELESS_NBT))); + wrapper.write(Type.NAMED_COMPOUND_TAG, handleBlockEntity(wrapper.read(Type.COMPOUND_TAG))); }); protocol.registerClientbound(ClientboundPackets1_20_2.CHUNK_DATA, wrapper -> { diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/EntityPacketRewriter1_20_2.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/EntityPacketRewriter1_20_2.java index 5dbd6cb9..1816b8a3 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/EntityPacketRewriter1_20_2.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_20to1_20_2/rewriter/EntityPacketRewriter1_20_2.java @@ -125,7 +125,7 @@ public final class EntityPacketRewriter1_20_2 extends EntityRewriter { if (wrapper.get(Type.UNSIGNED_BYTE, 0) == 9) { Position position = wrapper.get(Type.POSITION, 0); - CompoundTag tag = wrapper.get(Type.NBT, 0); + CompoundTag tag = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); wrapper.clearPacket(); //Clear the packet diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_9_1_2to1_9_3_4/chunks/BlockEntity.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_9_1_2to1_9_3_4/chunks/BlockEntity.java index 66d03ac8..4b0fd9f0 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_9_1_2to1_9_3_4/chunks/BlockEntity.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_9_1_2to1_9_3_4/chunks/BlockEntity.java @@ -79,7 +79,7 @@ public class BlockEntity { PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_9_3.BLOCK_ENTITY_DATA, null, connection); wrapper.write(Type.POSITION, pos); wrapper.write(Type.UNSIGNED_BYTE, id); - wrapper.write(Type.NBT, tag); + wrapper.write(Type.NAMED_COMPOUND_TAG, tag); wrapper.scheduleSend(Protocol1_9_1_2To1_9_3_4.class, false); } } \ No newline at end of file diff --git a/gradle.properties b/gradle.properties index 02336742..76000989 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -projectVersion=4.8.1 +projectVersion=4.9.0-23w40a-SNAPSHOT # Smile emoji mcVersions=1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3b145adf..0f111ea9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ metadata.format.version = "1.1" [versions] # ViaVersion -viaver = "4.8.1-SNAPSHOT" +viaver = "4.9.0-23w40a-SNAPSHOT" # Common provided netty = "4.0.20.Final"