11package me .wethink .weGuardian .listeners ;
22
3- import com .tcoded .folialib .FoliaLib ;
43import me .wethink .weGuardian .WeGuardian ;
54import me .wethink .weGuardian .database .DatabaseManager ;
65import me .wethink .weGuardian .models .PlayerData ;
76import me .wethink .weGuardian .models .Punishment ;
87import me .wethink .weGuardian .models .PunishmentType ;
98import me .wethink .weGuardian .utils .MessageUtils ;
109import net .kyori .adventure .text .Component ;
10+ import org .bukkit .entity .Player ;
1111import org .bukkit .event .EventHandler ;
1212import org .bukkit .event .EventPriority ;
1313import org .bukkit .event .Listener ;
1616import org .bukkit .event .player .PlayerQuitEvent ;
1717
1818import java .util .List ;
19- import java .util .Map ;
20- import java .util .concurrent .ConcurrentHashMap ;
19+ import java .util .concurrent .CompletableFuture ;
2120
2221public class PlayerListener implements Listener {
2322
2423 private final WeGuardian plugin ;
2524 private final DatabaseManager databaseManager ;
26- private final FoliaLib foliaLib ;
27-
28- private final Map <String , Punishment > pendingMuteActions = new ConcurrentHashMap <>();
2925
3026 public PlayerListener (WeGuardian plugin , DatabaseManager databaseManager ) {
3127 this .plugin = plugin ;
3228 this .databaseManager = databaseManager ;
33- this .foliaLib = plugin .getFoliaLib ();
3429 }
3530
3631 @ EventHandler (priority = EventPriority .HIGHEST )
@@ -43,22 +38,6 @@ public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
4338 return ;
4439 }
4540
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 ();
57- }
58- });
59- }
60-
61- private void handlePlayerDataAsync (AsyncPlayerPreLoginEvent event ) {
6241 try {
6342 PlayerData playerData = databaseManager .getPlayerData (event .getUniqueId ()).join ();
6443 if (playerData == null ) {
@@ -78,13 +57,7 @@ private void handlePlayerDataAsync(AsyncPlayerPreLoginEvent event) {
7857 event .getName (),
7958 event .getAddress ().getHostAddress ()
8059 );
81- } catch (Exception e ) {
82- plugin .getLogger ().severe ("Error handling player data for " + event .getName () + ": " + e .getMessage ());
83- }
84- }
85-
86- private void checkPunishmentsAsync (AsyncPlayerPreLoginEvent event ) {
87- try {
60+
8861 List <Punishment > punishments = databaseManager .getActivePunishments (event .getUniqueId ()).join ();
8962 plugin .debug ("Checking %d active punishments for player: %s" , punishments .size (), event .getName ());
9063
@@ -98,26 +71,12 @@ private void checkPunishmentsAsync(AsyncPlayerPreLoginEvent event) {
9871 plugin .debug ("Player %s is banned, blocking connection" , event .getName ());
9972 String kickMessage = getBanMessage (punishment );
10073 Component kickComponent = MessageUtils .toComponent (kickMessage );
101-
102- foliaLib .getScheduler ().runNextTick (task -> {
103- event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
104- plugin .getNotificationService ().broadcastPunishment (punishment , "reconnect_attempt" );
105- });
74+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
75+ plugin .getNotificationService ().broadcastPunishment (punishment , "reconnect_attempt" );
10676 return ;
10777 }
108-
109- if (punishment .getType () == PunishmentType .MUTE || punishment .getType () == PunishmentType .TEMPMUTE ) {
110- pendingMuteActions .put (event .getUniqueId ().toString (), punishment );
111- plugin .debug ("Player %s is muted, will show action bar after join" , event .getName ());
112- }
11378 }
114- } catch (Exception e ) {
115- plugin .getLogger ().severe ("Error checking punishments for " + event .getName () + ": " + e .getMessage ());
116- }
117- }
118-
119- private void checkIPBanAsync (AsyncPlayerPreLoginEvent event ) {
120- try {
79+
12180 String playerIP = event .getAddress ().getHostAddress ();
12281 if (databaseManager .isIPBanned (playerIP ).join ()) {
12382 String ipBanMessage = plugin .getMessage ("screen.ipban" ,
@@ -126,41 +85,52 @@ private void checkIPBanAsync(AsyncPlayerPreLoginEvent event) {
12685 ipBanMessage = ipBanMessage .replace ("{appeal-url}" , appealUrl );
12786
12887 Component kickComponent = MessageUtils .toComponent (ipBanMessage );
129-
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- });
88+ event .disallow (AsyncPlayerPreLoginEvent .Result .KICK_BANNED , kickComponent );
89+ if (plugin .getConfig ().getBoolean ("debug.enabled" , false )) {
90+ plugin .getLogger ().info ("Blocked IP banned connection attempt from " + playerIP + " (" + event .getName () + ")" );
91+ }
92+ return ;
13693 }
94+
13795 } catch (Exception e ) {
138- plugin .getLogger ().severe ("Error checking IP ban for " + event .getName () + ": " + e .getMessage ());
96+ plugin .getLogger ().severe ("Error checking ban status for " + event .getName () + ": " + e .getMessage ());
97+ e .printStackTrace ();
13998 }
14099 }
141100
142101 @ EventHandler
143- public void onPlayerJoin (PlayerJoinEvent event ) {
144- String playerUuid = event .getPlayer ().getUniqueId ().toString ();
145- Punishment mutePunishment = pendingMuteActions .remove (playerUuid );
146-
147- if (mutePunishment != null ) {
148- foliaLib .getScheduler ().runAtEntity (event .getPlayer (), task -> {
149- String actionBarMessage = getMuteMessage (mutePunishment );
150- if (!actionBarMessage .isEmpty ()) {
151- Component component = MessageUtils .toComponent (actionBarMessage );
152- event .getPlayer ().sendActionBar (component );
102+ public void onPlayeJoin (PlayerJoinEvent event ) {
103+ CompletableFuture .runAsync (() -> {
104+ try {
105+ List <Punishment > punishments = databaseManager .getActivePunishments (event .getPlayer ().getUniqueId ()).join ();
106+ for (Punishment punishment : punishments ) {
107+ if (punishment .isExpired ()) {
108+ continue ;
109+ }
110+
111+ if (punishment .getType () == PunishmentType .MUTE || punishment .getType () == PunishmentType .TEMPMUTE ) {
112+ String actionBarMessage = getMuteMessage (punishment );
113+ if (!actionBarMessage .isEmpty ()) {
114+ Component component = MessageUtils .toComponent (actionBarMessage );
115+ plugin .getServer ().getScheduler ().runTask (plugin , () -> {
116+ Player player = event .getPlayer ();
117+ if (player .isOnline ()) {
118+ player .sendActionBar (component );
119+ }
120+ });
121+ }
122+ break ;
123+ }
153124 }
154- });
155- }
125+ } catch (Exception e ) {
126+ plugin .getLogger ().severe ("Error checking mute status for " + event .getPlayer ().getName () + ": " + e .getMessage ());
127+ }
128+ });
156129 }
157130
158131 @ EventHandler
159132 public void onPlayerQuit (PlayerQuitEvent event ) {
160- String playerUuid = event .getPlayer ().getUniqueId ().toString ();
161- pendingMuteActions .remove (playerUuid );
162-
163- foliaLib .getScheduler ().runAsync (task -> {
133+ CompletableFuture .runAsync (() -> {
164134 try {
165135 PlayerData playerData = databaseManager .getPlayerData (event .getPlayer ().getUniqueId ()).join ();
166136 if (playerData != null ) {
0 commit comments