From 5c6cf5c24decd35803cd509acb1d8fa82f8e04a7 Mon Sep 17 00:00:00 2001 From: James Mortemore Date: Tue, 3 Mar 2026 17:29:54 +0000 Subject: [PATCH] feat: added player punishment count prefixes %bm_banrecord_count% Total historical ban records for the player %bm_muterecord_count% Total historical mute records for the player %bm_warning_count% Total warnings for the player %bm_kick_count% Total kicks for the player --- .../bukkit/placeholders/PAPIPlaceholders.java | 26 +++++++++++++++++++ .../common/commands/TempWarnCommandTest.java | 2 +- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/me/confuser/banmanager/bukkit/placeholders/PAPIPlaceholders.java b/bukkit/src/main/java/me/confuser/banmanager/bukkit/placeholders/PAPIPlaceholders.java index d6922a2fc..9abd88fd9 100644 --- a/bukkit/src/main/java/me/confuser/banmanager/bukkit/placeholders/PAPIPlaceholders.java +++ b/bukkit/src/main/java/me/confuser/banmanager/bukkit/placeholders/PAPIPlaceholders.java @@ -5,9 +5,12 @@ import me.confuser.banmanager.common.data.IpBanData; import me.confuser.banmanager.common.data.IpMuteData; import me.confuser.banmanager.common.data.PlayerBanData; +import me.confuser.banmanager.common.data.PlayerData; import me.confuser.banmanager.common.data.PlayerMuteData; +import me.confuser.banmanager.common.util.UUIDUtils; import org.bukkit.entity.Player; +import java.sql.SQLException; import java.util.HashMap; import java.util.function.BiFunction; import java.util.function.Function; @@ -25,6 +28,11 @@ public PAPIPlaceholders(BanManagerPlugin plugin) { registerPlaceholder("ip_mutes", (player) -> String.valueOf(plugin.getIpMuteStorage().getMutes().size())); registerPlaceholder("iprange_bans", (player) -> String.valueOf(plugin.getIpRangeBanStorage().getBans().size())); + registerPlaceholder("banrecord_count", player -> getPlayerCount(player, p -> plugin.getPlayerBanRecordStorage().getCount(p))); + registerPlaceholder("muterecord_count", player -> getPlayerCount(player, p -> plugin.getPlayerMuteRecordStorage().getCount(p))); + registerPlaceholder("warning_count", player -> getPlayerCount(player, p -> plugin.getPlayerWarnStorage().getCount(p))); + registerPlaceholder("kick_count", player -> getPlayerCount(player, p -> plugin.getPlayerKickStorage().getCount(p))); + registerBanPlaceholder("currentban_id", (player, data) -> String.valueOf(data.getId())); registerBanPlaceholder("currentban_created", (player, data) -> String.valueOf(data.getCreated())); registerBanPlaceholder("currentban_expires", (player, data) -> String.valueOf(data.getExpires())); @@ -56,6 +64,24 @@ public PAPIPlaceholders(BanManagerPlugin plugin) { registerIpMutePlaceholder("currentipmute_ip", (player, data) -> data.getIp().toString()); } + @FunctionalInterface + private interface PlayerDataCount { + long count(PlayerData playerData) throws SQLException; + } + + private String getPlayerCount(Player player, PlayerDataCount counter) { + try { + PlayerData playerData = plugin.getPlayerStorage().queryForId(UUIDUtils.toBytes(player.getUniqueId())); + + if (playerData == null) return "0"; + + return String.valueOf(counter.count(playerData)); + } catch (SQLException e) { + plugin.getLogger().warning("Failed to retrieve placeholder count: " + e.getMessage()); + return ""; + } + } + public void registerPlaceholder(String identifier, final Function fn) { placeholders.put(identifier, new Placeholder(plugin, identifier) { @Override diff --git a/common/src/test/java/me/confuser/banmanager/common/commands/TempWarnCommandTest.java b/common/src/test/java/me/confuser/banmanager/common/commands/TempWarnCommandTest.java index a14a80d10..903361778 100644 --- a/common/src/test/java/me/confuser/banmanager/common/commands/TempWarnCommandTest.java +++ b/common/src/test/java/me/confuser/banmanager/common/commands/TempWarnCommandTest.java @@ -131,4 +131,4 @@ public void shouldAllowPartialWhenNoExactCollision() throws SQLException { server.setUseStorageForOnlineLookups(true); } } -} +} \ No newline at end of file