22
33import com .lightlogin .LightLogin ;
44import com .lightlogin .database .DatabaseManager ;
5+ import org .bukkit .Bukkit ;
56import org .bukkit .entity .Player ;
67import org .bukkit .event .EventHandler ;
78import org .bukkit .event .Listener ;
1213import org .bukkit .event .inventory .InventoryClickEvent ;
1314import org .bukkit .event .inventory .InventoryOpenEvent ;
1415import org .bukkit .event .player .*;
16+ import org .geysermc .floodgate .api .FloodgateApi ;
1517
1618import java .util .HashSet ;
1719import java .util .Set ;
@@ -34,32 +36,94 @@ public void onPlayerJoin(PlayerJoinEvent event) {
3436 String ipAddress = player .getAddress () != null ?
3537 player .getAddress ().getAddress ().getHostAddress () : "unknown" ;
3638
39+ // Handle Bedrock players
40+ if (isBedrockPlayer (player )) {
41+ handleBedrockPlayer (player , uuid , ipAddress );
42+ return ;
43+ }
44+
45+ // Handle Java players
46+ handleJavaPlayer (player , uuid , ipAddress );
47+ }
48+
49+ private boolean isBedrockPlayer (Player player ) {
50+ try {
51+ return Bukkit .getPluginManager ().getPlugin ("floodgate" ) != null &&
52+ FloodgateApi .getInstance ().isFloodgatePlayer (player .getUniqueId ());
53+ } catch (Exception e ) {
54+ plugin .getLogger ().warning ("Error checking if player is from Bedrock: " + e .getMessage ());
55+ return false ;
56+ }
57+ }
58+
59+ private void handleBedrockPlayer (Player player , UUID uuid , String ipAddress ) {
60+ // Auto-register Bedrock players if not registered
61+ if (!databaseManager .isPlayerRegistered (uuid )) {
62+ // Generate a random secure password for the Bedrock player
63+ String password = generateRandomPassword ();
64+ if (databaseManager .registerPlayer (uuid , player .getName (), password , ipAddress )) {
65+ player .sendMessage (plugin .getConfig ().getString (
66+ "messages.bedrock-auto-register" ,
67+ "§aWelcome Bedrock player! You've been automatically registered." ));
68+ setLoggedIn (uuid , true );
69+ } else {
70+ player .kickPlayer (plugin .getConfig ().getString (
71+ "messages.registration-error" ,
72+ "§cFailed to register your account. Please contact an administrator." ));
73+ }
74+ } else {
75+ // Auto-login Bedrock players
76+ setLoggedIn (uuid , true );
77+ player .sendMessage (plugin .getConfig ().getString (
78+ "messages.bedrock-auto-login" ,
79+ "§aWelcome back, Bedrock player! You've been automatically logged in." ));
80+ }
81+ databaseManager .updateLastLogin (uuid , ipAddress );
82+ }
83+
84+ private void handleJavaPlayer (Player player , UUID uuid , String ipAddress ) {
3785 // Check if player is registered
3886 if (!databaseManager .isPlayerRegistered (uuid )) {
3987 // Player needs to register
40- player .sendMessage ("§aWelcome! Please register using /register <password> <confirmPassword>" );
88+ player .sendMessage (plugin .getConfig ().getString (
89+ "messages.register-prompt" ,
90+ "§aWelcome! Please register using /register <password> <confirmPassword>" ));
4191 } else {
42- // Check for auto-login
43- // Check if auto-login is enabled and IP matches if required
92+ // Check for auto-login if enabled
4493 if (plugin .getConfig ().getBoolean ("auto-login.enabled" , true )) {
4594 boolean checkIp = plugin .getConfig ().getBoolean ("session.check-ip" , false );
4695
4796 if (databaseManager .hasValidSession (uuid , ipAddress , checkIp )) {
4897 setLoggedIn (uuid , true );
49- player .sendMessage (plugin .getConfig ().getString ("messages.auto-login" , "§aAutomatically logged in!" ));
98+ player .sendMessage (plugin .getConfig ().getString (
99+ "messages.auto-login" ,
100+ "§aAutomatically logged in!" ));
50101
51102 // Update last login time
52103 databaseManager .updateLastLogin (uuid , ipAddress );
53104 return ;
54105 }
55106 }
56107
57- player .sendMessage (plugin .getConfig ().getString ("messages.login-required" , "§aWelcome back! Please login using /login <password>" ));
108+ player .sendMessage (plugin .getConfig ().getString (
109+ "messages.login-required" ,
110+ "§aWelcome back! Please login using /login <password>" ));
58111 }
59112
60113 // Save/update IP and last login
61114 databaseManager .updateLastLogin (uuid , ipAddress );
62115 }
116+
117+ private String generateRandomPassword () {
118+ // Generate a secure random password for Bedrock players
119+ String chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*()" ;
120+ StringBuilder sb = new StringBuilder (16 );
121+ for (int i = 0 ; i < 16 ; i ++) {
122+ int index = (int )(Math .random () * chars .length ());
123+ sb .append (chars .charAt (index ));
124+ }
125+ return sb .toString ();
126+ }
63127
64128 @ EventHandler
65129 public void onPlayerQuit (PlayerQuitEvent event ) {
0 commit comments