3
0
Mirror von https://github.com/PaperMC/Velocity.git synchronisiert 2024-11-16 21:10:30 +01:00

Fixed client brand handling for players with versions 1.20.2 or higher (#1223)

This commit fixes the sending of the client brand to the backend server and the execution of the PlayerClientBrandEvent from players with versions 1.20.2 or higher
Dieser Commit ist enthalten in:
Adrian 2024-01-29 09:13:17 -05:00 committet von GitHub
Ursprung 4080ee2eaa
Commit 38558783bb
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: B5690EEEBB952194

Datei anzeigen

@ -114,19 +114,17 @@ public class ClientConfigSessionHandler implements MinecraftSessionHandler {
} }
@Override @Override
public boolean handle(PluginMessagePacket packet) { public boolean handle(final PluginMessagePacket packet) {
VelocityServerConnection serverConn = player.getConnectionInFlight(); final VelocityServerConnection serverConn = player.getConnectionInFlight();
if (serverConn != null) { if (PluginMessageUtil.isMcBrand(packet)) {
if (PluginMessageUtil.isMcBrand(packet)) { final String brand = PluginMessageUtil.readBrandMessage(packet.content());
String brand = PluginMessageUtil.readBrandMessage(packet.content()); server.getEventManager().fireAndForget(new PlayerClientBrandEvent(player, brand));
server.getEventManager().fireAndForget(new PlayerClientBrandEvent(player, brand)); player.setClientBrand(brand);
player.setClientBrand(brand); brandChannel = packet.getChannel();
brandChannel = packet.getChannel(); // Client sends `minecraft:brand` packet immediately after Login,
// Client sends `minecraft:brand` packet immediately after Login, // but at this time the backend server may not be ready
// but at this time the backend server may not be ready } else if (serverConn != null) {
} else { serverConn.ensureConnected().write(packet.retain());
serverConn.ensureConnected().write(packet.retain());
}
} }
return true; return true;
} }
@ -158,13 +156,13 @@ public class ClientConfigSessionHandler implements MinecraftSessionHandler {
@Override @Override
public void handleUnknown(ByteBuf buf) { public void handleUnknown(ByteBuf buf) {
VelocityServerConnection serverConnection = player.getConnectedServer(); final VelocityServerConnection serverConnection = player.getConnectedServer();
if (serverConnection == null) { if (serverConnection == null) {
// No server connection yet, probably transitioning. // No server connection yet, probably transitioning.
return; return;
} }
MinecraftConnection smc = serverConnection.getConnection(); final MinecraftConnection smc = serverConnection.getConnection();
if (smc != null && !smc.isClosed() && serverConnection.getPhase().consideredComplete()) { if (smc != null && !smc.isClosed() && serverConnection.getPhase().consideredComplete()) {
smc.write(buf.retain()); smc.write(buf.retain());
} }
@ -188,13 +186,13 @@ public class ClientConfigSessionHandler implements MinecraftSessionHandler {
* @return a future that completes when the config stage is finished * @return a future that completes when the config stage is finished
*/ */
public CompletableFuture<Void> handleBackendFinishUpdate(VelocityServerConnection serverConn) { public CompletableFuture<Void> handleBackendFinishUpdate(VelocityServerConnection serverConn) {
MinecraftConnection smc = serverConn.ensureConnected(); final MinecraftConnection smc = serverConn.ensureConnected();
String brand = serverConn.getPlayer().getClientBrand(); final String brand = serverConn.getPlayer().getClientBrand();
if (brand != null && brandChannel != null) { if (brand != null && brandChannel != null) {
ByteBuf buf = Unpooled.buffer(); final ByteBuf buf = Unpooled.buffer();
ProtocolUtils.writeString(buf, brand); ProtocolUtils.writeString(buf, brand);
PluginMessagePacket brandPacket = new PluginMessagePacket(brandChannel, buf); final PluginMessagePacket brandPacket = new PluginMessagePacket(brandChannel, buf);
smc.write(brandPacket); smc.write(brandPacket);
} }