From 8e6221d8460c6fe0392f2925a5a79c698456315c Mon Sep 17 00:00:00 2001 From: Smart123s <28480228+Smart123s@users.noreply.github.com> Date: Thu, 23 Dec 2021 09:37:23 +0100 Subject: [PATCH] Fix delayed force login for Floodgate players Login checks are done by bungee, so Bukkit doesn't have to do anything. The session is set for them by the plugin messages, however, force login may be delayed. In that case, the player should be logged in at the onPlayerJoin event. However, FloodgateAuthTask was run at onPlayerJoin, even if the player allready had a valid login session. And FloodgateAuthTask always deffers force login if bungee is present. As a result, the Floodgate player will never get logged in, if the force login was delayed by the plugin message. Co-authored-by: BOT-Neil --- .../bukkit/listener/ConnectionListener.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java index 61161d5c..05c9a18f 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java @@ -81,17 +81,20 @@ public class ConnectionListener implements Listener { // cases: Paper (firing BungeeCord message before PlayerJoinEvent) or not running BungeeCord and already // having the login session from the login process BukkitLoginSession session = plugin.getSession(player.getAddress()); - FloodgateService floodgateService = plugin.getFloodgateService(); - if (floodgateService != null) { - FloodgatePlayer floodgatePlayer = floodgateService.getBedrockPlayer(player.getUniqueId()); - if (floodgatePlayer != null) { - Runnable floodgateAuthTask = new FloodgateAuthTask(plugin.getCore(), player, floodgatePlayer); - Bukkit.getScheduler().runTaskAsynchronously(plugin, floodgateAuthTask); - return; - } - } if (session == null) { + // Floodgate players usually don't have a session at this point + // exception: if force login by bungee message had been delayed + FloodgateService floodgateService = plugin.getFloodgateService(); + if (floodgateService != null) { + FloodgatePlayer floodgatePlayer = floodgateService.getBedrockPlayer(player.getUniqueId()); + if (floodgatePlayer != null) { + Runnable floodgateAuthTask = new FloodgateAuthTask(plugin.getCore(), player, floodgatePlayer); + Bukkit.getScheduler().runTaskAsynchronously(plugin, floodgateAuthTask); + return; + } + } + String sessionId = plugin.getSessionId(player.getAddress()); plugin.getLog().info("No on-going login session for player: {} with ID {}", player, sessionId); } else {