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