diff --git a/api/src/main/java/com/velocitypowered/api/event/player/ServerConnectedEvent.java b/api/src/main/java/com/velocitypowered/api/event/player/ServerConnectedEvent.java index 2cd5f3eaf..0609798c1 100644 --- a/api/src/main/java/com/velocitypowered/api/event/player/ServerConnectedEvent.java +++ b/api/src/main/java/com/velocitypowered/api/event/player/ServerConnectedEvent.java @@ -3,6 +3,8 @@ package com.velocitypowered.api.event.player; import com.google.common.base.Preconditions; import com.velocitypowered.api.proxy.Player; import com.velocitypowered.api.proxy.server.RegisteredServer; +import java.util.Optional; +import org.checkerframework.checker.nullness.qual.Nullable; /** * This event is fired once the player has successfully connected to the target server and the @@ -12,10 +14,24 @@ public final class ServerConnectedEvent { private final Player player; private final RegisteredServer server; + private final @Nullable RegisteredServer previousServer; - public ServerConnectedEvent(Player player, RegisteredServer server) { + /** + * Constructs a ServerConnectedEvent. + * @param player the player that was connected + * @param server the server the player was connected to + * @param previousServer the server the player was previously connected to, null if none + */ + public ServerConnectedEvent(Player player, RegisteredServer server, + @Nullable RegisteredServer previousServer) { this.player = Preconditions.checkNotNull(player, "player"); this.server = Preconditions.checkNotNull(server, "server"); + this.previousServer = previousServer; + } + + @Deprecated + public ServerConnectedEvent(Player player, RegisteredServer server) { + this(player, server, null); } public Player getPlayer() { @@ -26,11 +42,16 @@ public final class ServerConnectedEvent { return server; } + public Optional getPreviousServer() { + return Optional.ofNullable(previousServer); + } + @Override public String toString() { return "ServerConnectedEvent{" + "player=" + player + ", server=" + server + + ", previousServer=" + previousServer + '}'; } } diff --git a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java index 1c6a0b05b..c5eb9d8d6 100644 --- a/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java +++ b/proxy/src/main/java/com/velocitypowered/proxy/connection/backend/TransitionSessionHandler.java @@ -80,7 +80,8 @@ public class TransitionSessionHandler implements MinecraftSessionHandler { // The goods are in hand! We got JoinGame. Let's transition completely to the new state. smc.setAutoReading(false); server.getEventManager() - .fire(new ServerConnectedEvent(serverConn.getPlayer(), serverConn.getServer())) + .fire(new ServerConnectedEvent(serverConn.getPlayer(), serverConn.getServer(), + existingConnection != null ? existingConnection.getServer() : null)) .whenCompleteAsync((x, error) -> { // Strap on the ClientPlaySessionHandler if required. ClientPlaySessionHandler playHandler;