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..c38dc12c8 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,13 @@ public final class ServerConnectedEvent { private final Player player; private final RegisteredServer server; + private final @Nullable RegisteredServer previousServer; - public ServerConnectedEvent(Player player, RegisteredServer server) { + public ServerConnectedEvent(Player player, RegisteredServer server, + @Nullable RegisteredServer previousServer) { this.player = Preconditions.checkNotNull(player, "player"); this.server = Preconditions.checkNotNull(server, "server"); + this.previousServer = previousServer; } public Player getPlayer() { @@ -26,6 +31,10 @@ public final class ServerConnectedEvent { return server; } + public Optional getPreviousServer() { + return Optional.ofNullable(previousServer); + } + @Override public String toString() { return "ServerConnectedEvent{" 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;