Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>dev.padrewin</groupId>
<artifactId>coldtracker</artifactId>
<version>1.2.1</version>
<version>1.3</version>
<packaging>jar</packaging>

<name>ColdTracker</name>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public Commander(ColdTracker plugin) {
this.registerCommand(new DumpCommand());
this.registerCommand(new ExportCommand());
this.registerCommand(new ShowVotesCommand());
this.registerCommand(new StatsCommand());

}

Expand Down
128 changes: 128 additions & 0 deletions src/main/java/dev/padrewin/coldtracker/commands/StatsCommand.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
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");

// Dacă comanda vine din consolă fără argumente
if (!(sender instanceof Player) && args.length == 0) {
sender.sendMessage(prefix + localeManager.getLocaleMessage("command-stats-console-no-self"));
return;
}

// Dacă comanda vine de la un jucător și nu are argumente
if (args.length == 0 && sender instanceof Player) {
Player player = (Player) sender;
showStats(plugin, localeManager, sender, player.getUniqueId(), player.getName());
return;
}

// Dacă există argumente, verificăm permisiunile
if (args.length == 1) {
if (!(sender instanceof Player) || sender.hasPermission("coldtracker.stats.others")) {
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();

// Verificăm permisiunile folosind LuckPerms
plugin.getLuckPerms().getUserManager().loadUser(targetUUID).thenAcceptAsync(user -> {
if (user == null) {
sender.sendMessage(prefix + localeManager.getLocaleMessage("player-not-found").replace("{player}", targetName));
return;
}

boolean trackTime = user.getCachedData().getPermissionData().checkPermission("coldtracker.tracktime").asBoolean();
boolean trackVotes = user.getCachedData().getPermissionData().checkPermission("coldtracker.trackvote").asBoolean();

if (!trackTime && !trackVotes) {
sender.sendMessage(prefix + localeManager.getLocaleMessage("no-staff-member").replace("{player}", targetName));
return;
}

showStats(plugin, localeManager, sender, targetUUID, targetName);
});
} else {
sender.sendMessage(prefix + localeManager.getLocaleMessage("no-permission"));
}
} 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);

StringBuilder statsMessage = new StringBuilder();

boolean trackVotes = plugin.getConfig().getBoolean("track-votes", false);
int totalVotes = trackVotes ? plugin.getDatabaseManager().getTotalVotes(playerUUID) : 0;

// Dacă targetul este senderul
if (sender instanceof Player && ((Player) sender).getUniqueId().equals(playerUUID)) {
String playtimeMessage = localeManager.getLocaleMessage("command-stats-playtime").replace("{time}", timeFormatted);
// Eliminăm punctul doar dacă voturile sunt trackate
if (trackVotes) {
playtimeMessage = playtimeMessage.endsWith(".") ? playtimeMessage.substring(0, playtimeMessage.length() - 1) : playtimeMessage;
}
statsMessage.append(prefix).append(playtimeMessage);
} else {
String playtimeMessage = localeManager.getLocaleMessage("showtime-message").replace("{player}", playerName).replace("{time}", timeFormatted);
// Eliminăm punctul doar dacă voturile sunt trackate
if (trackVotes) {
playtimeMessage = playtimeMessage.endsWith(".") ? playtimeMessage.substring(0, playtimeMessage.length() - 1) : playtimeMessage;
}
statsMessage.append(prefix).append(playtimeMessage);
}

// Adăugăm voturile doar dacă sunt trackate
if (trackVotes) {
statsMessage.append(" ").append(localeManager.getLocaleMessage("command-stats-votes").replace("{votes}", String.valueOf(totalVotes)));
}

sender.sendMessage(statsMessage.toString());
}



