Skip to content

Commit 2cf18b0

Browse files
authored
Fix login disconnect from 1.20.4 (#1245)
1 parent ecf936f commit 2cf18b0

File tree

5 files changed

+23
-18
lines changed

5 files changed

+23
-18
lines changed

proxy/src/main/java/com/velocitypowered/proxy/connection/backend/BackendPlaySessionHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,8 @@ public void disconnected() {
399399
if (server.getConfiguration().isFailoverOnUnexpectedServerDisconnect()) {
400400
serverConn.getPlayer().handleConnectionException(serverConn.getServer(),
401401
DisconnectPacket.create(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR,
402-
serverConn.getPlayer().getProtocolVersion(), false), true);
402+
serverConn.getPlayer().getProtocolVersion(),
403+
serverConn.getPlayer().getConnection().getState()), true);
403404
} else {
404405
serverConn.getPlayer().disconnect(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
405406
}

proxy/src/main/java/com/velocitypowered/proxy/connection/client/ConnectedPlayer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -606,7 +606,7 @@ public void disconnect0(Component reason, boolean duringLogin) {
606606
logger.info(Component.text(this + " has disconnected: ").append(translated));
607607
}
608608
connection.closeWith(DisconnectPacket.create(translated,
609-
this.getProtocolVersion(), duringLogin));
609+
this.getProtocolVersion(), connection.getState()));
610610
}
611611

