55import me .confuser .banmanager .common .data .IpBanData ;
66import me .confuser .banmanager .common .data .IpMuteData ;
77import me .confuser .banmanager .common .data .PlayerBanData ;
8+ import me .confuser .banmanager .common .data .PlayerData ;
89import me .confuser .banmanager .common .data .PlayerMuteData ;
10+ import me .confuser .banmanager .common .util .UUIDUtils ;
911import org .bukkit .entity .Player ;
1012
13+ import java .sql .SQLException ;
1114import java .util .HashMap ;
1215import java .util .function .BiFunction ;
1316import java .util .function .Function ;
@@ -25,6 +28,11 @@ public PAPIPlaceholders(BanManagerPlugin plugin) {
2528 registerPlaceholder ("ip_mutes" , (player ) -> String .valueOf (plugin .getIpMuteStorage ().getMutes ().size ()));
2629 registerPlaceholder ("iprange_bans" , (player ) -> String .valueOf (plugin .getIpRangeBanStorage ().getBans ().size ()));
2730
31+ registerPlaceholder ("banrecord_count" , player -> getPlayerCount (player , p -> plugin .getPlayerBanRecordStorage ().getCount (p )));
32+ registerPlaceholder ("muterecord_count" , player -> getPlayerCount (player , p -> plugin .getPlayerMuteRecordStorage ().getCount (p )));
33+ registerPlaceholder ("warning_count" , player -> getPlayerCount (player , p -> plugin .getPlayerWarnStorage ().getCount (p )));
34+ registerPlaceholder ("kick_count" , player -> getPlayerCount (player , p -> plugin .getPlayerKickStorage ().getCount (p )));
35+
2836 registerBanPlaceholder ("currentban_id" , (player , data ) -> String .valueOf (data .getId ()));
2937 registerBanPlaceholder ("currentban_created" , (player , data ) -> String .valueOf (data .getCreated ()));
3038 registerBanPlaceholder ("currentban_expires" , (player , data ) -> String .valueOf (data .getExpires ()));
@@ -56,6 +64,24 @@ public PAPIPlaceholders(BanManagerPlugin plugin) {
5664 registerIpMutePlaceholder ("currentipmute_ip" , (player , data ) -> data .getIp ().toString ());
5765 }
5866
67+ @ FunctionalInterface
68+ private interface PlayerDataCount {
69+ long count (PlayerData playerData ) throws SQLException ;
70+ }
71+
72+ private String getPlayerCount (Player player , PlayerDataCount counter ) {
73+ try {
74+ PlayerData playerData = plugin .getPlayerStorage ().queryForId (UUIDUtils .toBytes (player .getUniqueId ()));
75+
76+ if (playerData == null ) return "0" ;
77+
78+ return String .valueOf (counter .count (playerData ));
79+ } catch (SQLException e ) {
80+ plugin .getLogger ().warning ("Failed to retrieve placeholder count: " + e .getMessage ());
81+ return "" ;
82+ }
83+ }
84+
5985 public void registerPlaceholder (String identifier , final Function <Player , String > fn ) {
6086 placeholders .put (identifier , new Placeholder (plugin , identifier ) {
6187 @ Override
0 commit comments