@@ -31,13 +31,19 @@ public void handleJoin(Player player) {
3131 // Check session
3232 if (sessionManager .hasSession (player .getUniqueId ())) {
3333 String lastIp = player .getAddress ().getAddress ().getHostAddress ();
34- // We should verification against DB last IP if we want strict IP sessions,
35- // but for now simple time-based session + re-login logic.
36- // NOTE: Real implementation might verify IP from DB.
37-
38- loggedInPlayers .add (player .getUniqueId ());
39- plugin .getTimeoutManager ().stopTimer (player );
40- player .sendMessage (plugin .getLanguageManager ().getMessage ("login-success" ));
34+ String dbLastIp = plugin .getDatabaseManager ().getLastIp (player .getUniqueId ());
35+
36+ if (dbLastIp != null && dbLastIp .equals (lastIp )) {
37+ loggedInPlayers .add (player .getUniqueId ());
38+ plugin .getTimeoutManager ().stopTimer (player );
39+ player .sendMessage (plugin .getLanguageManager ().getMessage ("login-success" ));
40+
41+ sendToBungeeServer (player );
42+ } else {
43+ // Session invalid due to IP change
44+ sessionManager .endSession (player .getUniqueId ());
45+ player .sendMessage (plugin .getLanguageManager ().getMessage ("join-login" ));
46+ }
4147 } else {
4248 player .sendMessage (plugin .getLanguageManager ().getMessage ("join-login" ));
4349 }
@@ -79,6 +85,7 @@ public void register(Player player, String password) {
7985 plugin .getTimeoutManager ().stopTimer (player );
8086
8187 player .sendMessage (plugin .getLanguageManager ().getMessage ("register-success" ));
88+ sendToBungeeServer (player );
8289 }
8390
8491 public void login (Player player , String password ) {
@@ -104,6 +111,7 @@ public void login(Player player, String password) {
104111 player .getAddress ().getAddress ().getHostAddress ());
105112
106113 player .sendMessage (plugin .getLanguageManager ().getMessage ("login-success" ));
114+ sendToBungeeServer (player );
107115 } else {
108116 player .sendMessage (plugin .getLanguageManager ().getMessage ("login-failed" ));
109117 }
@@ -135,4 +143,24 @@ public void changePassword(Player player, String oldPassword, String newPassword
135143 player .sendMessage (plugin .getLanguageManager ().getMessage ("password-mismatch" ));
136144 }
137145 }
146+
147+ private void sendToBungeeServer (Player player ) {
148+ if (!plugin .getConfigManager ().isBungeeEnabled ())
149+ return ;
150+
151+ String server = plugin .getConfigManager ().getBungeeServer ();
152+ player .sendMessage (plugin .getLanguageManager ().getMessage ("sending-to-server" ));
153+
154+ // Wait a bit to ensure messages are sent
155+ Bukkit .getScheduler ().runTaskLater (plugin , () -> {
156+ try {
157+ com .google .common .io .ByteArrayDataOutput out = com .google .common .io .ByteStreams .newDataOutput ();
158+ out .writeUTF ("Connect" );
159+ out .writeUTF (server );
160+ player .sendPluginMessage (plugin , "BungeeCord" , out .toByteArray ());
161+ } catch (Exception e ) {
162+ e .printStackTrace ();
163+ }
164+ }, 10L );
165+ }
138166}
0 commit comments