diff --git a/pom.xml b/pom.xml index 8855c8e4953c9bc4d1cd75205dbdb61acd913309..606f94785b866c9271a5a94c7dff248840fcafe6 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ <groupId>com.slprojects</groupId> <artifactId>SLCraftPlugin</artifactId> - <version>1.5</version> + <version>1.5.1</version> <packaging>jar</packaging> <name>SLCraftPlugin</name> diff --git a/src/main/java/com/slprojects/slcraftplugin/Main.java b/src/main/java/com/slprojects/slcraftplugin/Main.java index 3f9025564247cdf03a6e2ceaedae4bb0928e2814..1d292c0718ff10a6de70b985cab03ced25a76c31 100644 --- a/src/main/java/com/slprojects/slcraftplugin/Main.java +++ b/src/main/java/com/slprojects/slcraftplugin/Main.java @@ -4,11 +4,11 @@ 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.waitForDiscordMsg; import me.clip.placeholderapi.PlaceholderAPI; import org.bukkit.ChatColor; import org.bukkit.Sound; -import org.bukkit.Statistic; import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; @@ -29,24 +29,17 @@ import java.net.URL; import java.net.URLEncoder; import java.sql.Connection; import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; -import java.time.Duration; -import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; -import static java.lang.Integer.parseInt; - public final class Main extends JavaPlugin implements Listener { // Variables private List<UUID> wildCommandActiveUsers; - private List<UUID> playTimeUsersIndexes; - private List<LocalDateTime> playTimeUsersDate; private static FileConfiguration config; + private com.slprojects.slcraftplugin.tachesParalleles.savePlayerData savePlayerData; // Fonctions appelées à des évènements clés @Override @@ -65,13 +58,12 @@ public final class Main extends JavaPlugin implements Listener { saveDefaultConfig(); reloadConfig(); config = getConfig(); + savePlayerData = new savePlayerData(this); // On initialise la base de donnée initDatabase(); wildCommandActiveUsers = new ArrayList<>(); - playTimeUsersIndexes = new ArrayList<>(); - playTimeUsersDate = new ArrayList<>(); wildCommand wildCommand = new wildCommand(this); getCommand("wild").setExecutor(wildCommand); @@ -88,13 +80,14 @@ public final class Main extends JavaPlugin implements Listener { // Plugin shutdown logic getLogger().info(ChatColor.RED+"SL-Craft | Plugin éteint"); - getServer().getOnlinePlayers().forEach(this::savePlayer); + getServer().getOnlinePlayers().forEach(player -> { + savePlayerData.saveOnQuit(player); + }); } @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerJoin(PlayerJoinEvent e) { - playTimeUsersIndexes.add(e.getPlayer().getUniqueId()); - playTimeUsersDate.add(LocalDateTime.now()); + savePlayerData.saveOnJoin(e.getPlayer()); // On affiche le message de bienvenue String welcomeMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-join-message")); @@ -110,7 +103,7 @@ public final class Main extends JavaPlugin implements Listener { @EventHandler(priority = EventPriority.HIGHEST) public void onPlayerQuit(PlayerQuitEvent e) { - savePlayer(e.getPlayer()); + savePlayerData.saveOnQuit(e.getPlayer()); String quitMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-quit-message")); for(Player p : getServer().getOnlinePlayers()){ p.sendMessage(quitMessage); @@ -118,7 +111,7 @@ public final class Main extends JavaPlugin implements Listener { } // On renvoie chaque message des joueurs sur le canal de chat du serveur discord - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "deprecation"}) @EventHandler(priority = EventPriority.LOWEST) void AsyncChatEvent(AsyncPlayerChatEvent e) throws UnsupportedEncodingException { // On va appeler l'api du bot discord @@ -127,7 +120,6 @@ public final class Main extends JavaPlugin implements Listener { json.put("username", e.getPlayer().getName()); String urlString = "http://node.sl-projects.com:27001/mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20"); - getLogger().info(urlString); // Processus long et chiant try { URL url = new URL(urlString); @@ -157,162 +149,6 @@ public final class Main extends JavaPlugin implements Listener { } } - // Propre au compteur de temps de jeu - @SuppressWarnings("unchecked") - public void savePlayer(Player player) { - JSONObject target = new JSONObject(); - // On ajoute l'uuid et son nom - target.put("uuid", player.getUniqueId().toString()); - target.put("name", player.getName()); - - // La date de join (locale, au cas où CoreProtect ne l'a pas) - target.put("joinedDate", playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId())).toString()); - - // On calcule le temps de jeu - LocalDateTime timeNow = LocalDateTime.now(); - Duration duration = Duration.between(timeNow, playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId()))); - long playedTimeInSeconds = Math.abs(duration.toSeconds()); - - // On ajoute le temps de jeu au joueur - target.put("playedTime", playedTimeInSeconds); - - playTimeUsersDate.remove(playTimeUsersIndexes.indexOf(player.getUniqueId())); - playTimeUsersIndexes.remove(player.getUniqueId()); - - target.put("joins", player.getStatistic(Statistic.LEAVE_GAME) + 1); - target.put("hasPlayedBefore", player.hasPlayedBefore()); - writePlayer(target); - } - - private void writePlayer(JSONObject target) { - // On ouvre la bdd - Connection con = bddOpenConn(); - try { - // On va regarder si Le joueur existe - PreparedStatement rechercheUtilisateur = con.prepareStatement("SELECT COUNT(*) FROM site_userSetting WHERE uuid = ?"); - rechercheUtilisateur.setString(1, target.get("uuid").toString()); - ResultSet resultat = rechercheUtilisateur.executeQuery(); - if(resultat.next()) { - int playerExist = resultat.getInt(1); - - if(playerExist==0){ - // On insère la dernière date de join - PreparedStatement insertionLastJoin = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'playedTime',?)"); - insertionLastJoin.setString(1, target.get("uuid").toString()); - insertionLastJoin.setString(2, target.get("playedTime").toString()); - insertionLastJoin.executeQuery(); - - // On insère le nombre de connexions - PreparedStatement insertionNbJoins = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joins',?)"); - insertionNbJoins.setString(1, target.get("uuid").toString()); - insertionNbJoins.setString(2, target.get("joins").toString()); - insertionNbJoins.executeQuery(); - - // On va regarder si Le joueur a déjà joué avant (vu qu'on avait pas de données sur ce joueur) - if(target.get("hasPlayedBefore").toString().equals("true")){ - // 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, target.get("uuid").toString()); - 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, target.get("uuid").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(); - - // On va précisier que la date d'inscription a été trouvée chez CoreProtect - getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+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, target.get("uuid").toString()); - insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString()); - insertionDateInscription.executeQuery(); - - // 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, target.get("uuid").toString()); - insertionInaccurrateJoinedDate.setString(2, "true"); - insertionInaccurrateJoinedDate.executeQuery(); - - getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+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{ - // C'est un nouvel utilisateur, on peut lui attribuer la date d'inscription précédement calculée - PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)"); - insertionDateInscription.setString(1, target.get("uuid").toString()); - insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString()); - insertionDateInscription.executeQuery(); - } - }else{ - PreparedStatement tempsJeuJoueur = con.prepareStatement("SELECT value FROM site_userSetting WHERE uuid = ? AND name = 'playedTime'"); - tempsJeuJoueur.setString(1, target.get("uuid").toString()); - resultat = tempsJeuJoueur.executeQuery(); - if(resultat.next()) { - int totalPlayedTime = parseInt(resultat.getString(1)) + parseInt(target.get("playedTime").toString()); - PreparedStatement modifyPlayedTime = con.prepareStatement("UPDATE `site_userSetting` SET `value`=? WHERE `uuid`=? AND `name`='playedTime'"); - modifyPlayedTime.setInt(1, totalPlayedTime); - modifyPlayedTime.setString(2, target.get("uuid").toString()); - modifyPlayedTime.executeQuery(); - - PreparedStatement modifyNbJoins = con.prepareStatement("UPDATE `site_userSetting` SET `value`=? WHERE `uuid`=? AND `name`='joins'"); - modifyNbJoins.setString(1, target.get("joins").toString()); - modifyNbJoins.setString(2, target.get("uuid").toString()); - modifyNbJoins.executeQuery(); - - // On va regarder s'il a sa date d'inscription de renseignée - PreparedStatement rechercheDateInscription = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'joinedDate'"); - rechercheDateInscription.setString(1, target.get("uuid").toString()); - resultat = rechercheDateInscription.executeQuery(); - - if(!resultat.next()){ - // On va regarder si l'on dispose de sa date d'inscription chez CoreProtect - rechercheDateInscription = con.prepareStatement("SELECT time FROM co_user WHERE uuid = ?"); - rechercheDateInscription.setString(1, target.get("uuid").toString()); - 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, target.get("uuid").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(); - - // On va précisier que la date d'inscription a été trouvée chez CoreProtect - getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+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, comme précédement, on prend la date d'inscription locale) - PreparedStatement insertionDateInscription = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'joinedDate',?)"); - insertionDateInscription.setString(1, target.get("uuid").toString()); - insertionDateInscription.setString(2, java.sql.Timestamp.valueOf(target.get("joinedDate").toString()).toString()); - insertionDateInscription.executeQuery(); - - // 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, target.get("uuid").toString()); - insertionInaccurrateJoinedDate.setString(2, "true"); - insertionInaccurrateJoinedDate.executeQuery(); - - getLogger().info("Le joueur "+ChatColor.GOLD+target.get("name").toString()+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{ - getLogger().warning(ChatColor.RED+"Erreur, nous n'avons pas de resultats pour la requête: SELECT value FROM site_userSetting WHERE uuid = '"+target.get("uuid")+"' AND name = playedTime"); - } - } - }else{ - getLogger().warning(ChatColor.RED+"Erreur, nous n'avons pas de resultats pour la requête: SELECT COUNT(*) FROM site_userSetting WHERE uuid = '"+target.get("uuid").toString()+"' AND rownum = 1"); - } - con.close(); - } catch (Exception e) { - e.printStackTrace(); - } - } - // Propre à la commande wild: évite les spams de la commande public boolean checkActiveUserForWildCommand(UUID playerUuid){ if(wildCommandActiveUsers.contains(playerUuid)){ diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java new file mode 100644 index 0000000000000000000000000000000000000000..4dcd682f601f47ad1f6531123d701da6cb55e31f --- /dev/null +++ b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/savePlayerData.java @@ -0,0 +1,227 @@ +package com.slprojects.slcraftplugin.tachesParalleles; + +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.time.Duration; +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class savePlayerData { + private final Main plugin; + private Connection con; + // Playtime + private final List<UUID> playTimeUsersIndexes; + private final List<LocalDateTime> playTimeUsersDate; + + public savePlayerData(Main plugin){ + this.plugin = plugin; + playTimeUsersIndexes = new ArrayList<>(); + playTimeUsersDate = new ArrayList<>(); + } + + public void saveOnJoin(Player player) { + // On ouvre la bdd + con = plugin.bddOpenConn(); + + playTimeUsersIndexes.add(player.getUniqueId()); + 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 + setPlayerJoinCount(player); // On set le nombre de fois qu'il a rejoint + + // 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)"); + e.printStackTrace(); + } + } + + public void saveOnQuit(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 + + // On ferme la bdd + try { + con.close(); + } catch (SQLException e) { + plugin.getLogger().warning(ChatColor.RED + "Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnQuit(Player player)"); + e.printStackTrace(); + } + } + + // Fonctions + private void insertPlayerName(Player player){ + 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(); + + if(resultat.next()){ + // 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(); + } + } catch (SQLException e) { + plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::insertPlayerName(Player player)"); + e.printStackTrace(); + } + } + + private void playerAddPlayerEntryOrExit(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.executeQuery(); + } catch (SQLException e) { + plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::playerAddPlayerEntryOrExit(Player player, boolean isEnter)"); + e.printStackTrace(); + } + } + + private void checkJoinedDate(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(); + + if(!resultat.next()){ + // 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(); + + 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(); + + // On va précisier que la date d'inscription a été trouvée chez CoreProtect + plugin.getLogger().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(); + + // 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(); + + // 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. + + plugin.getLogger().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, java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()).toString()); + insertionDateInscription.executeQuery(); + } + } + } catch (SQLException e) { + plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::checkJoinedDate(Player player)"); + e.printStackTrace(); + } + } + + 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) { + plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::setPlayerJoinCount(Player player)"); + e.printStackTrace(); + } + } + + private void calculatePlayerPlayTime(Player player){ + // On va calculer le temps de jeu du joueur + LocalDateTime timeNow = LocalDateTime.now(); + Duration duration = Duration.between(timeNow, playTimeUsersDate.get(playTimeUsersIndexes.indexOf(player.getUniqueId()))); + long playedTimeInSeconds = Math.abs(duration.toSeconds()); + + try{ + // On va vérifier si on a déjà renseigné le temps de jeu du joueur par le passé + PreparedStatement recherchePlayTime = con.prepareStatement("SELECT * FROM site_userSetting WHERE uuid = ? AND name = 'playedTime'"); + recherchePlayTime.setString(1, player.getUniqueId().toString()); + ResultSet resultat = recherchePlayTime.executeQuery(); + + if(resultat.next()){ + // On a déjà renseigné ça par le passé, on va donc faire un update + PreparedStatement updatePlayTime = con.prepareStatement("UPDATE site_userSetting SET value = ? WHERE uuid = ? AND name = 'playedTime'"); + updatePlayTime.setString(1, String.valueOf(Long.parseLong(resultat.getString("value")) + playedTimeInSeconds)); + updatePlayTime.setString(2, player.getUniqueId().toString()); + updatePlayTime.executeQuery(); + }else{ + // On n'a pas encore renseigné le temps de jeu du joueur, on va donc faire un insert + PreparedStatement insertionPlayTime = con.prepareStatement("INSERT INTO site_userSetting (`uuid`, `name`, `value`) VALUES (?,'playedTime',?)"); + insertionPlayTime.setString(1, player.getUniqueId().toString()); + insertionPlayTime.setString(2, String.valueOf(playedTimeInSeconds)); + insertionPlayTime.executeQuery(); + } + + } catch (SQLException e) { + plugin.getLogger().warning(ChatColor.RED + "Func savePlayerData::increasePlayerPlayTime(Player player)"); + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java index 432d5ca4a9efade78c77473c1d90d209e04c1f64..f2e15bcc56f2352fca6b83205d1d436a85c6b882 100644 --- a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java +++ b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java @@ -74,8 +74,9 @@ public class waitForDiscordMsg { // On envoie le message aux joueurs for(Player p : plugin.getServer().getOnlinePlayers()){ - p.sendMessage(ChatColor.DARK_PURPLE + playerName + " : " + ChatColor.WHITE + message); + p.sendMessage(ChatColor.DARK_PURPLE + playerName + ChatColor.WHITE + ": " + message); } + plugin.getLogger().info(ChatColor.DARK_PURPLE + playerName + ": " + message); out.print("Message envoyé !"); break; default: diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index 4d1dd3742630df0626d89eb12da4380d6a01fe90..827723a62972cc47db614020255812a01f30a4db 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -28,4 +28,4 @@ player-join-message: "&a%player_name% &fa rejoint le serveur :D" player-quit-message: "&a%player_name% &fvient de quitter le serveur :'(" # Serveur messagerie -msg-server-port: 25566 \ No newline at end of file +msg-server-port: 25575 \ No newline at end of file diff --git a/target/classes/com/slprojects/slcraftplugin/Main.class b/target/classes/com/slprojects/slcraftplugin/Main.class index 7b8b54cb644d050ba3e31aa80c3f5e8263644ffd..7986bf8f35deeba66e788eadeffc166b28a7a87f 100644 Binary files a/target/classes/com/slprojects/slcraftplugin/Main.class and b/target/classes/com/slprojects/slcraftplugin/Main.class differ diff --git a/target/classes/config.yml b/target/classes/config.yml index 4d1dd3742630df0626d89eb12da4380d6a01fe90..827723a62972cc47db614020255812a01f30a4db 100644 --- a/target/classes/config.yml +++ b/target/classes/config.yml @@ -28,4 +28,4 @@ player-join-message: "&a%player_name% &fa rejoint le serveur :D" player-quit-message: "&a%player_name% &fvient de quitter le serveur :'(" # Serveur messagerie -msg-server-port: 25566 \ No newline at end of file +msg-server-port: 25575 \ No newline at end of file diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml index a3f955ee76b1d9a9b100aead91d862c90735fe62..057d35f833276c033f1fb03847171b3b5431988f 100644 --- a/target/classes/plugin.yml +++ b/target/classes/plugin.yml @@ -1,5 +1,5 @@ name: SLCraftPlugin -version: '1.5' +version: '1.5.1' main: com.slprojects.slcraftplugin.Main depend: [PlaceholderAPI] api-version: 1.18 diff --git a/target/maven-archiver/pom.properties b/target/maven-archiver/pom.properties index c71773897f9123eebdacb8109ee81ab2914f245a..df790c89dfca6f52ceaa12ff47f7718e84707f58 100644 --- a/target/maven-archiver/pom.properties +++ b/target/maven-archiver/pom.properties @@ -1,5 +1,5 @@ #Generated by Maven -#Sun Mar 06 22:53:05 CET 2022 +#Mon Mar 07 20:27:25 CET 2022 groupId=com.slprojects artifactId=SLCraftPlugin -version=1.5 +version=1.5.1