diff --git a/build.gradle.kts b/build.gradle.kts index ae2f722c..b217a49d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,7 +5,7 @@ plugins { allprojects { group = "com.viaversion" - version = "4.3.0-22w16b-SNAPSHOT" + version = "4.3.0-22w17a-SNAPSHOT" description = "Allow older clients to join newer server versions." } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java index 410ac720..e0a49568 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_15_2to1_16/Protocol1_15_2To1_16.java @@ -128,8 +128,8 @@ public class Protocol1_15_2To1_16 extends BackwardsProtocol { - // Transform int array to plain string - UUID uuid = wrapper.read(Type.UUID_INT_ARRAY); + // Transform uuid to plain string + UUID uuid = wrapper.read(Type.UUID); wrapper.write(Type.STRING, uuid.toString()); }); } diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java index ca0ff63e..87498825 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/Protocol1_18_2To1_19.java @@ -27,11 +27,17 @@ import com.viaversion.viabackwards.protocol.protocol1_18_2to1_19.packets.EntityP import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.Entity1_19Types; +import com.viaversion.viaversion.api.protocol.packet.State; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; import com.viaversion.viaversion.api.rewriter.ItemRewriter; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.data.entity.EntityTrackerBase; +import com.viaversion.viaversion.libs.gson.JsonElement; +import com.viaversion.viaversion.libs.kyori.adventure.text.Component; +import com.viaversion.viaversion.libs.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import com.viaversion.viaversion.protocols.base.ClientboundLoginPackets; +import com.viaversion.viaversion.protocols.base.ServerboundLoginPackets; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.ServerboundPackets1_17; import com.viaversion.viaversion.protocols.protocol1_18to1_17_1.ClientboundPackets1_18; import com.viaversion.viaversion.protocols.protocol1_19to1_18_2.ClientboundPackets1_19; @@ -40,9 +46,14 @@ import com.viaversion.viaversion.rewriter.CommandRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; +import java.time.Instant; +import java.util.UUID; + public final class Protocol1_18_2To1_19 extends BackwardsProtocol { public static final BackwardsMappings MAPPINGS = new BackwardsMappings(); + private static final UUID ZERO_UUID = new UUID(0, 0); + private static final byte[] EMPTY_BYTES = new byte[0]; private final EntityPackets1_19 entityRewriter = new EntityPackets1_19(this); private final BlockItemPackets1_19 blockItemPackets = new BlockItemPackets1_19(this); private final TranslatableRewriter translatableRewriter = new TranslatableRewriter(this); @@ -57,7 +68,6 @@ public final class Protocol1_18_2To1_19 extends BackwardsProtocol { + //TODO Handle chat formats once they're stable + final JsonElement senderName = wrapper.read(Type.COMPONENT); + wrapper.read(Type.LONG); // Timestamp + wrapper.read(Type.LONG); // Salt + wrapper.read(Type.BYTE_ARRAY_PRIMITIVE); // Signature + + final JsonElement element = wrapper.get(Type.COMPONENT, 0); + translatableRewriter.processText(element); + + Component component = GsonComponentSerializer.gson().deserializeFromTree(element); + component = Component.text().append(Component.text(" ")).append(component).build(); + wrapper.set(Type.COMPONENT, 0, GsonComponentSerializer.gson().serializeToTree(component)); + }); + } + }); + + registerClientbound(ClientboundPackets1_19.SYSTEM_CHAT, ClientboundPackets1_18.CHAT_MESSAGE, new PacketRemapper() { + @Override + public void registerMap() { + map(Type.COMPONENT); // Message + map(Type.BYTE); // Type + create(Type.UUID, ZERO_UUID); // Sender + handler(wrapper -> translatableRewriter.processText(wrapper.get(Type.COMPONENT, 0))); + } + }); + + registerServerbound(ServerboundPackets1_17.CHAT_MESSAGE, new PacketRemapper() { + @Override + public void registerMap() { + create(Type.LONG, Instant.now().getEpochSecond()); // Timestamp + map(Type.STRING); // Message + create(Type.LONG, 0L); // Salt + create(Type.BYTE_ARRAY_PRIMITIVE, EMPTY_BYTES); // Signature + } + }); + + // Login changes + registerClientbound(State.LOGIN, ClientboundLoginPackets.GAME_PROFILE.getId(), ClientboundLoginPackets.GAME_PROFILE.getId(), new PacketRemapper() { + @Override + public void registerMap() { + map(Type.UUID); // UUID + map(Type.STRING); // Name + handler(wrapper -> { + final int properties = wrapper.read(Type.VAR_INT); + for (int i = 0; i < properties; i++) { + wrapper.read(Type.STRING); // Name + wrapper.read(Type.STRING); // Value + if (wrapper.read(Type.BOOLEAN)) { + wrapper.read(Type.STRING); // Signature + } + } + }); + } + }); + + registerServerbound(State.LOGIN, ServerboundLoginPackets.HELLO.getId(), ServerboundLoginPackets.HELLO.getId(), new PacketRemapper() { + @Override + public void registerMap() { + map(Type.STRING); // Name + create(Type.BOOLEAN, false); // No public key - requiring this has to be disabled on the server + } + }); + + registerServerbound(State.LOGIN, ServerboundLoginPackets.ENCRYPTION_KEY.getId(), ServerboundLoginPackets.ENCRYPTION_KEY.getId(), new PacketRemapper() { + @Override + public void registerMap() { + map(Type.BYTE_ARRAY_PRIMITIVE); // Keys + create(Type.BOOLEAN, true); // Is nonce + } + }); } @Override diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java index ef15575d..cfae2363 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/protocol1_18_2to1_19/packets/EntityPackets1_19.java @@ -230,6 +230,9 @@ public final class EntityPackets1_19 extends EntityRewriter