From b411a0fa09f76aec062921b77642828408f0099f Mon Sep 17 00:00:00 2001 From: Timon Seidel Date: Wed, 30 Apr 2025 21:44:12 +0200 Subject: [PATCH] chore: bump adventure to 4.21.0 (#1564) feat: support for 1.21.5+ hover and click events --- .../api/network/ProtocolVersion.java | 2 +- gradle/libs.versions.toml | 4 +- .../proxy/protocol/ProtocolUtils.java | 39 +++++++++++++++---- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java index 346a43c7..481442b6 100644 --- a/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java +++ b/api/src/main/java/com/velocitypowered/api/network/ProtocolVersion.java @@ -90,7 +90,7 @@ public enum ProtocolVersion implements Ordered { MINECRAFT_1_21(767, "1.21", "1.21.1"), MINECRAFT_1_21_2(768, "1.21.2", "1.21.3"), MINECRAFT_1_21_4(769, "1.21.4"), - MINECRAFT_1_21_5(770, /*1073742067,*/ "1.21.5"); + MINECRAFT_1_21_5(770, "1.21.5"); private static final int SNAPSHOT_BIT = 30; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3a867802..9b7e2683 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,8 +11,8 @@ shadow = "io.github.goooler.shadow:8.1.5" spotless = "com.diffplug.spotless:6.25.0" [libraries] -adventure-bom = "net.kyori:adventure-bom:4.20.0" -adventure-text-serializer-json-legacy-impl = "net.kyori:adventure-text-serializer-json-legacy-impl:4.20.0" +adventure-bom = "net.kyori:adventure-bom:4.21.0" +adventure-text-serializer-json-legacy-impl = "net.kyori:adventure-text-serializer-json-legacy-impl:4.21.0" adventure-facet = "net.kyori:adventure-platform-facet:4.3.4" asm = "org.ow2.asm:asm:9.7.1" auto-service = "com.google.auto.service:auto-service:1.0.1" diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java index ca63c1e5..c94f1ed1 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/ProtocolUtils.java @@ -47,7 +47,7 @@ import net.kyori.adventure.nbt.CompoundBinaryTag; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.kyori.adventure.text.serializer.json.JSONOptions; import net.kyori.adventure.text.serializer.json.legacyimpl.NBTLegacyHoverEventSerializer; -import net.kyori.option.OptionState; +import net.kyori.option.OptionSchema; /** * Utilities for writing and reading data in the Minecraft protocol. @@ -60,10 +60,10 @@ public enum ProtocolUtils { .downsampleColors() .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()) .options( - OptionState.optionState() + OptionSchema.globalSchema().stateBuilder() // before 1.16 .value(JSONOptions.EMIT_RGB, Boolean.FALSE) - .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.LEGACY_ONLY) + .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.VALUE_FIELD) // before 1.20.3 .value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE) .value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE) @@ -75,10 +75,11 @@ public enum ProtocolUtils { GsonComponentSerializer.builder() .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()) .options( - OptionState.optionState() + OptionSchema.globalSchema().stateBuilder() // after 1.16 .value(JSONOptions.EMIT_RGB, Boolean.TRUE) - .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.MODERN_ONLY) + .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE) + .value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE) // before 1.20.3 .value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.FALSE) .value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.FALSE) @@ -86,17 +87,36 @@ public enum ProtocolUtils { .build() ) .build(); + private static final GsonComponentSerializer PRE_1_21_5_SERIALIZER = + GsonComponentSerializer.builder() + .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()) + .options( + OptionSchema.globalSchema().stateBuilder() + // after 1.16 + .value(JSONOptions.EMIT_RGB, Boolean.TRUE) + .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.CAMEL_CASE) + .value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.CAMEL_CASE) + // after 1.20.3 + .value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.TRUE) + .value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.TRUE) + .value(JSONOptions.VALIDATE_STRICT_EVENTS, Boolean.TRUE) + .build() + ) + .build(); private static final GsonComponentSerializer MODERN_SERIALIZER = GsonComponentSerializer.builder() .legacyHoverEventSerializer(NBTLegacyHoverEventSerializer.get()) .options( - OptionState.optionState() + OptionSchema.globalSchema().stateBuilder() // after 1.16 .value(JSONOptions.EMIT_RGB, Boolean.TRUE) - .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.MODERN_ONLY) + .value(JSONOptions.EMIT_HOVER_EVENT_TYPE, JSONOptions.HoverEventValueMode.SNAKE_CASE) + .value(JSONOptions.EMIT_CLICK_EVENT_TYPE, JSONOptions.ClickEventValueMode.SNAKE_CASE) // after 1.20.3 .value(JSONOptions.EMIT_COMPACT_TEXT_COMPONENT, Boolean.TRUE) .value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_ID_AS_INT_ARRAY, Boolean.TRUE) + // after 1.21.5 + .value(JSONOptions.EMIT_HOVER_SHOW_ENTITY_KEY_AS_TYPE_AND_UUID_AS_ID, Boolean.FALSE) .value(JSONOptions.VALIDATE_STRICT_EVENTS, Boolean.TRUE) .build() ) @@ -713,9 +733,12 @@ public enum ProtocolUtils { * @return the appropriate {@link GsonComponentSerializer} */ public static GsonComponentSerializer getJsonChatSerializer(ProtocolVersion version) { - if (version.noLessThan(ProtocolVersion.MINECRAFT_1_20_3)) { + if (version.noLessThan(ProtocolVersion.MINECRAFT_1_21_5)) { return MODERN_SERIALIZER; } + if (version.noLessThan(ProtocolVersion.MINECRAFT_1_20_3)) { + return PRE_1_21_5_SERIALIZER; + } if (version.noLessThan(ProtocolVersion.MINECRAFT_1_16)) { return PRE_1_20_3_SERIALIZER; }