From a6e708c98ee9b872cfc7866c74babe1ea908442d Mon Sep 17 00:00:00 2001 From: Andrew Steinborn Date: Tue, 20 Oct 2020 14:26:08 -0400 Subject: [PATCH] Fix Adventure sendActionBar implementation and add proper action bar sending for 1.16.2 --- .../proxy/connection/client/ConnectedPlayer.java | 13 ++++++++++--- .../velocitypowered/proxy/protocol/packet/Chat.java | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java index 9672f3918..27f705c54 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java @@ -281,11 +281,18 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { @Override public void sendActionBar(net.kyori.adventure.text.@NonNull Component message) { - if (getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_11) >= 0) { + ProtocolVersion playerVersion = getProtocolVersion(); + if (playerVersion.compareTo(ProtocolVersion.MINECRAFT_1_16_2) >= 0) { + // We do not need to use the title packets in 1.16.2+ + // https://bugs.mojang.com/browse/MC-119145 + Chat chat = Chat.createClientbound(Identity.nil(), message, getProtocolVersion()); + chat.setType(Chat.ACTION_TYPE); + connection.write(chat); + } else if (playerVersion.compareTo(ProtocolVersion.MINECRAFT_1_11) >= 0) { // We can use the title packet instead. TitlePacket pkt = new TitlePacket(); pkt.setAction(TitlePacket.SET_ACTION_BAR); - pkt.setComponent(ProtocolUtils.getJsonChatSerializer(this.getProtocolVersion()) + pkt.setComponent(ProtocolUtils.getJsonChatSerializer(playerVersion) .serialize(message)); connection.write(pkt); } else { @@ -295,7 +302,7 @@ public class ConnectedPlayer implements MinecraftConnectionAssociation, Player { object.addProperty("text", LegacyComponentSerializer.legacySection().serialize(message)); Chat chat = new Chat(); chat.setMessage(object.toString()); - chat.setType((byte) 1); + chat.setType(Chat.ACTION_TYPE); connection.write(chat); } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java index 74f0a627d..8fbbc0f7f 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/Chat.java @@ -15,6 +15,7 @@ public class Chat implements MinecraftPacket { public static final byte CHAT_TYPE = (byte) 0; public static final byte SYSTEM_TYPE = (byte) 1; + public static final byte ACTION_TYPE = (byte) 2; public static final int MAX_SERVERBOUND_MESSAGE_LENGTH = 256; public static final UUID EMPTY_SENDER = new UUID(0, 0);