diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 339a82e3adcda0856bbbca85f3d780709c9813f9..22a9058dae1845023b76f38bb4b925d829ab5fe1 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -11,11 +11,6 @@
       <option name="name" value="sonatype" />
       <option name="url" value="https://oss.sonatype.org/content/groups/public/" />
     </remote-repository>
-    <remote-repository>
-      <option name="id" value="central" />
-      <option name="name" value="Maven Central repository" />
-      <option name="url" value="https://repo1.maven.org/maven2" />
-    </remote-repository>
     <remote-repository>
       <option name="id" value="papermc-repo" />
       <option name="name" value="papermc-repo" />
@@ -26,6 +21,11 @@
       <option name="name" value="placeholderapi" />
       <option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" />
     </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
     <remote-repository>
       <option name="id" value="jboss.community" />
       <option name="name" value="JBoss Community repository" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6f19b7ef0b23c73c83364de2b2f25bfe51dbc291..b390bb4ca4224596bdb9456084d43d635622f529 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,19 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="EntryPointsManager">
+    <entry_points version="2.0">
+      <entry_point TYPE="field" FQNAME="com.slprojects.slcraftplugin.Main periodicEvent" />
+    </entry_points>
     <list size="1">
       <item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" />
     </list>
+    <pattern value="com.slprojects.slcraftplugin.Main" method="AsyncChatEvent" />
+    <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" />
+    <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" method="joinEvent" />
+    <pattern value="com.slprojects.slcraftplugin.Main" />
+    <pattern value="com.slprojects.slcraftplugin.Main" method="onPlayerJoin" />
+    <pattern value="com.slprojects.slcraftplugin.Main" method="onPlayerQuit" />
+    <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" method="quitEvent" />
   </component>
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="MavenProjectsManager">
diff --git a/SLCraftPlugin.iml b/SLCraftPlugin.iml
deleted file mode 100644
index f5de878b032bd6930370a575e7ca458c9c77e1bf..0000000000000000000000000000000000000000
--- a/SLCraftPlugin.iml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<module version="4">
-  <component name="FacetManager">
-    <facet type="minecraft" name="Minecraft">
-      <configuration>
-        <autoDetectTypes>
-          <platformType>PAPER</platformType>
-          <platformType>ADVENTURE</platformType>
-        </autoDetectTypes>
-      </configuration>
-    </facet>
-  </component>
-</module>
\ No newline at end of file
diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java b/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java
index 677fffd3b38a0c15b341a351da8cf6fb6fc3ed70..986a2946b345ed51beac9bb1421a09d9fd3124e0 100644
--- a/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java
+++ b/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java
@@ -20,13 +20,22 @@ public class WildReset implements CommandExecutor {
         this.plugin = plugin;
     }
 
