From ff6a2d92040efc4978f5355d06b82d27a686021e Mon Sep 17 00:00:00 2001 From: Sofiane Lasri-Trienpont <alasri250@gmail.com> Date: Wed, 15 Feb 2023 17:12:41 +0100 Subject: [PATCH] =?UTF-8?q?Portage=20des=20appels=20aux=20param=C3=A8tres?= =?UTF-8?q?=20utilisateurs=20de=20la=20classe=20PlayerDataHandler=20pour?= =?UTF-8?q?=20utiliser=20les=20deux=20fonctions=20de=20Database.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dataHandlers/PlayedTimeHandler.java | 4 + .../dataHandlers/PlayerDataHandler.java | 237 ++++++------------ 2 files changed, 85 insertions(+), 156 deletions(-) diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java index 8358b74..3c145e0 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java @@ -114,6 +114,7 @@ public class PlayedTimeHandler implements dataHandler { UUID playerUuid = player.getUniqueId(); LocalDateTime timeNow = LocalDateTime.now(); Duration duration = Duration.between(timeNow, userSessionJoinDateTime.get(usersIndexes.indexOf(playerUuid))); + long playedTimeInSeconds = Math.abs(duration.toSeconds()); long actualPlayedTime = userStoredPlayedTimeBeforeJoining.get(usersIndexes.indexOf(playerUuid)) + playedTimeInSeconds; @@ -122,6 +123,7 @@ public class PlayedTimeHandler implements dataHandler { if (playerGroupName != null && !Objects.equals(playerGroupName, playersAccountUpgradeGroup.getName())) { Group playerGroup = Main.luckPermsApi.getGroupManager().getGroup(playerGroupName); + if (playerGroup == null) { throw new RuntimeException("Le groupe " + playerGroupName + " n'existe pas !"); } @@ -130,6 +132,7 @@ public class PlayedTimeHandler implements dataHandler { if (playerGroup.getWeight().getAsInt() < playersAccountUpgradeGroup.getWeight().getAsInt()) { ConsoleLog.info(ChatColor.GREEN + player.getName() + ChatColor.LIGHT_PURPLE + " a débloqué le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.LIGHT_PURPLE + "!"); User playerLuckPerms = Main.luckPermsApi.getUserManager().getUser(player.getUniqueId()); + if (playerLuckPerms == null) { throw new RuntimeException("LuckPerms ne semble pas disposer de donnée sur le joueur " + player.getName() + " UUID:" + player.getUniqueId()); } @@ -140,6 +143,7 @@ public class PlayedTimeHandler implements dataHandler { Main.luckPermsApi.getUserManager().saveUser(playerLuckPerms); int requiredPlayedTimeInHours = requiredPlayedTimeForUpgradingPlayersAccount / 60 / 60; + player.sendMessage(ChatColor.GREEN + "Bravo et un grand merci à toi " + ChatColor.YELLOW + player.getName() + ChatColor.GREEN + "!"); player.sendMessage(ChatColor.GREEN + "Tu as joué pendant plus de" + ChatColor.GOLD + requiredPlayedTimeInHours + "H " + ChatColor.GREEN + "sur le serveur !!!"); player.sendMessage("Pour te récompenser, nous te donnons le rôle des joueurs " + ChatColor.GOLD + "habitués" + ChatColor.RESET + "!"); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java index 68b1056..65d755e 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java @@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.parallelTasks.dataHandlers; import com.slprojects.slcraftplugin.Main; import com.slprojects.slcraftplugin.utils.ConsoleLog; +import com.slprojects.slcraftplugin.utils.Database; import org.bukkit.ChatColor; import org.bukkit.Statistic; import org.bukkit.entity.Player; @@ -73,36 +74,19 @@ public class PlayerDataHandler implements dataHandler { // Fonctions private boolean insertPlayerName(Player player) { - boolean returnValue = false; - try { - // On va d'abord regarder si on a déjà renseigné le nom du joueur - PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'playerName' AND value = ?"); - rechercheUtilisateur.setString(1, player.getUniqueId().toString()); - rechercheUtilisateur.setString(2, player.getName()); - ResultSet resultat = rechercheUtilisateur.executeQuery(); + String savedPlayerName = Database.getUserSetting(player.getUniqueId().toString(), "playerName"); - if (resultat.next()) { - returnValue = true; - // On a déjà renseigné le nom du joueur on va donc vérifier s'il a besoin d'être mis à jour - if (!resultat.getString("value").equals(player.getName())) { - // On va mettre à jour le nom du joueur - PreparedStatement updateUtilisateur = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'playerName'"); - updateUtilisateur.setString(1, player.getName()); - updateUtilisateur.setString(2, player.getUniqueId().toString()); - updateUtilisateur.executeUpdate(); - } - } else { - // On peut insérer le nom du joueur - PreparedStatement insertUtilisateur = con.prepareStatement("INSERT INTO site_userSetting (uuid, name, value) VALUES (?, 'playerName', ?)"); - insertUtilisateur.setString(1, player.getUniqueId().toString()); - insertUtilisateur.setString(2, player.getName()); - insertUtilisateur.executeQuery(); + if (savedPlayerName != null) { + // On a déjà renseigné le nom du joueur on va donc vérifier s'il a besoin d'être mis à jour + if (!savedPlayerName.equals(player.getName())) { + Database.setUserSetting(player.getUniqueId().toString(), "playerName", player.getName()); } - } catch (SQLException e) { - ConsoleLog.warning("Func savePlayerData::insertPlayerName(Player player)"); - e.printStackTrace(); + return true; + } else { + // On peut insérer le nom du joueur + Database.setUserSetting(player.getUniqueId().toString(), "playerName", player.getName()); + return false; } - return returnValue; } private void statsPlayerEntryExit(Player player, boolean isEnter) { @@ -121,51 +105,56 @@ public class PlayerDataHandler implements dataHandler { 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'"); - rechercheUtilisateur.setString(1, player.getUniqueId().toString()); - ResultSet resultat = rechercheUtilisateur.executeQuery(); + String joinedDate = Database.getUserSetting(player.getUniqueId().toString(), "joinedDate"); - if (!resultat.next()) { + if (joinedDate == null) { // On n'a pas renseigné la date de création du joueur if (player.hasPlayedBefore()) { // On va piocher la date d'inscription chez CoreProtect (si elle existe) // On la prend chez CoreProtect car le plugin a été installé dans les premières semaines du serveur. Il a donc bcp plus de données que nous concernant les anciens joueurs. PreparedStatement rechercheDateInscription = con.prepareStatement("SELECT time FROM co_user WHERE uuid = ?"); rechercheDateInscription.setString(1, player.getUniqueId().toString()); - resultat = rechercheDateInscription.executeQuery(); + ResultSet resultat = rechercheDateInscription.executeQuery(); if (resultat.next()) { // 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(LocalDateTime.ofEpochSecond(Long.parseLong(resultat.getString("time")), 0, ZoneOffset.UTC)).toString()); // Il faut convertir le timestamp (epoch second) en date - insertionDateInscription.executeQuery(); + Database.setUserSetting(player.getUniqueId().toString(), + "joinedDate", + java.sql.Timestamp.valueOf( + LocalDateTime.ofEpochSecond( + Long.parseLong(resultat.getString("time")), + 0, + ZoneOffset.UTC + ) + ).toString() + ); // On va précisier que la date d'inscription a été trouvée chez CoreProtect ConsoleLog.info("Le joueur " + ChatColor.GOLD + player.getName() + ChatColor.RESET + " n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs. On lui a donc attribué comme date de création du compte, celle que détenait CoreProtect."); } else { // On insère la date d'inscription (du coup on considère que Le joueur n'a pas joué avant, malgré la condition) - 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.executeQuery(); + Database.setUserSetting( + player.getUniqueId().toString(), + "joinedDate", + java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString() + ); // On va préciser que la date d'inscription n'a pas été trouvée chez CoreProtect - PreparedStatement insertionInaccurrateJoinedDate = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'inaccurrateJoinedDate',?)"); - insertionInaccurrateJoinedDate.setString(1, player.getUniqueId().toString()); - insertionInaccurrateJoinedDate.setString(2, "true"); - insertionInaccurrateJoinedDate.executeQuery(); + Database.setUserSetting(player.getUniqueId().toString(), + "inaccurrateJoinedDate", + "true" + ); // On est daccord que ceci n'est pas censé arriver, cela ne concerne que mes potes n'étant venus que durant les premières semaines du serveur. - ConsoleLog.info("Le joueur " + ChatColor.GOLD + player.getName() + ChatColor.RESET + " n'avait pas de données sur sa date d'inscription dans dans la table des paramètres utilisateurs, ni dans la table des utilisateurs de CoreProtect. On lui a donc attribué comme date de création du compte, la date du début de sa partie."); } } else { // 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, Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); - insertionDateInscription.executeQuery(); + Database.setUserSetting( + player.getUniqueId().toString(), + "joinedDate", + java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString() + ); } } } catch (SQLException e) { @@ -175,30 +164,7 @@ public class PlayerDataHandler implements dataHandler { } void setPlayerJoinCount(Player player) { - try { - // On va vérifier si on a déjà renseigné le nombre de fois que le joueur a rejoint le serveur par le passé - PreparedStatement rechercheJoinCount = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joins'"); - rechercheJoinCount.setString(1, player.getUniqueId().toString()); - ResultSet resultat = rechercheJoinCount.executeQuery(); - - if (resultat.next()) { - // On a déjà renseigné ça par le passé, on va donc faire un update - PreparedStatement updateJoinCount = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'joins'"); - updateJoinCount.setString(1, String.valueOf(player.getStatistic(Statistic.LEAVE_GAME) + 1)); - updateJoinCount.setString(2, player.getUniqueId().toString()); - updateJoinCount.executeQuery(); - } else { - // On n'a pas encore renseigné le nombre de fois que le joueur a rejoint le serveur, on va donc faire un insert - PreparedStatement insertionJoinCount = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joins',?)"); - insertionJoinCount.setString(1, player.getUniqueId().toString()); - insertionJoinCount.setString(2, String.valueOf(player.getStatistic(Statistic.LEAVE_GAME) + 1)); - insertionJoinCount.executeQuery(); - } - - } catch (SQLException e) { - ConsoleLog.warning("Func savePlayerData::setPlayerJoinCount(Player player)"); - e.printStackTrace(); - } + Database.setUserSetting(player.getUniqueId().toString(), "joins", String.valueOf(player.getStatistic(Statistic.LEAVE_GAME) + 1)); } private List<Object> getPlayerWildCmdStats(Player player) { @@ -206,83 +172,55 @@ public class PlayerDataHandler implements dataHandler { // - 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(); + String playerLastUsed = Database.getUserSetting(player.getUniqueId().toString(), "wildCmdLastUsed"); - if (lastUsedResult.next()) { - LocalDateTime lastUsed = Timestamp.valueOf(lastUsedResult.getString("value")).toLocalDateTime(); - if (ChronoUnit.HOURS.between(lastUsed, LocalDateTime.now()) > 24) { + if (playerLastUsed != null) { + LocalDateTime lastUsed = Timestamp.valueOf(playerLastUsed).toLocalDateTime(); + if (ChronoUnit.HOURS.between(lastUsed, LocalDateTime.now()) > 24) { + return new ArrayList<>() { + { + add(0); + add(lastUsed); + } + }; + } else { + String playerAskNum = Database.getUserSetting(player.getUniqueId().toString(), "wildCmdAskNum"); + + if (playerAskNum != null) { return new ArrayList<>() { { - add(0); + add(Integer.valueOf(playerAskNum)); 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<>() { - { - add(Integer.valueOf(askNumResult.getString("value"))); - add(lastUsed); - } - }; - } else { - ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); - ConsoleLog.warning("Fonctionnement anormal! On dispose de la date de 'wildCmdLastUsed' mais pas de 'wildCmdAskNum' pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); - ConsoleLog.warning("Passage de 'wildCmdAskNum' à 0."); - return new ArrayList<>() { - { - add(0); - add(lastUsed); - } - }; - } + ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); + ConsoleLog.warning("Fonctionnement anormal! On dispose de la date de 'wildCmdLastUsed' mais pas de 'wildCmdAskNum' pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); + ConsoleLog.warning("Passage de 'wildCmdAskNum' à 0."); + return new ArrayList<>() { + { + add(0); + add(lastUsed); + } + }; } - } else { - plugin.getLogger().info("Mise à jour du joueur " + player.getName() + " UUID: " + player.getUniqueId()); - ConsoleLog.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<>() { - { - add(0); - add(dateBidon); - } - }; } - - } catch (SQLException e) { - ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); - e.printStackTrace(); + } else { + ConsoleLog.info("Mise à jour du joueur " + player.getName() + " UUID: " + player.getUniqueId()); + ConsoleLog.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")); + + Database.setUserSetting(player.getUniqueId().toString(), "wildCmdLastUsed", Timestamp.valueOf(dateBidon).toString()); + Database.setUserSetting(player.getUniqueId().toString(), "wildCmdAskNum", "0"); + return new ArrayList<>() { + { + add(0); + add(dateBidon); + } + }; } - - ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); - ConsoleLog.warning("Fonctionnement anormal! La recherche dans la bdd a échouée pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); - ConsoleLog.warning("Passage de 'wildCmdLastUsed' au 11 décembre 2001 et 'wildCmdAskNum' à 0"); - - return new ArrayList<>() { - { - 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) { @@ -290,22 +228,9 @@ public class PlayerDataHandler implements dataHandler { // - 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) { - ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); - e.printStackTrace(); - } + // On va zapper la vérification de présence car on suppose que la commande getWildCmdStats avait réussie + Database.setUserSetting(player.getUniqueId().toString(), "wildCmdAskNum", String.valueOf(stats.get(0))); + Database.setUserSetting(player.getUniqueId().toString(), "wildCmdLastUsed", Timestamp.valueOf((LocalDateTime) stats.get(1)).toString()); } public boolean playerAlreadyJoined(Player player) { -- GitLab