@Override
public List<String> tabComplete(@NotNull ColdTracker plugin, @NotNull CommandSender sender, @NotNull String[] args) {
if (args.length == 1 && sender.hasPermission("coldtracker.stats.others")) {
return null;
}
return Collections.emptyList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public List<String> get() {
},
SHOWTIME,
SHOWVOTES,
STATS,
RELOAD,
WIPE,
VERSION,
Expand Down
7 changes: 7 additions & 0 deletions src/main/resources/locale/en_US.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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-no-self: '&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'
Expand Down
39 changes: 23 additions & 16 deletions src/main/resources/locale/fr_FR.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,26 +8,33 @@ command-help-title: '&cCommandes disponibles :'
# Misc
no-permission: '&cVous n''avez pas la permission de faire cela !'
unknown-command: '&cCommande inconnue &4%input%&c.'
invalid-command-usage: '&cUtilisation de commande invalide.'
player-not-found: '&7Le joueur n''a pas pu être trouvé : &c{player}&7.'
invalid-command-usage: '&cUtilisation invalide de la commande.'
player-not-found: '&7Joueur introuvable : &c{player}&7.'

# Showtime Command Message
command-showtime-description: '&8 - &c/coldtracker showtime <playername> &7- Affiche le temps total suivi du joueur'
no-staff-member: '&7&c{player} &7n''est pas un membre du personnel.'
no-staff-member: '&7&c{player} &7n''est pas un membre du staff.'
showtime-message: '&c{player} &7a joué pendant &c{time}&7.'
command-showtime-usage: '&7Utilisation : &c/coldtracker showtime <playername>'

# ShowVote Command Message
command-showvotes-description: '&8 - &c/coldtracker showvotes <playername> &7- Affiche le total des votes suivis du joueur'
showvotes-message: "&c{player} &7a un total de &c{votes}&7 votes."
command-showvotes-disabled: '&7Suivi des votes &cdésactivé&7. Veuillez consulter le fichier de configuration.'
command-votes-not-available: '&7Aucun plugin de vote détecté. Le suivi des votes est &cindisponible&7.'
command-showvotes-disabled: '&7Le suivi des votes est &cdésactivé&7. Consultez le fichier de configuration.'
command-votes-not-available: '&7Plugin de vote non détecté. Le suivi des votes est &cindisponible&7.'

# Stats Command
command-stats-description: '&8 - &c/coldtracker stats &7- Voir vos statistiques personnelles'
command-stats-player-only: '&cSeuls les joueurs peuvent utiliser cette commande.'
command-stats-console-no-self: '&7La console ne peut pas avoir de statistiques.'
command-stats-playtime: '&7Vous avez joué pendant un total de &c{time}&7.'
command-stats-votes: '&7et &c{votes} votes&7.'

# Database message warnings
command-wipe-description: '&8 - &c/coldtracker wipe &7- Efface la base de données SQLite actuelle'
command-wipe-usage: '&7Utilisation : &c/coldtracker wipe'
command-wipe-warning: '&eATTENTION : &cCette opération supprimera toutes les données de la base de données active. &cSi vous êtes absolument sûr, utilisez &a/coldtracker wipe confirm&c.'
command-wipe-success: '&7Toutes les données de la base de données ont été effacées avec &asuccès&7.'
command-wipe-warning: '&eATTENTION : &cCette opération effacera toutes les données de la base de données active. &cSi vous êtes absolument sûr, utilisez &a/coldtracker wipe confirm&c.'
command-wipe-success: '&7Toutes les données de la base de données ont été effacées &avec succès&7.'

# Base Command Message
base-command-color: '&7'
Expand All @@ -36,21 +43,21 @@ base-command-help: '&7Utilisez &c/coldtracker help &7pour des informations sur l
# Reload Command
command-reload-description: '&8 - &c/coldtracker reload &7- Recharge le plugin'
command-reload-usage: '&7Utilisation : &c/coldtracker reload'
command-reload-success: '&7Les fichiers de configuration et de langue ont été rechargés.'
command-reload-success: '&7Les fichiers de configuration et de localisation ont été rechargés.'

# Dump Command
command-dump-disabled: '&7Dépôt Gist &cdésactivé&7. Veuillez consulter le fichier de configuration.'
command-dump-description: '&8 - &c/coldtracker dump &7- Exporte les données actuelles de la base de données vers Gist'
command-dump-disabled: '&7Le dump Gist est &cdésactivé&7. Consultez le fichier de configuration.'
command-dump-description: '&8 - &c/coldtracker dump &7- Déverse les données de la base de données actuelle dans un Gist'
command-dump-usage: '&7Utilisation : &c/coldtracker dump'
command-dump-warning: '&eATTENTION : &cCette opération exportera les données de la base de données actuelle. Utilisez &a/coldtracker dump confirm&c pour continuer.'
command-dump-success: '&7Exportation de la base de données &areussi&7 ! Lien : &a{link}'
command-dump-warning: '&eATTENTION : &cCette opération déversera les données de la base de données actuelle. Utilisez &a/coldtracker dump confirm&c pour continuer.'
command-dump-success: '&7Le dump de la base de données a été effectué &avec succès&7 ! Lien : &a{link}'
command-dump-fail: '&cÉchec de la génération du lien Gist. Consultez la console pour les erreurs.'

# Export Command
command-export-description: '&8 - &c/coldtracker export &7- Exporte les données vers plugins/ColdTracker'
command-export-warning: '&eATTENTION : &cLe fichier d''export existe déjà. Utilisez &a/coldtracker export confirm &cpour écraser.'
command-export-success: '&7Exportation &areussi&7. Les données ont été sauvegardées dans &aplugins/ColdTracker/{folder}&7.'
command-export-fail: '&cÉchec de la sauvegarde dans export.yml. Consultez la console pour les erreurs.'
command-export-warning: '&eATTENTION : &cLe fichier d''export existe déjà. Utilisez &a/coldtracker export confirm &cpour le remplacer.'
command-export-success: '&7Export &areussi&7. Les données ont été sauvegardées dans &aplugins/ColdTracker/{folder}&7.'
command-export-fail: '&cÉchec de la sauvegarde du fichier export.yml. Consultez la console pour les erreurs.'

# Version Command
command-version-description: '&8 - &c/coldtracker version &7- Affiche les informations sur la version de ColdTracker'
command-version-description: '&8 - &c/coldtracker version &7- Affiche la version de ColdTracker'
45 changes: 26 additions & 19 deletions src/main/resources/locale/pt_PT.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,45 +12,52 @@ invalid-command-usage: '&cUso inválido do comando.'
player-not-found: '&7Jogador não encontrado: &c{player}&7.'

# Showtime Command Message
command-showtime-description: '&8 - &c/coldtracker showtime <playername> &7- Mostra o tempo total rastreado do jogador'
no-staff-member: '&7&c{player} &7não é um membro da equipe.'
command-showtime-description: '&8 - &c/coldtracker showtime <playername> &7- Mostra o tempo total registrado do jogador'
no-staff-member: '&7&c{player} &7não é membro da equipe.'
showtime-message: '&c{player} &7jogou por &c{time}&7.'
command-showtime-usage: '&7Uso: &c/coldtracker showtime <playername>'

# ShowVote Command Message
command-showvotes-description: '&8 - &c/coldtracker showvotes <playername> &7- Mostra o total de votos rastreados do jogador'
command-showvotes-description: '&8 - &c/coldtracker showvotes <playername> &7- Mostra o total de votos registrados do jogador'
showvotes-message: "&c{player} &7tem um total de &c{votes}&7 votos."
command-showvotes-disabled: '&7Rastreamento de votos &cdesativado&7. Consulte o arquivo de configuração.'
command-votes-not-available: '&7Nenhum plugin de votação detectado. O rastreamento de votos está &cindisponível&7.'
command-showvotes-disabled: '&7O rastreamento de votos está &cdesativado&7. Consulte o arquivo de configuração.'
command-votes-not-available: '&7Plugin de votação não detectado. Rastreamento de votos está &cindisponível&7.'

# Stats Command
command-stats-description: '&8 - &c/coldtracker stats &7- Veja suas estatísticas pessoais'
command-stats-player-only: '&cApenas jogadores podem usar este comando.'
command-stats-console-no-self: '&7O console não pode ter estatísticas.'
command-stats-playtime: '&7Você tem um tempo total de &c{time}&7.'
command-stats-votes: '&7e &c{votes} votos&7.'

# Database message warnings
command-wipe-description: '&8 - &c/coldtracker wipe &7- Limpa o banco de dados SQLite atual'
command-wipe-description: '&8 - &c/coldtracker wipe &7- Apaga o banco de dados SQLite atual'
command-wipe-usage: '&7Uso: &c/coldtracker wipe'
command-wipe-warning: '&eAVISO: &cEsta operação apagará todos os dados do banco de dados ativo. &cSe você tem certeza, use &a/coldtracker wipe confirm&c.'
command-wipe-success: '&7Todos os dados do banco de dados foram apagados com &asucesso&7.'
command-wipe-warning: '&eAVISO: &cEsta operação apagará todos os dados do banco de dados ativo. &cSe você tiver certeza absoluta, use &a/coldtracker wipe confirm&c.'
command-wipe-success: '&7Todos os dados do banco de dados foram apagados &com sucesso&7.'

# Base Command Message
base-command-color: '&7'
base-command-help: '&7Use &c/coldtracker help &7para informações sobre comandos.'
base-command-help: '&7Use &c/coldtracker help &7para obter informações sobre os comandos.'

# Reload Command
command-reload-description: '&8 - &c/coldtracker reload &7- Recarrega o plugin'
command-reload-usage: '&7Uso: &c/coldtracker reload'
command-reload-success: '&7Os arquivos de configuração e idioma foram recarregados.'
command-reload-success: '&7Os arquivos de configuração e de localização foram recarregados.'

# Dump Command
command-dump-disabled: '&7Geração de Gist &cdesativada&7. Consulte o arquivo de configuração.'
command-dump-description: '&8 - &c/coldtracker dump &7- Exporta os dados do banco de dados atual para o Gist'
command-dump-disabled: '&7O dump Gist está &cdesativado&7. Consulte o arquivo de configuração.'
command-dump-description: '&8 - &c/coldtracker dump &7- Despeja os dados do banco de dados atual em um Gist'
command-dump-usage: '&7Uso: &c/coldtracker dump'
command-dump-warning: '&eAVISO: &cEsta operação exportará os dados do banco de dados atual. Use &a/coldtracker dump confirm&c para continuar.'
command-dump-success: '&7Exportação do banco de dados realizada com &asucesso&7! Link: &a{link}'
command-dump-fail: '&cFalha ao gerar o link do Gist. Verifique o console para erros.'
command-dump-warning: '&eAVISO: &cEsta operação despejará os dados do banco de dados atual. Use &a/coldtracker dump confirm&c para continuar.'
command-dump-success: '&7Dump do banco de dados realizado &com sucesso&7! Link: &a{link}'
command-dump-fail: '&cFalha ao gerar o link Gist. Verifique o console para erros.'

# Export Command
command-export-description: '&8 - &c/coldtracker export &7- Exporta os dados para plugins/ColdTracker'
command-export-warning: '&eAVISO: &cO arquivo de exportação já existe. Use &a/coldtracker export confirm &cpara sobrescrever.'
command-export-success: '&7Exportação realizada com &asucesso&7. Os dados foram salvos em &aplugins/ColdTracker/{folder}&7.'
command-export-fail: '&cFalha ao salvar o arquivo export.yml. Verifique o console para erros.'
command-export-warning: '&eAVISO: &cO arquivo de exportação já existe. Use &a/coldtracker export confirm &cpara substituí-lo.'
command-export-success: '&7Exportação &completa&7. Os dados foram salvos em &aplugins/ColdTracker/{folder}&7.'
command-export-fail: '&cFalha ao salvar export.yml. Verifique o console para erros.'

# Version Command
command-version-description: '&8 - &c/coldtracker version &7- Mostra as informações da versão do ColdTracker'
command-version-description: '&8 - &c/coldtracker version &7- Exibe a versão do ColdTracker'
Loading
Loading