From 916b10e0873be10c82677adc16f6920b3e8f5a5d Mon Sep 17 00:00:00 2001 From: Nanit Date: Sun, 31 Oct 2021 19:13:30 +0200 Subject: [PATCH] Fixed titles encoding --- .../limbo/connection/ClientConnection.java | 16 +++++++++++----- .../packets/play/PacketTitleLegacy.java | 12 +++++++++--- .../nanit/limbo/protocol/registry/State.java | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/src/main/java/ru/nanit/limbo/connection/ClientConnection.java b/src/main/java/ru/nanit/limbo/connection/ClientConnection.java index 3814fda..e9779c2 100644 --- a/src/main/java/ru/nanit/limbo/connection/ClientConnection.java +++ b/src/main/java/ru/nanit/limbo/connection/ClientConnection.java @@ -221,7 +221,7 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { writePacket(PACKET_JOIN_MESSAGE); if (PACKET_TITLE_TITLE != null) - sendTitle(); + writeTitle(); sendKeepAlive(); } @@ -234,15 +234,15 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { } } - public void sendTitle() { + public void writeTitle() { if (clientVersion.moreOrEqual(Version.V1_17)) { writePacket(PACKET_TITLE_TITLE); writePacket(PACKET_TITLE_SUBTITLE); - sendPacket(PACKET_TITLE_TIMES); + writePacket(PACKET_TITLE_TIMES); } else { writePacket(PACKET_TITLE_LEGACY_TITLE); writePacket(PACKET_TITLE_LEGACY_SUBTITLE); - sendPacket(PACKET_TITLE_LEGACY_TIMES); + writePacket(PACKET_TITLE_LEGACY_TIMES); } } @@ -265,7 +265,8 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { } public void writePacket(Object packet) { - if (isConnected()) channel.write(packet, channel.voidPromise()); + if (isConnected()) + channel.write(packet, channel.voidPromise()); } public boolean isConnected() { @@ -395,8 +396,13 @@ public class ClientConnection extends ChannelInboundHandlerAdapter { packetTimes.setFadeOut(title.getFadeOut()); legacyTitle.setTitle(title); + legacyTitle.setAction(PacketTitleLegacy.Action.SET_TITLE); + legacySubtitle.setTitle(title); + legacySubtitle.setAction(PacketTitleLegacy.Action.SET_SUBTITLE); + legacyTimes.setTitle(title); + legacyTimes.setAction(PacketTitleLegacy.Action.SET_TIMES_AND_DISPLAY); PACKET_TITLE_TITLE = PreEncodedPacket.of(packetTitle); PACKET_TITLE_SUBTITLE = PreEncodedPacket.of(packetSubtitle); diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketTitleLegacy.java b/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketTitleLegacy.java index ea1ffd6..cb7458f 100644 --- a/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketTitleLegacy.java +++ b/src/main/java/ru/nanit/limbo/protocol/packets/play/PacketTitleLegacy.java @@ -50,16 +50,22 @@ public class PacketTitleLegacy implements PacketOut { public enum Action { SET_TITLE(0), SET_SUBTITLE(1), - SET_TIMES_AND_DISPLAY(3); + SET_TIMES_AND_DISPLAY(3, 2); private final int id; + private final int legacyId; + + Action(int id, int legacyId) { + this.id = id; + this.legacyId = legacyId; + } Action(int id) { - this.id = id; + this(id, id); } public int getId(Version version) { - return version.moreOrEqual(Version.V1_11) && id > 2 ? id - 1 : id; + return version.less(Version.V1_11) ? legacyId : id; } } } diff --git a/src/main/java/ru/nanit/limbo/protocol/registry/State.java b/src/main/java/ru/nanit/limbo/protocol/registry/State.java index 5478852..7713702 100644 --- a/src/main/java/ru/nanit/limbo/protocol/registry/State.java +++ b/src/main/java/ru/nanit/limbo/protocol/registry/State.java @@ -144,6 +144,24 @@ public enum State { map(0x32, V1_16_2, V1_16_4), map(0x36, V1_17, V1_17_1) ); + clientBound.register(PacketTitleLegacy::new, + map(0x45, V1_8, V1_11_1), + map(0x47, V1_12, V1_12), + map(0x48, V1_12_1, V1_12_2), + map(0x4B, V1_13, V1_13_2), + map(0x4F, V1_14, V1_14_4), + map(0x50, V1_15, V1_15_2), + map(0x4F, V1_16, V1_16_4) + ); + clientBound.register(PacketTitleSetTitle::new, + map(0x59, V1_17, V1_17_1) + ); + clientBound.register(PacketTitleSetSubTitle::new, + map(0x57, V1_17, V1_17_1) + ); + clientBound.register(PacketTitleTimes::new, + map(0x5A, V1_17, V1_17_1) + ); } };