@@ -43,19 +43,31 @@ public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
4343 return ;
4444 }
4545
46- foliaLib .getScheduler ().runAsync (task -> {
47- try {
48- handlePlayerDataAsync (event );
49-
50- checkPunishmentsAsync (event );
51-
52- checkIPBanAsync (event );
53-
54- } catch (Exception e ) {
55- plugin .getLogger ().severe ("Error in async pre-login processing for " + event .getName () + ": " + e .getMessage ());
56- e .printStackTrace ();
46+ try {
47+ checkPunishmentsSync (event );
48+
49+ if (event .getLoginResult () == AsyncPlayerPreLoginEvent .Result .ALLOWED ) {
50+ checkIPBanSync (event );
5751 }
58- });
52+
53+ if (event .getLoginResult () == AsyncPlayerPreLoginEvent .Result .ALLOWED ) {
54+ foliaLib .getScheduler ().runAsync (task -> {
55+ try {
56+ handlePlayerDataAsync (event );
57+ } catch (Exception e ) {
58+ plugin .getLogger ().severe ("Error handling player data for " + event .getName () + ": " + e .getMessage ());
59+ e .printStackTrace ();
60+ }
61+ });
62+ }
63+
64+ } catch (Exception e ) {
65+ plugin .getLogger ().severe ("Critical error in pre-login processing for " + event .getName () + ": " + e .getMessage ());
66+ e .printStackTrace ();
67+
68+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_OTHER ,
69+ MessageUtils .toComponent ("&c&lCONNECTION ERROR\n &7An error occurred during login verification.\n &7Please try again later." ));
70+ }
5971 }
6072
6173 private void handlePlayerDataAsync (AsyncPlayerPreLoginEvent event ) {
@@ -83,26 +95,44 @@ private void handlePlayerDataAsync(AsyncPlayerPreLoginEvent event) {
8395 }
8496 }
8597
86- private void checkPunishmentsAsync (AsyncPlayerPreLoginEvent event ) {
98+ private void checkPunishmentsSync (AsyncPlayerPreLoginEvent event ) {
8799 try {
100+ Boolean isBanned = databaseManager .isPlayerBanned (event .getUniqueId ()).join ();
101+ plugin .debug ("Direct ban check for %s: %s" , event .getName (), isBanned );
102+
103+ if (isBanned != null && isBanned ) {
104+ plugin .debug ("Player %s is banned (direct check), blocking connection" , event .getName ());
105+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED ,
106+ MessageUtils .toComponent ("&c&lYOU ARE BANNED\n &7You have been banned from this server." ));
107+ return ;
108+ }
109+
88110 List <Punishment > punishments = databaseManager .getActivePunishments (event .getUniqueId ()).join ();
89111 plugin .debug ("Checking %d active punishments for player: %s" , punishments .size (), event .getName ());
90112
113+ if (punishments == null ) {
114+ plugin .getLogger ().warning ("Database returned null punishments for " + event .getName () + " - denying access for safety" );
115+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_OTHER ,
116+ MessageUtils .toComponent ("&c&lCONNECTION ERROR\n &7Unable to verify your punishment status.\n &7Please try again later." ));
117+ return ;
118+ }
119+
91120 for (Punishment punishment : punishments ) {
92- if (punishment . isExpired () ) {
93- plugin .debug ("Skipping expired punishment: %s for %s" , punishment . getType () , event .getName ());
121+ if (punishment == null ) {
122+ plugin .debug ("Skipping null punishment for %s" , event .getName ());
94123 continue ;
95124 }
125+
126+ plugin .debug ("Found punishment: type=%s, active=%s, expired=%s, target=%s" ,
127+ punishment .getType (), punishment .isActive (), punishment .isExpired (), punishment .getTargetName ());
96128
97129 if (punishment .getType () == PunishmentType .BAN || punishment .getType () == PunishmentType .TEMPBAN ) {
98130 plugin .debug ("Player %s is banned, blocking connection" , event .getName ());
99131 String kickMessage = getBanMessage (punishment );
100132 Component kickComponent = MessageUtils .toComponent (kickMessage );
101133
102- foliaLib .getScheduler ().runNextTick (task -> {
103- event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
104- plugin .getNotificationService ().broadcastPunishment (punishment , "reconnect_attempt" );
105- });
134+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
135+ plugin .getNotificationService ().broadcastPunishment (punishment , "reconnect_attempt" );
106136 return ;
107137 }
108138
@@ -113,29 +143,46 @@ private void checkPunishmentsAsync(AsyncPlayerPreLoginEvent event) {
113143 }
114144 } catch (Exception e ) {
115145 plugin .getLogger ().severe ("Error checking punishments for " + event .getName () + ": " + e .getMessage ());
146+ e .printStackTrace ();
147+
148+ plugin .getLogger ().warning ("Denying access to " + event .getName () + " due to punishment check failure" );
149+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_OTHER ,
150+ MessageUtils .toComponent ("&c&lCONNECTION ERROR\n &7Unable to verify your punishment status.\n &7Please try again later." ));
116151 }
117152 }
118153
119- private void checkIPBanAsync (AsyncPlayerPreLoginEvent event ) {
154+ private void checkIPBanSync (AsyncPlayerPreLoginEvent event ) {
120155 try {
121156 String playerIP = event .getAddress ().getHostAddress ();
122- if (databaseManager .isIPBanned (playerIP ).join ()) {
157+ Boolean isIPBanned = databaseManager .isIPBanned (playerIP ).join ();
158+
159+ if (isIPBanned == null ) {
160+ plugin .getLogger ().warning ("Database returned null for IP ban check for " + event .getName () + " (" + playerIP + ") - denying access for safety" );
161+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_OTHER ,
162+ MessageUtils .toComponent ("&c&lCONNECTION ERROR\n &7Unable to verify IP ban status.\n &7Please try again later." ));
163+ return ;
164+ }
165+
166+ if (isIPBanned ) {
123167 String ipBanMessage = plugin .getMessage ("screen.ipban" ,
124168 "&c&lYOU ARE IP BANNED\n &7Your IP address has been banned from this server.\n &7Appeal at: &e{appeal-url}" );
125169 String appealUrl = plugin .getAppealUrl ();
126170 ipBanMessage = ipBanMessage .replace ("{appeal-url}" , appealUrl );
127171
128172 Component kickComponent = MessageUtils .toComponent (ipBanMessage );
129173
130- foliaLib .getScheduler ().runNextTick (task -> {
131- event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
132- if (plugin .getConfig ().getBoolean ("debug.enabled" , false )) {
133- plugin .getLogger ().info ("Blocked IP banned connection attempt from " + playerIP + " (" + event .getName () + ")" );
134- }
135- });
174+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
175+ if (plugin .getConfig ().getBoolean ("debug.enabled" , false )) {
176+ plugin .getLogger ().info ("Blocked IP banned connection attempt from " + playerIP + " (" + event .getName () + ")" );
177+ }
136178 }
137179 } catch (Exception e ) {
138180 plugin .getLogger ().severe ("Error checking IP ban for " + event .getName () + ": " + e .getMessage ());
181+ e .printStackTrace ();
182+
183+ plugin .getLogger ().warning ("Denying access to " + event .getName () + " due to IP ban check failure" );
184+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_OTHER ,
185+ MessageUtils .toComponent ("&c&lCONNECTION ERROR\n &7Unable to verify IP ban status.\n &7Please try again later." ));
139186 }
140187 }
141188
0 commit comments