Fixed titles encoding

This commit is contained in:
Nanit 2021-10-31 19:13:30 +02:00
parent 790a1b414b
commit 916b10e087
3 changed files with 38 additions and 8 deletions

View File

@ -221,7 +221,7 @@ public class ClientConnection extends ChannelInboundHandlerAdapter {
writePacket(PACKET_JOIN_MESSAGE); writePacket(PACKET_JOIN_MESSAGE);
if (PACKET_TITLE_TITLE != null) if (PACKET_TITLE_TITLE != null)
sendTitle(); writeTitle();
sendKeepAlive(); sendKeepAlive();
} }
@ -234,15 +234,15 @@ public class ClientConnection extends ChannelInboundHandlerAdapter {
} }
} }
public void sendTitle() { public void writeTitle() {
if (clientVersion.moreOrEqual(Version.V1_17)) { if (clientVersion.moreOrEqual(Version.V1_17)) {
writePacket(PACKET_TITLE_TITLE); writePacket(PACKET_TITLE_TITLE);
writePacket(PACKET_TITLE_SUBTITLE); writePacket(PACKET_TITLE_SUBTITLE);
sendPacket(PACKET_TITLE_TIMES); writePacket(PACKET_TITLE_TIMES);
} else { } else {
writePacket(PACKET_TITLE_LEGACY_TITLE); writePacket(PACKET_TITLE_LEGACY_TITLE);
writePacket(PACKET_TITLE_LEGACY_SUBTITLE); 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) { public void writePacket(Object packet) {
if (isConnected()) channel.write(packet, channel.voidPromise()); if (isConnected())
channel.write(packet, channel.voidPromise());
} }
public boolean isConnected() { public boolean isConnected() {
@ -395,8 +396,13 @@ public class ClientConnection extends ChannelInboundHandlerAdapter {
packetTimes.setFadeOut(title.getFadeOut()); packetTimes.setFadeOut(title.getFadeOut());
legacyTitle.setTitle(title); legacyTitle.setTitle(title);
legacyTitle.setAction(PacketTitleLegacy.Action.SET_TITLE);
legacySubtitle.setTitle(title); legacySubtitle.setTitle(title);
legacySubtitle.setAction(PacketTitleLegacy.Action.SET_SUBTITLE);
legacyTimes.setTitle(title); legacyTimes.setTitle(title);
legacyTimes.setAction(PacketTitleLegacy.Action.SET_TIMES_AND_DISPLAY);
PACKET_TITLE_TITLE = PreEncodedPacket.of(packetTitle); PACKET_TITLE_TITLE = PreEncodedPacket.of(packetTitle);
PACKET_TITLE_SUBTITLE = PreEncodedPacket.of(packetSubtitle); PACKET_TITLE_SUBTITLE = PreEncodedPacket.of(packetSubtitle);

View File

@ -50,16 +50,22 @@ public class PacketTitleLegacy implements PacketOut {
public enum Action { public enum Action {
SET_TITLE(0), SET_TITLE(0),
SET_SUBTITLE(1), SET_SUBTITLE(1),
SET_TIMES_AND_DISPLAY(3); SET_TIMES_AND_DISPLAY(3, 2);
private final int id; private final int id;
private final int legacyId;
Action(int id, int legacyId) {
this.id = id;
this.legacyId = legacyId;
}
Action(int id) { Action(int id) {
this.id = id; this(id, id);
} }
public int getId(Version version) { public int getId(Version version) {
return version.moreOrEqual(Version.V1_11) && id > 2 ? id - 1 : id; return version.less(Version.V1_11) ? legacyId : id;
} }
} }
} }

View File

@ -144,6 +144,24 @@ public enum State {
map(0x32, V1_16_2, V1_16_4), map(0x32, V1_16_2, V1_16_4),
map(0x36, V1_17, V1_17_1) 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)
);
} }
}; };