612612
public @Nullable VelocityServerConnection getConnectedServer() {
@@ -775,7 +775,7 @@ private void handleKickEvent(KickedFromServerEvent originalEvent, Component frie
775775
Component reason = status.getReasonComponent()
776776
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
777777
handleConnectionException(res.getServer(),
778-
DisconnectPacket.create(reason, getProtocolVersion(), false),
778+
DisconnectPacket.create(reason, getProtocolVersion(), connection.getState()),
779779
((Impl) status).isSafe());
780780
break;
781781
case SUCCESS:
@@ -1276,7 +1276,7 @@ public CompletableFuture<Boolean> connectWithIndication() {
12761276
Component reason = status.getReasonComponent()
12771277
.orElse(ConnectionMessages.INTERNAL_SERVER_CONNECTION_ERROR);
12781278
handleConnectionException(toConnect,
1279-
DisconnectPacket.create(reason, getProtocolVersion(), false), status.isSafe());
1279+
DisconnectPacket.create(reason, getProtocolVersion(), connection.getState()), status.isSafe());
12801280
break;
12811281
default:
12821282
// The only remaining value is successful (no need to do anything!)

proxy/src/main/java/com/velocitypowered/proxy/connection/client/InitialInboundConnection.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ public void disconnect(Component reason) {
9898
if (connection.server.getConfiguration().isLogPlayerConnections()) {
9999
logger.info(Component.text(this + " has disconnected: ").append(translated));
100100
}
101-
connection.closeWith(DisconnectPacket.create(translated, getProtocolVersion(), true));
101+
connection.closeWith(DisconnectPacket.create(translated, getProtocolVersion(), connection.getState()));
102102
}
103103

104104
/**
@@ -109,6 +109,6 @@ public void disconnect(Component reason) {
109109
public void disconnectQuietly(Component reason) {
110110
Component translated = GlobalTranslator.render(reason, ClosestLocaleMatcher.INSTANCE
111111
.lookupClosest(Locale.getDefault()));
112-
connection.closeWith(DisconnectPacket.create(translated, getProtocolVersion(), true));
112+
connection.closeWith(DisconnectPacket.create(translated, getProtocolVersion(), connection.getState()));
113113
}
114114
}

proxy/src/main/java/com/velocitypowered/proxy/protocol/StateRegistry.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ public enum StateRegistry {
161161
PluginMessagePacket.class, PluginMessagePacket::new,
162162
map(0x00, MINECRAFT_1_20_2, false));
163163
clientbound.register(
164-
DisconnectPacket.class, () -> new DisconnectPacket(false),
164+
DisconnectPacket.class, () -> new DisconnectPacket(this),
165165
map(0x01, MINECRAFT_1_20_2, false));
166166
clientbound.register(
167167
FinishedUpdatePacket.class, () -> FinishedUpdatePacket.INSTANCE,
@@ -354,7 +354,7 @@ public enum StateRegistry {
354354
map(0x18, MINECRAFT_1_20_2, false));
355355
clientbound.register(
356356
DisconnectPacket.class,
357-
() -> new DisconnectPacket(false),
357+
() -> new DisconnectPacket(this),
358358
map(0x40, MINECRAFT_1_7_2, false),
359359
map(0x1A, MINECRAFT_1_9, false),
360360
map(0x1B, MINECRAFT_1_13, false),
@@ -595,7 +595,7 @@ public enum StateRegistry {
595595
map(0x03, MINECRAFT_1_20_2, false));
596596

597597
clientbound.register(
598-
DisconnectPacket.class, () -> new DisconnectPacket(true),
598+
DisconnectPacket.class, () -> new DisconnectPacket(this),
599599
map(0x00, MINECRAFT_1_7_2, false));
600600
clientbound.register(
601601
EncryptionRequestPacket.class, EncryptionRequestPacket::new,
@@ -795,7 +795,8 @@ public static final class PacketMapping {
795795
private final @Nullable ProtocolVersion lastValidProtocolVersion;
796796

797797
PacketMapping(int id, ProtocolVersion protocolVersion,
798-
ProtocolVersion lastValidProtocolVersion, boolean packetDecoding) {
798+
@Nullable ProtocolVersion lastValidProtocolVersion,
799+
boolean packetDecoding) {
799800
this.id = id;
800801
this.protocolVersion = protocolVersion;
801802
this.lastValidProtocolVersion = lastValidProtocolVersion;

proxy/src/main/java/com/velocitypowered/proxy/protocol/packet/DisconnectPacket.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import com.velocitypowered.proxy.connection.MinecraftSessionHandler;
2323
import com.velocitypowered.proxy.protocol.MinecraftPacket;
2424
import com.velocitypowered.proxy.protocol.ProtocolUtils;
25+
import com.velocitypowered.proxy.protocol.StateRegistry;
2526
import com.velocitypowered.proxy.protocol.packet.chat.ComponentHolder;
2627
import io.netty.buffer.ByteBuf;
2728
import net.kyori.adventure.text.Component;
@@ -30,14 +31,14 @@
3031
public class DisconnectPacket implements MinecraftPacket {
3132

3233
private @Nullable ComponentHolder reason;
33-
private final boolean login;
34+
private final StateRegistry state;
3435

35-
public DisconnectPacket(boolean login) {
36-
this.login = login;
36+
public DisconnectPacket(StateRegistry state) {
37+
this.state = state;
3738
}
3839

39-
private DisconnectPacket(boolean login, ComponentHolder reason) {
40-
this.login = login;
40+
private DisconnectPacket(StateRegistry state, ComponentHolder reason) {
41+
this.state = state;
4142
this.reason = Preconditions.checkNotNull(reason, "reason");
4243
}
4344

@@ -61,7 +62,8 @@ public String toString() {
6162

6263
@Override
6364
public void decode(ByteBuf buf, ProtocolUtils.Direction direction, ProtocolVersion version) {
64-
reason = ComponentHolder.read(buf, login ? ProtocolVersion.MINECRAFT_1_20_2 : version);
65+
reason = ComponentHolder.read(buf, state == StateRegistry.LOGIN
66+
? ProtocolVersion.MINECRAFT_1_20_2 : version);
6567
}
6668

6769
@Override
@@ -74,8 +76,9 @@ public boolean handle(MinecraftSessionHandler handler) {
7476
return handler.handle(this);
7577
}
7678

77-
public static DisconnectPacket create(Component component, ProtocolVersion version, boolean login) {
79+
public static DisconnectPacket create(Component component, ProtocolVersion version, StateRegistry state) {
7880
Preconditions.checkNotNull(component, "component");
79-
return new DisconnectPacket(login, new ComponentHolder(login ? ProtocolVersion.MINECRAFT_1_20_2 : version, component));
81+
return new DisconnectPacket(state, new ComponentHolder(state == StateRegistry.LOGIN
82+
? ProtocolVersion.MINECRAFT_1_20_2 : version, component));
8083
}
8184
}

0 commit comments

Comments
 (0)