diff --git a/src/main/java/com/slprojects/slcraftplugin/Main.java b/src/main/java/com/slprojects/slcraftplugin/Main.java index 4ad6029f51652421c164e123a2494b02ebabb26e..e0e04cec9a1f67627d2753299f01a6eb07a7e936 100644 --- a/src/main/java/com/slprojects/slcraftplugin/Main.java +++ b/src/main/java/com/slprojects/slcraftplugin/Main.java @@ -1,9 +1,10 @@ package com.slprojects.slcraftplugin; -import com.slprojects.slcraftplugin.commandes.linkCodeCommand; -import com.slprojects.slcraftplugin.commandes.wildCommand; -import com.slprojects.slcraftplugin.tachesParalleles.savePlayerData; -import com.slprojects.slcraftplugin.tachesParalleles.internalWebServer; +import com.slprojects.slcraftplugin.commands.admins.wildReset; +import com.slprojects.slcraftplugin.commands.publics.linkCode; +import com.slprojects.slcraftplugin.commands.publics.wild; +import com.slprojects.slcraftplugin.parallelTasks.playerDataHandler; +import com.slprojects.slcraftplugin.parallelTasks.internalWebServer; import me.clip.placeholderapi.PlaceholderAPI; import net.luckperms.api.LuckPerms; import net.luckperms.api.cacheddata.CachedMetaData; @@ -38,8 +39,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.UUID; -import java.util.concurrent.TimeUnit; -import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -48,7 +47,8 @@ public final class Main extends JavaPlugin implements Listener { private List<UUID> wildCommandActiveUsers; private static FileConfiguration config; private static LuckPerms luckPermsApi; - private com.slprojects.slcraftplugin.tachesParalleles.savePlayerData savePlayerData; + public playerDataHandler playerDataHandler; + public wild wildCommand; // Fonctions appelées à des évènements clés @Override @@ -84,15 +84,18 @@ public final class Main extends JavaPlugin implements Listener { reloadConfig(); config = getConfig(); updateConfig(); - savePlayerData = new savePlayerData(this); + playerDataHandler = new playerDataHandler(this); // On initialise la base de donnée initDatabase(); - wildCommand wildCommand = new wildCommand(this); + wildCommand = new wild(this); getCommand("wild").setExecutor(wildCommand); - linkCodeCommand linkCodeCommand = new linkCodeCommand(this); + wildReset wildReset = new wildReset(this); + getCommand("reset-wild").setExecutor(wildReset); + + linkCode linkCodeCommand = new linkCode(this); getCommand("getLinkCode").setExecutor(linkCodeCommand); internalWebServer.startServer(this); @@ -105,14 +108,14 @@ public final class Main extends JavaPlugin implements Listener { // Plugin shutdown logic getServer().getConsoleSender().sendMessage(ChatColor.RED+"SL-Craft | Plugin éteint"); - getServer().getOnlinePlayers().forEach(player -> savePlayerData.saveOnQuit(player)); + getServer().getOnlinePlayers().forEach(player -> playerDataHandler.quitEvent(player)); } @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerJoin(PlayerJoinEvent e) { // On désactive le message par défaut e.joinMessage(null); - savePlayerData.saveOnJoin(e.getPlayer()); + playerDataHandler.joinEvent(e.getPlayer()); // On affiche le message de bienvenue String welcomeMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), Objects.requireNonNull(getConfig().getString("player-join-message"))); @@ -130,7 +133,7 @@ public final class Main extends JavaPlugin implements Listener { public void onPlayerQuit(PlayerQuitEvent e) { // On désactive le message par défaut e.quitMessage(null); - savePlayerData.saveOnQuit(e.getPlayer()); + playerDataHandler.quitEvent(e.getPlayer()); String quitMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), Objects.requireNonNull(getConfig().getString("player-quit-message"))); for(Player p : getServer().getOnlinePlayers()){ p.sendMessage(quitMessage); diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/admins/wildReset.java b/src/main/java/com/slprojects/slcraftplugin/commands/admins/wildReset.java new file mode 100644 index 0000000000000000000000000000000000000000..4b199bc8153b075fb3e8982d000b6c32c14e01d3 --- /dev/null +++ b/src/main/java/com/slprojects/slcraftplugin/commands/admins/wildReset.java @@ -0,0 +1,62 @@ +package com.slprojects.slcraftplugin.commands.admins; + +import com.slprojects.slcraftplugin.Main; +import org.bukkit.ChatColor; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + +public class wildReset implements CommandExecutor { + private final Main plugin; + + public wildReset(Main plugin){ + this.plugin = plugin; + } + + @Override + public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args){ + if(args.length > 0){ + for(int i=0; i< args.length; i++){ + Player player = plugin.getServer().getPlayer(args[i]); + if(player != null){ + List<Object> reset = new ArrayList<Object>(){ + { + add(0); + add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); + } + }; + plugin.playerDataHandler.savePlayerWildCmdStats(player, reset); + plugin.wildCommand.setPlayerStats(player, reset); + String msg = "Passage de 'wildCmdLastUsed' au 11/12/2001 et 'wildCmdAskNum' à 0 pour " + player.getName() + " UUID: " + player.getUniqueId(); + if (sender instanceof Player){ + sender.sendMessage("§7§o"+msg); + }else{ + plugin.getServer().getConsoleSender().sendMessage(msg); + } + }else{ + String errorMsg = "Joueur n°" + i + " (dans la liste) non trouvé. :("; + if (sender instanceof Player){ + sender.sendMessage("§c"+errorMsg); + }else{ + plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + errorMsg); + } + } + } + }else{ + String errorMsg = "Vous devez écrire le pseudo d'un ou plusieurs joueurs."; + if (sender instanceof Player){ + sender.sendMessage("§c"+errorMsg); + }else{ + plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + errorMsg); + } + } + return true; + } +} diff --git a/src/main/java/com/slprojects/slcraftplugin/commandes/linkCodeCommand.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/linkCode.java similarity index 96% rename from src/main/java/com/slprojects/slcraftplugin/commandes/linkCodeCommand.java rename to src/main/java/com/slprojects/slcraftplugin/commands/publics/linkCode.java index b7691d00b5e19faf6d2268002f6d1d53f1de7169..1633f2d54371ad9f348fe7c4c0f31927308e45dc 100644 --- a/src/main/java/com/slprojects/slcraftplugin/commandes/linkCodeCommand.java +++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/linkCode.java @@ -1,4 +1,4 @@ -package com.slprojects.slcraftplugin.commandes; +package com.slprojects.slcraftplugin.commands.publics; import com.slprojects.slcraftplugin.Main; import org.bukkit.ChatColor; @@ -14,12 +14,12 @@ import java.sql.ResultSet; import java.time.LocalDateTime; import java.util.Random; -public class linkCodeCommand implements CommandExecutor { +public class linkCode implements CommandExecutor { // Variables private final Main plugin; - public linkCodeCommand(Main plugin){ + public linkCode(Main plugin){ // On récupère la classe parente pour les paramètres this.plugin = plugin; } diff --git a/src/main/java/com/slprojects/slcraftplugin/commandes/wildCommand.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/wild.java similarity index 68% rename from src/main/java/com/slprojects/slcraftplugin/commandes/wildCommand.java rename to src/main/java/com/slprojects/slcraftplugin/commands/publics/wild.java index 95a2627023bea952c0c4b1d5a228d08a0b70bd16..f22a80655b61f18c97a190cac452a4a45e653469 100644 --- a/src/main/java/com/slprojects/slcraftplugin/commandes/wildCommand.java +++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/wild.java @@ -1,4 +1,4 @@ -package com.slprojects.slcraftplugin.commandes; +package com.slprojects.slcraftplugin.commands.publics; import com.slprojects.slcraftplugin.Main; import org.bukkit.Bukkit; @@ -19,7 +19,7 @@ import java.util.*; import static java.lang.Math.abs; -public class wildCommand implements CommandExecutor { +public class wild implements CommandExecutor { // Variables private final Main plugin; @@ -31,7 +31,7 @@ public class wildCommand implements CommandExecutor { private final int usageCooldown; private final int usagePerDay; - public wildCommand(Main plugin){ + public wild(Main plugin){ // On récupère la classe parente pour les paramètres this.plugin = plugin; wildUsersIndexes = new ArrayList<>(); @@ -45,7 +45,6 @@ public class wildCommand implements CommandExecutor { } @Override - @SuppressWarnings("unchecked") public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { // On vérifie que la commande a bien été lancée par un joueur if (sender instanceof Player) { @@ -54,28 +53,20 @@ public class wildCommand implements CommandExecutor { int playerIndex; LocalDateTime dateTimeNow = LocalDateTime.now(); - if(wildUsersIndexes.contains(playerUUID)){ - playerIndex = wildUsersIndexes.indexOf(playerUUID); - - if(abs(ChronoUnit.SECONDS.between(wildUsersLastAsked.get(playerIndex), dateTimeNow)) > usageCooldown){ - if(wildUsersAskNum.get(playerIndex) < usagePerDay){ - wildUsersLastAsked.set(playerIndex, dateTimeNow); - wildUsersStartLocation.set(playerIndex, player.getLocation()); - askForTeleport(player); - }else{ - plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé"); - player.sendMessage("§cVous n'avez le droit qu'à §n"+usagePerDay+"§r§c téléportations aléatoires par jour."); - } + playerIndex = wildUsersIndexes.indexOf(playerUUID); + + if(abs(ChronoUnit.SECONDS.between(wildUsersLastAsked.get(playerIndex), dateTimeNow)) > usageCooldown){ + if(wildUsersAskNum.get(playerIndex) < usagePerDay){ + wildUsersLastAsked.set(playerIndex, dateTimeNow); + wildUsersStartLocation.set(playerIndex, player.getLocation()); + askForTeleport(player); }else{ plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé"); - player.sendMessage("§cVous devez attendre §n"+usageCooldown+"s§r§c avant de relancer la commande."); + player.sendMessage("§cVous n'avez le droit qu'à §n"+usagePerDay+"§r§c téléportations aléatoires par jour."); } }else{ - wildUsersIndexes.add(playerUUID); - wildUsersLastAsked.add(dateTimeNow); - wildUsersAskNum.add(0); - wildUsersStartLocation.add(player.getLocation()); - askForTeleport(player); + plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé"); + player.sendMessage("§cVous devez attendre §n"+usageCooldown+"s§r§c avant de relancer la commande."); } } return true; @@ -98,13 +89,14 @@ public class wildCommand implements CommandExecutor { // Date bidon pour annuler le cooldown (c'est ma date de naissance :D) wildUsersLastAsked.set(playerIndex, LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); }else{ - teleportPlayer(player, playerIndex); + teleportPlayer(player); } } }.runTaskLater(plugin, delayInTicks); } - private void teleportPlayer(Player player, int playerIndex){ + private void teleportPlayer(Player player){ + int playerIndex = wildUsersIndexes.indexOf(player.getUniqueId()); wildUsersAskNum.set(playerIndex, wildUsersAskNum.get(playerIndex)+1); // on récupère la liste des biomes exclus @@ -158,4 +150,43 @@ public class wildCommand implements CommandExecutor { player.sendMessage("§7§oVous avez épuisé toutes vos téléportations du jour."); } } + + public List<Object> getPlayerStats(Player player){ + if(!wildUsersIndexes.contains(player.getUniqueId())){ + return new ArrayList<>(); + }else{ + int playerIndex = wildUsersIndexes.indexOf(player.getUniqueId()); + // Indexes: + // - 0: Nombre d'utilisation du jour + // - 1: Date de la dernière commande + List<Object> stats = new ArrayList<Object>(); + stats.add(wildUsersAskNum.get(playerIndex)); + stats.add(wildUsersLastAsked.get(playerIndex)); + return stats; + } + } + + public void setPlayerStats(Player player, List<Object> stats){ + LocalDateTime dateTimeNow = LocalDateTime.now(); + + if(!wildUsersIndexes.contains(player.getUniqueId())){ + wildUsersIndexes.add(player.getUniqueId()); + wildUsersLastAsked.add(dateTimeNow); + wildUsersAskNum.add(0); + wildUsersStartLocation.add(player.getLocation()); + } + int playerIndex = wildUsersIndexes.indexOf(player.getUniqueId()); + + // Indexes: + // - 0: Nombre d'utilisation du jour + // - 1: Date de la dernière commande + LocalDateTime savedDateTime = (LocalDateTime)stats.get(1); + if(ChronoUnit.HOURS.between(savedDateTime, dateTimeNow) > 24){ + wildUsersAskNum.set(playerIndex, 0); + wildUsersLastAsked.set(playerIndex, savedDateTime); + }else{ + wildUsersAskNum.set(playerIndex, (int)stats.get(0)); + wildUsersLastAsked.set(playerIndex, savedDateTime); + } + } } diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/internalWebServer.java similarity index 99% rename from src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java rename to src/main/java/com/slprojects/slcraftplugin/parallelTasks/internalWebServer.java index 2d9480d447a7c1275569d7874408b116e1a04912..1de5e8ab7a2bbf3912cec57107f3a8973be24b95 100644 --- a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/internalWebServer.java @@ -1,4 +1,4 @@ -package com.slprojects.slcraftplugin.tachesParalleles; +package com.slprojects.slcraftplugin.parallelTasks; import com.slprojects.slcraftplugin.Main; import org.bukkit.ChatColor; diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/playerDataHandler.java similarity index 61% rename from src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java rename to src/main/java/com/slprojects/slcraftplugin/parallelTasks/playerDataHandler.java index 1331726580461f1e04260cb55f9863a23153eb94..e1f8b23c2a48eccded03c844108589d41be4c651 100644 --- a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/playerDataHandler.java @@ -1,35 +1,34 @@ -package com.slprojects.slcraftplugin.tachesParalleles; +package com.slprojects.slcraftplugin.parallelTasks; import com.slprojects.slcraftplugin.Main; import org.bukkit.ChatColor; import org.bukkit.Statistic; import org.bukkit.entity.Player; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.*; import java.time.Duration; import java.time.LocalDateTime; import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.List; import java.util.UUID; -public class savePlayerData { +public class playerDataHandler { private final Main plugin; private Connection con; // Playtime private final List<UUID> playTimeUsersIndexes; private final List<LocalDateTime> playTimeUsersDate; - public savePlayerData(Main plugin){ + public playerDataHandler(Main plugin){ this.plugin = plugin; playTimeUsersIndexes = new ArrayList<>(); playTimeUsersDate = new ArrayList<>(); } - public void saveOnJoin(Player player) { + public void joinEvent(Player player) { // On ouvre la bdd con = plugin.bddOpenConn(); @@ -37,25 +36,27 @@ public class savePlayerData { playTimeUsersDate.add(LocalDateTime.now()); insertPlayerName(player); // On check si le nom du joueur est déjà enregistré - playerAddPlayerEntryOrExit(player, true); // On ajoute son entée - checkJoinedDate(player); // On check si on dipose de sa date de rejoint + statsPlayerEntryExit(player, true); // On ajoute son entée + checkPlayerJoinedDate(player); // On check si on dipose de sa date de rejoint setPlayerJoinCount(player); // On set le nombre de fois qu'il a rejoint + plugin.wildCommand.setPlayerStats(player, getPlayerWildCmdStats(player)); // On ferme la bdd try { con.close(); } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnJoin(Player player)"); + plugin.getLogger().warning("Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnJoin(Player player)"); e.printStackTrace(); } } - public void saveOnQuit(Player player) { + public void quitEvent(Player player) { // On ouvre la bdd con = plugin.bddOpenConn(); calculatePlayerPlayTime(player); // On actualise le temps de jeu du joueur - playerAddPlayerEntryOrExit(player, false); // On ajoute son sortie + statsPlayerEntryExit(player, false); // On ajoute son sortie + savePlayerWildCmdStats(player, plugin.wildCommand.getPlayerStats(player)); // On ferme la bdd try { @@ -92,25 +93,25 @@ public class savePlayerData { insertUtilisateur.executeQuery(); } } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::insertPlayerName(Player player)"); + plugin.getLogger().warning("Func savePlayerData::insertPlayerName(Player player)"); e.printStackTrace(); } } - private void playerAddPlayerEntryOrExit(Player player, boolean isEnter){ + private void statsPlayerEntryExit(Player player, boolean isEnter){ try { PreparedStatement insertPlayerEntryOrExit = con.prepareStatement("INSERT INTO site_playerEntries (uuid, isJoin, date) VALUES (?, ?, ?)"); insertPlayerEntryOrExit.setString(1, player.getUniqueId().toString()); insertPlayerEntryOrExit.setBoolean(2, isEnter); - insertPlayerEntryOrExit.setString(3, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); + insertPlayerEntryOrExit.setString(3, Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); insertPlayerEntryOrExit.executeQuery(); } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::playerAddPlayerEntryOrExit(Player player, boolean isEnter)"); + plugin.getLogger().warning("Func savePlayerData::playerAddPlayerEntryOrExit(Player player, boolean isEnter)"); e.printStackTrace(); } } - private void checkJoinedDate(Player player){ + private void checkPlayerJoinedDate(Player player){ try { // On va vérifier si on l'a déjà renseigné par le passé PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joinedDate'"); @@ -156,12 +157,12 @@ public class savePlayerData { // Le joueur est nouveau, on insère la date d'inscription PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)"); insertionDateInscription.setString(1, player.getUniqueId().toString()); - insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); + insertionDateInscription.setString(2, Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); insertionDateInscription.executeQuery(); } } } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::checkJoinedDate(Player player)"); + plugin.getLogger().warning("Func savePlayerData::checkJoinedDate(Player player)"); e.printStackTrace(); } } @@ -188,7 +189,7 @@ public class savePlayerData { } } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::setPlayerJoinCount(Player player)"); + plugin.getLogger().warning("Func savePlayerData::setPlayerJoinCount(Player player)"); e.printStackTrace(); } } @@ -220,7 +221,114 @@ public class savePlayerData { } } catch (SQLException e) { - plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::increasePlayerPlayTime(Player player)"); + plugin.getLogger().warning("Func savePlayerData::increasePlayerPlayTime(Player player)"); + e.printStackTrace(); + } + } + + private List<Object> getPlayerWildCmdStats(Player player){ + // Indexes: + // - 0: Nombre d'utilisation du jour + // - 1: Date de la dernière commande + + try { + PreparedStatement playerLastUsed = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'wildCmdLastUsed'"); + playerLastUsed.setString(1, player.getUniqueId().toString()); + ResultSet lastUsedResult = playerLastUsed.executeQuery(); + + if(lastUsedResult.next()){ + LocalDateTime lastUsed = Timestamp.valueOf(lastUsedResult.getString("value")).toLocalDateTime(); + if(ChronoUnit.HOURS.between(lastUsed, LocalDateTime.now()) > 24){ + return new ArrayList<Object>(){ + { + add(0); + add(lastUsed); + } + }; + }else{ + PreparedStatement playerAskNum = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'wildCmdAskNum'"); + playerAskNum.setString(1, player.getUniqueId().toString()); + ResultSet askNumResult = playerAskNum.executeQuery(); + + if(askNumResult.next()){ + return new ArrayList<Object>(){ + { + add(Integer.valueOf(askNumResult.getString("value"))); + add(lastUsed); + } + }; + }else{ + plugin.getLogger().warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); + plugin.getLogger().warning("Fonctionnement anormal! On dispose de la date de 'wildCmdLastUsed' mais pas de 'wildCmdAskNum' pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); + plugin.getLogger().warning("Passage de 'wildCmdAskNum' à 0."); + return new ArrayList<Object>(){ + { + add(0); + add(lastUsed); + } + }; + } + } + }else{ + plugin.getLogger().info("Mise à jour du joueur " + player.getName() + " UUID: " + player.getUniqueId()); + plugin.getLogger().info("Création des champs 'wildCmdLastUsed' et 'wildCmdAskNum'"); + + // On va insérer une date bidon pour éviter un potentiel cooldown + LocalDateTime dateBidon = LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); + PreparedStatement insertWildCmdLastUsed = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'wildCmdLastUsed',?)"); + insertWildCmdLastUsed.setString(1, player.getUniqueId().toString()); + insertWildCmdLastUsed.setString(2, Timestamp.valueOf(dateBidon).toString()); + insertWildCmdLastUsed.executeQuery(); + + PreparedStatement insertWildCmdAskNum = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'wildCmdAskNum',?)"); + insertWildCmdAskNum.setString(1, player.getUniqueId().toString()); + insertWildCmdAskNum.setString(2, "0"); + insertWildCmdAskNum.executeQuery(); + + return new ArrayList<Object>(){ + { + add(0); + add(dateBidon); + } + }; + } + + } catch (SQLException e) { + plugin.getLogger().warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); + e.printStackTrace(); + } + + plugin.getLogger().warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); + plugin.getLogger().warning("Fonctionnement anormal! La recherche dans la bdd a échouée pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); + plugin.getLogger().warning("Passage de 'wildCmdLastUsed' au 11 décembre 2001 et 'wildCmdAskNum' à 0"); + + return new ArrayList<Object>(){ + { + add(0); + add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); + } + }; + } + + public void savePlayerWildCmdStats(Player player, List<Object> stats){ + // Indexes: + // - 0: Nombre d'utilisation du jour + // - 1: Date de la dernière commande + + try { + // On va zapper la vérification de présence car on suppose que la commande getWildCmdStats avait réussie + PreparedStatement updateWildCmdAskNum = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'wildCmdAskNum'"); + updateWildCmdAskNum.setString(1, String.valueOf(stats.get(0))); + updateWildCmdAskNum.setString(2, player.getUniqueId().toString()); + updateWildCmdAskNum.executeUpdate(); + + PreparedStatement updateWildCmdLastUsed = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'wildCmdLastUsed'"); + updateWildCmdLastUsed.setString(1, Timestamp.valueOf((LocalDateTime)stats.get(1)).toString()); + updateWildCmdLastUsed.setString(2, player.getUniqueId().toString()); + updateWildCmdLastUsed.executeUpdate(); + + } catch (SQLException e) { + plugin.getLogger().warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); e.printStackTrace(); } } diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 59d20de2c394777f349990e02ee79f3beacb112b..85da917c30a52d0f4be08aca37891b0491ad56c6 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -13,6 +13,12 @@ commands: usage: /wild permission: slcraft.wild + reset-wild: + description: ADMIN - Permet de réinitialiser le compteur de téléportation aléatoire d'un joueur + aliases: [reset-wild, wildreset] + usage: /reset-wild + permission: slcraft.admin.reset-wild + getlinkcode: description: Te permet d'obtenir un code pour associer ton compte Minecraft au site internet du serveur.' aliases: [ getlinkcode ]