@@ -74,7 +74,7 @@ public void onServerPreConnect(ServerPreConnectEvent event) {
7474 shutdownManager .cancelTask (originalServer );
7575
7676 try {
77- pingCompletableFuture .get ();
77+ pingCompletableFuture .get (); // FIXME: This is blocking the main thread
7878 // Server pinged successfully, we can connect the player to this server
7979 event .setResult (ServerPreConnectEvent .ServerResult .allowed (originalServer ));
8080 } catch (ExecutionException exception ) {
@@ -118,14 +118,32 @@ public void onDisconnect(DisconnectEvent event) {
118118 @ Subscribe ()
119119 public void onKicked (KickedFromServerEvent event ) {
120120 stopServer (event .getPlayer ());
121+ redirectPlayerToWaitingServerOnKick (event );
122+ }
123+
124+ private void redirectPlayerToWaitingServerOnKick (KickedFromServerEvent event ) {
125+ boolean shouldRedirectToWaitingServerOnKick = configuration .getRedirectToWaitingServerOnKick ();
126+ boolean isKickedFromWaitingServer = event .getServer () == this .waitingServer ;
127+ boolean isConnectedToWaitingServer = event .getPlayer ().getCurrentServer ()
128+ .map (serverConnection -> serverConnection .getServer () == this .waitingServer )
129+ .orElse (false );
121130
122- // Redirect the player to the waiting server
123- if (configuration .getRedirectToWaitingServerOnKick () && event .getServer () != this .waitingServer ) {
124- event .setResult (KickedFromServerEvent .RedirectPlayer .create (waitingServer , getKickReasonMessage (event )));
131+ if (shouldRedirectToWaitingServerOnKick && !isKickedFromWaitingServer ) {
132+ if (isConnectedToWaitingServer ) {
133+ event .setResult (KickedFromServerEvent .Notify .create (getKickDisconnectMessage (event )));
134+ } else {
135+ event .setResult (KickedFromServerEvent .RedirectPlayer .create (waitingServer , getKickRedirectMessage (event )));
136+ }
137+ } else {
138+ event .setResult (KickedFromServerEvent .DisconnectPlayer .create (getKickDisconnectMessage (event )));
125139 }
126140 }
127141
128- private Component getKickReasonMessage (KickedFromServerEvent event ) {
142+ private Component getKickDisconnectMessage (KickedFromServerEvent event ) {
143+ return event .getServerKickReason ().orElse (Component .translatable ("kick.generic.disconnect" ));
144+ }
145+
146+ private Component getKickRedirectMessage (KickedFromServerEvent event ) {
129147 Optional <Component > serverKickReason = event .getServerKickReason ();
130148 String serverName = event .getServer ().getServerInfo ().getName ();
131149 String serverCommand = "/server " + serverName ;
0 commit comments