From f8df9da19d659d1133fc0d8418ad6bfd282256ec Mon Sep 17 00:00:00 2001 From: padre Date: Tue, 28 Jan 2025 12:02:48 +0200 Subject: [PATCH 1/5] Update Commander.java --- src/main/java/dev/padrewin/coldtracker/commands/Commander.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dev/padrewin/coldtracker/commands/Commander.java b/src/main/java/dev/padrewin/coldtracker/commands/Commander.java index b2257a8..5beb5f4 100644 --- a/src/main/java/dev/padrewin/coldtracker/commands/Commander.java +++ b/src/main/java/dev/padrewin/coldtracker/commands/Commander.java @@ -26,6 +26,7 @@ public Commander(ColdTracker plugin) { this.registerCommand(new DumpCommand()); this.registerCommand(new ExportCommand()); this.registerCommand(new ShowVotesCommand()); + this.registerCommand(new StatsCommand()); } From 1ec897be854b5fdef418c995e8b574aeffbeea38 Mon Sep 17 00:00:00 2001 From: padre Date: Tue, 28 Jan 2025 12:02:51 +0200 Subject: [PATCH 2/5] Create StatsCommand.java --- .../coldtracker/commands/StatsCommand.java | 110 ++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 src/main/java/dev/padrewin/coldtracker/commands/StatsCommand.java diff --git a/src/main/java/dev/padrewin/coldtracker/commands/StatsCommand.java b/src/main/java/dev/padrewin/coldtracker/commands/StatsCommand.java new file mode 100644 index 0000000..8b34b22 --- /dev/null +++ b/src/main/java/dev/padrewin/coldtracker/commands/StatsCommand.java @@ -0,0 +1,110 @@ +package dev.padrewin.coldtracker.commands; + +import dev.padrewin.coldtracker.ColdTracker; +import dev.padrewin.coldtracker.manager.CommandManager; +import dev.padrewin.coldtracker.manager.LocaleManager; +import org.bukkit.Bukkit; +import org.bukkit.OfflinePlayer; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.List; +import java.util.UUID; + +public class StatsCommand extends BaseCommand { + + public StatsCommand() { + super("stats", CommandManager.CommandAliases.STATS); + } + + @Override + public void execute(@NotNull ColdTracker plugin, @NotNull CommandSender sender, @NotNull String[] args) { + LocaleManager localeManager = plugin.getManager(LocaleManager.class); + String prefix = localeManager.getLocaleMessage("prefix"); + + // Console handling + if (!(sender instanceof Player)) { + if (args.length == 1) { + String targetName = args[0]; + OfflinePlayer targetPlayer = Bukkit.getOfflinePlayer(targetName); + + if (!targetPlayer.hasPlayedBefore()) { + sender.sendMessage(prefix + localeManager.getLocaleMessage("player-not-found").replace("{player}", targetName)); + return; + } + + UUID targetUUID = targetPlayer.getUniqueId(); + showStats(plugin, localeManager, sender, targetUUID, targetPlayer.getName()); + } else { + sender.sendMessage(prefix + localeManager.getLocaleMessage("command-stats-console-only")); + } + return; + } + + // Player handling + Player player = (Player) sender; + UUID playerUUID = player.getUniqueId(); + + if (args.length == 0) { + // Self stats + showStats(plugin, localeManager, sender, playerUUID, player.getName()); + } else if (args.length == 1) { + // Target stats + if (!sender.hasPermission("coldtracker.stats.others")) { + sender.sendMessage(prefix + localeManager.getLocaleMessage("no-permission")); + return; + } + + String targetName = args[0]; + OfflinePlayer targetPlayer = Bukkit.getOfflinePlayer(targetName); + + if (!targetPlayer.hasPlayedBefore()) { + sender.sendMessage(prefix + localeManager.getLocaleMessage("player-not-found").replace("{player}", targetName)); + return; + } + + UUID targetUUID = targetPlayer.getUniqueId(); + boolean trackTime = targetPlayer.isOnline() && targetPlayer.getPlayer().hasPermission("coldtracker.tracktime"); + boolean trackVotes = targetPlayer.isOnline() && targetPlayer.getPlayer().hasPermission("coldtracker.trackvote"); + + if (!trackTime && !trackVotes) { + sender.sendMessage(prefix + localeManager.getLocaleMessage("no-staff-member").replace("{player}", targetName)); + return; + } + + showStats(plugin, localeManager, sender, targetUUID, targetPlayer.getName()); + } else { + sender.sendMessage(prefix + localeManager.getLocaleMessage("invalid-command-usage")); + } + } + + private void showStats(ColdTracker plugin, LocaleManager localeManager, CommandSender sender, UUID playerUUID, String playerName) { + String prefix = localeManager.getLocaleMessage("prefix"); + long totalTime = plugin.getDatabaseManager().getTotalTime(playerUUID); + long hours = (totalTime / 1000) / 3600; + long minutes = ((totalTime / 1000) % 3600) / 60; + long seconds = (totalTime / 1000) % 60; + long days = hours / 24; + hours = hours % 24; + String timeFormatted = String.format("%dd %dh %dm %ds", days, hours, minutes, seconds); + + String statsMessage = prefix + localeManager.getLocaleMessage("command-stats-playtime").replace("{time}", timeFormatted); + + if (plugin.getConfig().getBoolean("track-votes", false)) { + int totalVotes = plugin.getDatabaseManager().getTotalVotes(playerUUID); + statsMessage += " " + localeManager.getLocaleMessage("command-stats-votes").replace("{votes}", String.valueOf(totalVotes)); + } + + sender.sendMessage(statsMessage); + } + + @Override + public List tabComplete(@NotNull ColdTracker plugin, @NotNull CommandSender sender, @NotNull String[] args) { + if (args.length == 1 && sender.hasPermission("coldtracker.stats.others")) { + return null; + } + return Collections.emptyList(); + } +} \ No newline at end of file From 7bf21782d14ea4a658c481abedfd96998499f639 Mon Sep 17 00:00:00 2001 From: padre Date: Tue, 28 Jan 2025 12:02:54 +0200 Subject: [PATCH 3/5] Update CommandManager.java --- .../java/dev/padrewin/coldtracker/manager/CommandManager.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/dev/padrewin/coldtracker/manager/CommandManager.java b/src/main/java/dev/padrewin/coldtracker/manager/CommandManager.java index 6eff1b1..823d3f7 100644 --- a/src/main/java/dev/padrewin/coldtracker/manager/CommandManager.java +++ b/src/main/java/dev/padrewin/coldtracker/manager/CommandManager.java @@ -23,6 +23,7 @@ public List get() { }, SHOWTIME, SHOWVOTES, + STATS, RELOAD, WIPE, VERSION, From a1dba561f92bb94c60488a707cf9beedefa43d9f Mon Sep 17 00:00:00 2001 From: padre Date: Tue, 28 Jan 2025 12:02:58 +0200 Subject: [PATCH 4/5] Update en_US.yml --- src/main/resources/locale/en_US.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/resources/locale/en_US.yml b/src/main/resources/locale/en_US.yml index 3f16905..7be2c13 100644 --- a/src/main/resources/locale/en_US.yml +++ b/src/main/resources/locale/en_US.yml @@ -23,6 +23,13 @@ showvotes-message: "&c{player} &7has a total of &c{votes}&7 votes." command-showvotes-disabled: '&7Vote tracker &cdisabled&7. Please consult configuration file.' command-votes-not-available: '&7Voting plugin not detected. Vote tracking is &cunavailable&7.' +# Stats Command +command-stats-description: '&8 - &c/coldtracker stats &7- View your personal stats' +command-stats-player-only: '&cOnly players can use this command.' +command-stats-console-only: '&7Console can''t have stats.' +command-stats-playtime: '&7You have a total time of &c{time}&7.' +command-stats-votes: '&7and &c{votes} votes&7.' + # Database message warnings command-wipe-description: '&8 - &c/coldtracker wipe &7- Wipe current SQLite database' command-wipe-usage: '&7Usage: &c/coldtracker wipe' From fe0dfc0944aaf85cc69efe974729d57c15f43466 Mon Sep 17 00:00:00 2001 From: padre Date: Tue, 28 Jan 2025 12:03:01 +0200 Subject: [PATCH 5/5] Update plugin.yml --- src/main/resources/plugin.yml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 353c6c2..1ba5fd9 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -20,6 +20,8 @@ commands: permission: "coldtracker.dump" showvotes: permission: "coldtracker.showvotes" + stats: + permission: "coldtracker.stats" permissions: coldtracker.*: @@ -32,6 +34,8 @@ permissions: coldtracker.dump: true coldtracker.export: true coldtracker.showvotes: true + coldtracker.stats: true + coldtracker.stats.others: true coldtracker.version: description: Gives access to the version command @@ -68,3 +72,11 @@ permissions: coldtracker.trackvote: description: Gives access to track the votes default: op + + coldtracker.stats: + description: Gives access to the stats command + default: op + + coldtracker.stats.others: + description: Gives access to view stats of other staff members + default: op \ No newline at end of file