diff --git a/bukkit/pom.xml b/bukkit/pom.xml index 6b4d4aa8..53d1f470 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -226,6 +226,13 @@ 1.2.0-SNAPSHOT provided + + + org.geysermc + floodgate-bukkit + 1.0-SNAPSHOT + provided + 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 dc76a34a..546e0d80 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 @@ -3,6 +3,7 @@ package com.github.games647.fastlogin.bukkit.listener; import com.github.games647.fastlogin.bukkit.BukkitLoginSession; import com.github.games647.fastlogin.bukkit.FastLoginBukkit; import com.github.games647.fastlogin.bukkit.task.ForceLoginTask; +import com.github.games647.fastlogin.core.StoredProfile; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -13,6 +14,8 @@ import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerLoginEvent; import org.bukkit.event.player.PlayerLoginEvent.Result; import org.bukkit.event.player.PlayerQuitEvent; +import org.geysermc.floodgate.FloodgateAPI; +import org.geysermc.floodgate.FloodgatePlayer; /** * This listener tells authentication plugins if the player has a premium account and we checked it successfully. So the @@ -45,7 +48,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()); - if (session == null) { + FloodgatePlayer floodgatePlayer = FloodgateAPI.getPlayer(player.getUniqueId()); + if (floodgatePlayer != null) { + StoredProfile profile = plugin.getCore().getStorage().loadProfile(player.getName()); + + //create fake session to make auto login work + session = new BukkitLoginSession(player.getName(), profile.isSaved()); + session.setVerified(true); + + //start auto login + //TODO: configurate auto login for floodgate players + //TODO: fix bug: registering as bedrock player breaks java auto login + Runnable forceLoginTask = new ForceLoginTask(plugin.getCore(), player, session); + Bukkit.getScheduler().runTaskAsynchronously(plugin, forceLoginTask); + } else if (session == null) { String sessionId = plugin.getSessionId(player.getAddress()); plugin.getLog().info("No on-going login session for player: {} with ID {}", player, sessionId); } else { diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java index 67249722..2413dfb3 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/protocollib/NameCheckTask.java @@ -14,6 +14,9 @@ import java.util.Random; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; +import org.geysermc.connector.GeyserConnector; +import org.geysermc.connector.common.AuthType; +import org.geysermc.connector.network.session.GeyserSession; public class NameCheckTask extends JoinManagement implements Runnable { @@ -42,6 +45,19 @@ public class NameCheckTask extends JoinManagement