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 ee6ba69b..4b6c5a21 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 @@ -40,8 +40,6 @@ import java.util.Random; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; -import org.geysermc.floodgate.api.FloodgateApi; -import org.geysermc.floodgate.api.player.FloodgatePlayer; public class NameCheckTask extends JoinManagement implements Runnable { @@ -70,13 +68,8 @@ public class NameCheckTask extends JoinManagement org.geysermc.floodgate - bungee + api 2.0-SNAPSHOT provided diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncPremiumCheck.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncPremiumCheck.java index 410b1e44..9427ee51 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncPremiumCheck.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/task/AsyncPremiumCheck.java @@ -62,7 +62,7 @@ public class AsyncPremiumCheck extends JoinManagementcodemc-repo https://repo.codemc.io/repository/maven-public/ + + + + nukkitx-snapshot + https://repo.nukkitx.com/maven-snapshots/ + @@ -92,6 +98,14 @@ 0.4 + + + org.geysermc.floodgate + api + 2.0-SNAPSHOT + provided + + com.google.guava diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java index e337462c..63b3e4be 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java @@ -33,6 +33,9 @@ import com.github.games647.fastlogin.core.shared.event.FastLoginPreLoginEvent; import java.util.Optional; +import org.geysermc.floodgate.api.FloodgateApi; +import org.geysermc.floodgate.api.player.FloodgatePlayer; + import net.md_5.bungee.config.Configuration; public abstract class JoinManagement

{ @@ -45,8 +48,28 @@ public abstract class JoinManagement

{ this.authHook = authHook; } - public void onLogin(String username, S source) { + public void onLogin(String username, S source, boolean floodgateAvailable) { core.getPlugin().getLog().info("Handling player {}", username); + + // check if the player is connecting through Geyser + if (floodgateAvailable && getFloodgatePlayer(username) != null) { + if (core.getConfig().get("allowFloodgateNameConflict").toString().equalsIgnoreCase("false")) { + core.getPlugin().getLog().info( + "Bedrock Player {}'s name conflits an existing Java Premium Player's name", + username); + try { + source.kick("Your name conflits an existing Java Premium Player's name"); + } catch (Exception e) { + e.printStackTrace(); + core.getPlugin().getLog().error("Could not kick Player {}", username); + } + } else { + core.getPlugin().getLog().info("Skipping name conflict checking for player {}", username); + return; + } + + } + StoredProfile profile = core.getStorage().loadProfile(username); if (profile == null) { return; @@ -130,6 +153,24 @@ public abstract class JoinManagement

{ return false; } + + /** + * Get a FloodgatePlayyer by their name. + * This is not supported by FloodgateApi. + *
+ * WARNING: This method does not check if the floodgate plugin is actually installed on the server! + * @param username the name of the player + * @return FloodgatePlayer if found, null if the player is not online + */ + protected static FloodgatePlayer getFloodgatePlayer(String username) { + // the Floodgate API requires UUID, which is inaccessible at NameCheckTask.java + for (FloodgatePlayer floodgatePlayer : FloodgateApi.getInstance().getPlayers()) { + if (floodgatePlayer.getUsername().equals(username)) { + return floodgatePlayer; + } + } + return null; + } public abstract FastLoginPreLoginEvent callFastLoginPreLoginEvent(String username, S source, StoredProfile profile);