geforkt von Mirrors/Velocity
Fix disconnect issues in 1.7-specific logic.
Dieser Commit ist enthalten in:
Ursprung
8a16db3794
Commit
9a0affbca9
@ -223,20 +223,21 @@ public class MinecraftConnection extends ChannelInboundHandlerAdapter {
|
||||
*/
|
||||
public void closeWith(Object msg) {
|
||||
if (channel.isActive()) {
|
||||
boolean is1Point8 = this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) >= 0;
|
||||
boolean isLegacyOrPing = this.getState() == StateRegistry.HANDSHAKE
|
||||
|| this.getState() == StateRegistry.STATUS;
|
||||
if (channel.eventLoop().inEventLoop() && (is1Point8 || isLegacyOrPing)) {
|
||||
boolean is1_7 = this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_8) < 0
|
||||
&& this.getProtocolVersion().compareTo(ProtocolVersion.MINECRAFT_1_7_2) >= 0;
|
||||
if (is1_7) {
|
||||
channel.eventLoop().execute(() -> {
|
||||
// 1.7.x versions have a race condition with switching protocol states, so just explicitly
|
||||
// close the connection after a short while.
|
||||
this.setAutoReading(false);
|
||||
channel.eventLoop().schedule(() -> {
|
||||
knownDisconnect = true;
|
||||
channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE);
|
||||
}, 250, TimeUnit.MILLISECONDS);
|
||||
});
|
||||
} else {
|
||||
knownDisconnect = true;
|
||||
channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE);
|
||||
} else {
|
||||
// 1.7.x versions have a race condition with switching protocol states, so just explicitly
|
||||
// close the connection after a short while.
|
||||
this.setAutoReading(false);
|
||||
channel.eventLoop().schedule(() -> {
|
||||
knownDisconnect = true;
|
||||
channel.writeAndFlush(msg).addListener(ChannelFutureListener.CLOSE);
|
||||
}, 250, TimeUnit.MILLISECONDS);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -208,7 +208,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
||||
onlineMode);
|
||||
final GameProfile finalProfile = profile;
|
||||
|
||||
server.getEventManager().fire(profileRequestEvent).thenCompose(profileEvent -> {
|
||||
server.getEventManager().fire(profileRequestEvent).thenComposeAsync(profileEvent -> {
|
||||
if (mcConnection.isClosed()) {
|
||||
// The player disconnected after we authenticated them.
|
||||
return CompletableFuture.completedFuture(null);
|
||||
@ -234,7 +234,7 @@ public class LoginSessionHandler implements MinecraftSessionHandler {
|
||||
completeLoginProtocolPhaseAndInitialize(player);
|
||||
}
|
||||
}, mcConnection.eventLoop());
|
||||
}).exceptionally((ex) -> {
|
||||
}, mcConnection.eventLoop()).exceptionally((ex) -> {
|
||||
logger.error("Exception during connection of {}", finalProfile, ex);
|
||||
return null;
|
||||
});
|
||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren