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