+    /**
+     * Commande /wildreset
+     *
+     * @param sender CommandSender
+     * @param command Command
+     * @param label String
+     * @param args String[]
+     * @return boolean
+     */
     @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>() {
+                    List<Object> reset = new ArrayList<>() {
                         {
                             add(0);
                             add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java
index de66ecd94735595a3347c575fc0e166ed039cc29..7b80a8a9a9ef373814410e7674e29a4c0042ba99 100644
--- a/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java
+++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java
@@ -25,6 +25,15 @@ public class LinkCode implements CommandExecutor {
         this.plugin = plugin;
     }
 
+    /**
+     * Commande /linkcode
+     *
+     * @param sender CommandSender
+     * @param command Command
+     * @param label String
+     * @param args String[]
+     * @return boolean
+     */
     @Override
     public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
         if (sender instanceof Player) {
diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java
index 91360661092677f4cbcae29d3ae6ff6447e783c3..6976261a79ebf9ce2b136dd41a0489a09c87b004 100644
--- a/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java
+++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java
@@ -34,6 +34,11 @@ public class Wild implements CommandExecutor {
     private final List<String> excludedBiomes;
     private final String wildWorld;
 
+    /**
+     * Commande /wild
+     *
+     * @param plugin Main
+     */
     @SuppressWarnings("unchecked")
     public Wild(Main plugin) {
         // On récupère la classe parente pour les paramètres
@@ -163,7 +168,7 @@ public class Wild implements CommandExecutor {
             // Indexes:
             // - 0: Nombre d'utilisation du jour
             // - 1: Date de la dernière commande
-            List<Object> stats = new ArrayList<Object>();
+            List<Object> stats = new ArrayList<>();
             stats.add(wildUsersAskNum.get(playerIndex));
             stats.add(wildUsersLastAsked.get(playerIndex));
             return stats;
diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java
index ad65a2f81bd719e5ce7a4f2dff0944b3c0d3db08..8de54d6011026744a77c52a430de67daa1fd2037 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java
@@ -15,6 +15,11 @@ import java.net.URLDecoder;
 import java.net.URLEncoder;
 
 public class InternalWebServer {
+    /**
+     * Lance le serveur web intégré
+     *
+     * @param plugin Instance du plugin
+     */
     @SuppressWarnings({"unchecked", "InfiniteLoopStatement"})
     public static void startServer(Main plugin) {
         int serverPort = plugin.getConfig().getInt("internal-webserver-port");
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 024989bec864e8569b46870dfe7114f80a70713c..8358b74af1ee76dc51f8ffc624b3cfb91b2c3d76 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java
@@ -27,6 +27,11 @@ public class PlayedTimeHandler implements dataHandler {
     private final int requiredPlayedTimeForUpgradingPlayersAccount;
     private final Group playersAccountUpgradeGroup;
 
+    /**
+     * Gère le temps de jeu des joueurs
+     *
+     * @param plugin Plugin
+     */
     public PlayedTimeHandler(Main plugin) {
         this.plugin = plugin;
         String playersAccountUpgradeRole = plugin.getConfig().getString("stats.players-account-upgrade-role");
@@ -46,6 +51,11 @@ public class PlayedTimeHandler implements dataHandler {
         }
     }
 
+    /**
+     * Gestion de l'arrivée d'un joueur
+     *
+     * @param player Joueur
+     */
     @Override
     public void joinEvent(Player player) {
         usersIndexes.add(player.getUniqueId());
@@ -65,11 +75,21 @@ public class PlayedTimeHandler implements dataHandler {
         }
     }
 
+    /**
+     * Gestion de la déconnexion d'un joueur
+     *
+     * @param player Joueur
+     */
     @Override
     public void quitEvent(Player player) {
         savePlayedTime(player); // On actualise le temps de jeu du joueur
     }
 
+    /**
+     * Sauvegarde le temps de jeu du joueur
+     *
+     * @param player Joueur
+     */
     public void savePlayedTime(Player player) {
         // On va calculer le temps de jeu du joueur
         UUID playerUuid = player.getUniqueId();
@@ -84,6 +104,11 @@ public class PlayedTimeHandler implements dataHandler {
         checkPlayerTime(player);
     }
 
+    /**
+     * Vérifie si le joueur a débloqué le rôle habitué
+     *
+     * @param player Joueur
+     */
     public void checkPlayerTime(Player player) {
         // On va calculer le temps de jeu du joueur
         UUID playerUuid = player.getUniqueId();
@@ -131,7 +156,7 @@ public class PlayedTimeHandler implements dataHandler {
                         plugin.sendMessageToDiscord("Un grand merci à toi qui a passé plus de 20H de jeu sur le serveur!  ❤");
 
                         // Feux d'artifices
-                        GeneralEvents.fireworkSoundEffect(player, plugin);
+                        GeneralEvents.playFireworkSoundEffect(player, plugin);
                     }
                 } else {
                     ConsoleLog.danger("Impossible de vérifier la priorité du ou des rôles suivants : " + playerGroupName + " & " + playersAccountUpgradeGroup.getName());
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 f54650ef1e74cfdeb8c103cbd743255ac0be8d1d..68b1056b9b9162f7011076c090dd738c8eea2968 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java
@@ -214,7 +214,7 @@ public class PlayerDataHandler implements dataHandler {
             if (lastUsedResult.next()) {
                 LocalDateTime lastUsed = Timestamp.valueOf(lastUsedResult.getString("value")).toLocalDateTime();
                 if (ChronoUnit.HOURS.between(lastUsed, LocalDateTime.now()) > 24) {
-                    return new ArrayList<Object>() {
+                    return new ArrayList<>() {
                         {
                             add(0);
                             add(lastUsed);
@@ -226,7 +226,7 @@ public class PlayerDataHandler implements dataHandler {
                     ResultSet askNumResult = playerAskNum.executeQuery();
 
                     if (askNumResult.next()) {
-                        return new ArrayList<Object>() {
+                        return new ArrayList<>() {
                             {
                                 add(Integer.valueOf(askNumResult.getString("value")));
                                 add(lastUsed);
@@ -236,7 +236,7 @@ public class PlayerDataHandler implements dataHandler {
                         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<Object>() {
+                        return new ArrayList<>() {
                             {
                                 add(0);
                                 add(lastUsed);
@@ -260,7 +260,7 @@ public class PlayerDataHandler implements dataHandler {
                 insertWildCmdAskNum.setString(2, "0");
                 insertWildCmdAskNum.executeQuery();
 
-                return new ArrayList<Object>() {
+                return new ArrayList<>() {
                     {
                         add(0);
                         add(dateBidon);
@@ -277,7 +277,7 @@ public class PlayerDataHandler implements dataHandler {
         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<Object>() {
+        return new ArrayList<>() {
             {
                 add(0);
                 add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
index fe0ed5bfe46530b8fe74f86cf77f0b71f483b1d3..dc3a8030bd31889affeedd04140395f8a2e0f3d1 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java
@@ -8,7 +8,13 @@ import org.bukkit.scheduler.BukkitRunnable;
 import java.util.Random;
 
 public class GeneralEvents {
-    public static void fireworkSoundEffect(Player player, Main plugin) {
+    /**
+     * Joue un son de feu d'artifice
+     *
+     * @param player Joueur
+     * @param plugin Plugin
+     */
+    public static void playFireworkSoundEffect(Player player, Main plugin) {
         int min = 1;
         int max = 25;
         Random random = new Random();
diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java
index ec65540fe63204d8d0e30fa2ecdcc14da491d332..96524c96f1e93f52752af65f55d6e7c17fb55483 100644
--- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java
+++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java
@@ -9,12 +9,20 @@ public class PeriodicEvent {
     private boolean doesTheEventIsCurrentlyRunning = false;
     private final int periodicEventCallTime;
 
+    /**
+     * Évènement périodique
+     *
+     * @param plugin Plugin
+     */
     public PeriodicEvent(Main plugin) {
         this.plugin = plugin;
         startPeriodicEvent();
         periodicEventCallTime = plugin.getConfig().getInt("periodic-event-call-time") * plugin.getConfig().getInt("ticks-per-seconds");
     }
 
+    /**
+     * Lance l'évènement périodique
+     */
     public void startPeriodicEvent() {
         if (doesTheEventIsCurrentlyRunning)
             throw new RuntimeException("L'exécution de l'évènement périodique est déjà enclanchée.");
@@ -29,6 +37,9 @@ public class PeriodicEvent {
         }.runTaskLater(plugin, (periodicEventCallTime));
     }
 
+    /**
+     * Évènement périodique
+     */
     private void periodicEvent() {
         for (Player player : plugin.getServer().getOnlinePlayers()) {
             plugin.playerDataHandler.playedTimeHandler.savePlayedTime(player);
diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java b/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java
index e863c61c18cf348ef50692ae89279a36f8bd4c10..3d8a85c5d3fd5cbcee6579f8fe8ca4386ab0182c 100644
--- a/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java
+++ b/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java
@@ -6,18 +6,38 @@ import org.bukkit.ChatColor;
 import static org.bukkit.Bukkit.getServer;
 
 public class ConsoleLog {
+    /**
+     * Envoyer un message d'information dans la console.
+     *
+     * @param message Message à envoyer
+     */
     public static void info(String message) {
         getServer().getConsoleSender().sendMessage("[" + Main.pluginName + "] " + message);
     }
 
+    /**
+     * Envoyer un message d'avertissement dans la console.
+     *
+     * @param message Message à envoyer
+     */
     public static void warning(String message) {
         getServer().getConsoleSender().sendMessage(ChatColor.GOLD + "[" + Main.pluginName + "] " + message);
     }
 
+    /**
+     * Envoyer un message d'erreur dans la console.
+     *
+     * @param message Message à envoyer
+     */
     public static void danger(String message) {
         getServer().getConsoleSender().sendMessage(ChatColor.RED + "[" + Main.pluginName + "] " + message);
     }
 
+    /**
+     * Envoyer un message de succès dans la console.
+     *
+     * @param message Message à envoyer
+     */
     public static void success(String message) {
         getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[" + Main.pluginName + "] " + message);
     }
diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java
index 54aee618c3e5d706f2aecd117f6b68a14ac6cefb..dcf76b99e2769939fa41469cb1b47478b4fc8ba7 100644
--- a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java
+++ b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java
@@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.utils;
 
 import com.slprojects.slcraftplugin.Main;
 import org.bukkit.configuration.file.FileConfiguration;
+import org.bukkit.plugin.Plugin;
 import org.mariadb.jdbc.MariaDbPoolDataSource;
 
 import java.sql.Connection;
@@ -15,18 +16,31 @@ import static org.bukkit.Bukkit.getServer;
 public class Database {
     static final private String userSettingsTabName = "site_userSetting";
 
+    /**
+     * Récupère une valeur dans la table site_userSetting
+     *
+     * @param uuid UUID du joueur
+     * @param key  Nom de la clé
+     * @return Valeur de la clé
+     */
     public static String getUserSetting(String uuid, String key) {
-        Connection con = bddOpenConn();
+        Connection con;
+        try {
+            con = bddOpenConn();
+        } catch (SQLException e) {
+            ConsoleLog.danger("Impossible d'ouvrir la connexion à la bdd.");
+            throw new RuntimeException(e);
+        }
         String returnValue = null;
 
         try {
             PreparedStatement query = con.prepareStatement("SELECT * FROM " + userSettingsTabName + " WHERE uuid = ? AND name = ?");
             query.setString(1, uuid);
             query.setString(2, key);
-            ResultSet resultat = query.executeQuery();
+            ResultSet result = query.executeQuery();
 
-            if (resultat.next()) {
-                returnValue = resultat.getString("value");
+            if (result.next()) {
+                returnValue = result.getString("value");
             }
         } catch (SQLException e) {
             ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
@@ -42,9 +56,21 @@ public class Database {
         return returnValue;
     }
 
-    public static boolean setUserSetting(String uuid, String key, String value) {
-        Connection con = bddOpenConn();
-        boolean isOperationASuccess = false;
+    /**
+     * Ajoute ou modifie une valeur dans la table site_userSetting
+     *
+     * @param uuid  UUID du joueur
+     * @param key   Nom de la clé
+     * @param value Valeur de la clé
+     */
+    public static void setUserSetting(String uuid, String key, String value) {
+        Connection con;
+        try {
+            con = bddOpenConn();
+        } catch (SQLException e) {
+            ConsoleLog.danger("Impossible d'ouvrir la connexion à la bdd.");
+            throw new RuntimeException(e);
+        }
         boolean isEntryExists = (getUserSetting(uuid, key) != null);
 
         try {
@@ -54,12 +80,12 @@ public class Database {
                 updateEntry.setString(2, uuid);
                 updateEntry.setString(3, key);
                 updateEntry.executeUpdate();
-                isOperationASuccess = true;
             } else {
-                isOperationASuccess = insertUserSettingEntry(uuid, key, value);
+                insertUserSettingEntry(uuid, key, value);
             }
         } catch (SQLException e) {
-            ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
+            ConsoleLog.danger("Erreur lors de l'exécution de la requête sql.");
+            throw new RuntimeException(e);
         }
 
         // On ferme la bdd
@@ -67,15 +93,25 @@ public class Database {
             con.close();
         } catch (SQLException e) {
             ConsoleLog.danger("Impossible de fermer la connexion à la bdd.");
-            e.printStackTrace();
+            throw new RuntimeException(e);
         }
-
-        return isOperationASuccess;
     }
 
-    private static boolean insertUserSettingEntry(String uuid, String key, String value) {
-        Connection con = bddOpenConn();
-        boolean isOperationASuccess = false;
+    /**
+     * Ajoute une entrée dans la table site_userSetting
+     *
+     * @param uuid  UUID du joueur
+     * @param key   Nom de la clé
+     * @param value Valeur de la clé
+     */
+    private static void insertUserSettingEntry(String uuid, String key, String value) {
+        Connection con;
+        try {
+            con = bddOpenConn();
+        } catch (SQLException e) {
+            ConsoleLog.danger("Erreur lors de l'ouverture de la connexion à la bdd.");
+            throw new RuntimeException(e);
+        }
 
         try {
             PreparedStatement insertEntry = con.prepareStatement("INSERT INTO site_userSetting (uuid, name, value) VALUES (?, ?, ?)");
@@ -83,9 +119,9 @@ public class Database {
             insertEntry.setString(2, key);
             insertEntry.setString(3, value);
             insertEntry.executeQuery();
-            isOperationASuccess = true;
         } catch (SQLException e) {
-            ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e);
+            ConsoleLog.danger("Erreur lors de l'exécution de la requête sql.");
+            throw new RuntimeException(e);
         }
 
         // On ferme la bdd
@@ -93,30 +129,47 @@ public class Database {
             con.close();
         } catch (SQLException e) {
             ConsoleLog.danger("Impossible de fermer la connexion à la bdd.");
-            e.printStackTrace();
+            throw new RuntimeException(e);
         }
-
-        return isOperationASuccess;
     }
 
-    public static Connection bddOpenConn() {
-        FileConfiguration config = getServer().getPluginManager().getPlugin(Main.pluginName).getConfig();
-        Connection conn = null;
-
-        try {
-            Class.forName("org.mariadb.jdbc.MariaDbPoolDataSource");
-        } catch (ClassNotFoundException e) {
-            ConsoleLog.danger("Il manque le driver MariaDB!");
+    /**
+     * Ouvre une connexion à la base de données
+     *
+     * @return Connection
+     */
+    public static Connection bddOpenConn() throws SQLException {
+        Plugin plugin = getServer().getPluginManager().getPlugin(Main.pluginName);
+        if (plugin == null) {
+            throw new IllegalStateException("Le plugin " + Main.pluginName + " n'a pas été trouvé.");
         }
 
-        try {
-            MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource("jdbc:mariadb://" + config.getString("database.host") + "/" + config.getString("database.database") + "?user=" + config.getString("database.user") + "&password=" + config.getString("database.password") + "&maxPoolSize=10");
-            conn = dataSource.getConnection();
-            //ConsoleLog.success("Connexion à la base de données réussie!");
-        } catch (SQLException e) {
-            ConsoleLog.danger("Erreur lors de la connexion à la base de données.");
+        FileConfiguration config = plugin.getConfig();
+
+        String connectionString = "jdbc:mariadb://" + config.getString("database.host");
+        connectionString += "/" + config.getString("database.database");
+        connectionString += "?user=" + config.getString("database.user");
+        connectionString += "&password=" + config.getString("database.password");
+        connectionString += "&maxPoolSize=10";
+
+        MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource(connectionString);
+
+        try (Connection conn = dataSource.getConnection()) {
+            if (!conn.isValid(1000)) {
+                throw new SQLException("Could not establish database connection.");
+            }
         }
 
-        return conn;
+        testDataSource(dataSource);
+
+        return dataSource.getConnection();
+    }
+
+    private static void testDataSource(MariaDbPoolDataSource dataSource) throws SQLException {
+        try (Connection conn = dataSource.getConnection()) {
+            if (!conn.isValid(1000)) {
+                throw new SQLException("Erreur lors de la connexion à la base de données.");
+            }
+        }
     }
 }