From 692abb227bb262804dc4c05042d7af969f5e8549 Mon Sep 17 00:00:00 2001
From: SofianeLasri <alasri250@gmail.com>
Date: Mon, 2 May 2022 22:13:39 +0200
Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20de=20getPlayers,=20ne=20fonctio?=
 =?UTF-8?q?nne=20pas=20lorsqu'il=20n'y=20a=20pas=20de=20joueurs.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .idea/SL-Craft Plugin.iml                     |   8 +-
 .idea/misc.xml                                |   2 +-
 .idea/uiDesigner.xml                          | 124 ++++++++++++++++++
 pom.xml                                       |   2 +-
 .../com/slprojects/slcraftplugin/Main.java    |  88 +++++++++----
 ...DiscordMsg.java => internalWebServer.java} |  46 ++++---
 src/main/resources/config.yml                 |   2 +-
 .../com/slprojects/slcraftplugin/Main.class   | Bin 12378 -> 13761 bytes
 target/classes/config.yml                     |   2 +-
 target/classes/plugin.yml                     |   2 +-
 target/maven-archiver/pom.properties          |   4 +-
 .../compile/default-compile/createdFiles.lst  |   2 +-
 .../compile/default-compile/inputFiles.lst    |   2 +-
 13 files changed, 229 insertions(+), 55 deletions(-)
 create mode 100644 .idea/uiDesigner.xml
 rename src/main/java/com/slprojects/slcraftplugin/tachesParalleles/{waitForDiscordMsg.java => internalWebServer.java} (69%)

diff --git a/.idea/SL-Craft Plugin.iml b/.idea/SL-Craft Plugin.iml
index 027874e..f5de878 100644
--- a/.idea/SL-Craft Plugin.iml	
+++ b/.idea/SL-Craft Plugin.iml	
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<module type="JAVA_MODULE" version="4">
+<module version="4">
   <component name="FacetManager">
     <facet type="minecraft" name="Minecraft">
       <configuration>
@@ -10,10 +10,4 @@
       </configuration>
     </facet>
   </component>
-  <component name="NewModuleRootManager" inherit-compiler-output="true">
-    <exclude-output />
-    <content url="file://$MODULE_DIR$" />
-    <orderEntry type="inheritedJdk" />
-    <orderEntry type="sourceFolder" forTests="false" />
-  </component>
 </module>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 85df9ea..6f19b7e 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -13,5 +13,5 @@
       </list>
     </option>
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="17" project-jdk-type="JavaSDK" />
 </project>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000..e96534f
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 9d59155..cb20f23 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.slprojects</groupId>
     <artifactId>SLCraftPlugin</artifactId>
-    <version>1.5.3</version>
+    <version>1.6.0</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 80257c8..31e1752 100644
--- a/src/main/java/com/slprojects/slcraftplugin/Main.java
+++ b/src/main/java/com/slprojects/slcraftplugin/Main.java
@@ -3,7 +3,7 @@ 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 com.slprojects.slcraftplugin.tachesParalleles.internalWebServer;
 import me.clip.placeholderapi.PlaceholderAPI;
 import org.bukkit.ChatColor;
 import org.bukkit.Sound;
@@ -57,6 +57,7 @@ public final class Main extends JavaPlugin implements Listener {
         saveDefaultConfig();
         reloadConfig();
         config = getConfig();
+        updateConfig();
         savePlayerData = new savePlayerData(this);
 
         // On initialise la base de donnée
@@ -69,7 +70,7 @@ public final class Main extends JavaPlugin implements Listener {
         linkCodeCommand linkCodeCommand = new linkCodeCommand(this);
         Objects.requireNonNull(getCommand("getLinkCode")).setExecutor(linkCodeCommand);
 
-        waitForDiscordMsg.startServer(this);
+        internalWebServer.startServer(this);
 
         getServer().getConsoleSender().sendMessage(ChatColor.GREEN+"SL-Craft | Plugin démarré");
     }
@@ -96,8 +97,8 @@ public final class Main extends JavaPlugin implements Listener {
             if(getConfig().getBoolean("player-join-playSound")){
                 p.playSound(p.getLocation(), Sound.ENTITY_EXPERIENCE_ORB_PICKUP, 1, 0);
             }
-            //p.sendMessage(welcomeMessage);
         }
+        sendMessageToDiscord("**"+e.getPlayer().getName()+"** vient de rejoindre le serveur");
     }
 
     @EventHandler(priority = EventPriority.HIGHEST)
@@ -109,28 +110,15 @@ public final class Main extends JavaPlugin implements Listener {
         for(Player p : getServer().getOnlinePlayers()){
             p.sendMessage(quitMessage);
         }
+        sendMessageToDiscord("**"+e.getPlayer().getName()+"** a quitté le serveur");
     }
 
     // On renvoie chaque message des joueurs sur le canal de chat du serveur discord
     @SuppressWarnings({"unchecked", "deprecation"})
     @EventHandler(priority = EventPriority.LOWEST)
     void AsyncChatEvent(AsyncPlayerChatEvent e) {
-        // On va appeler l'api du bot discord
-        JSONObject json = new JSONObject();
-        json.put("message", e.getMessage());
-        json.put("username", e.getPlayer().getName());
-
-        try {
-            String urlString = config.getString("discordBot-api-url") + "mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
-
-            String response = getHttp(urlString);
-            if(getConfig().getBoolean("msg-verbose")){
-                getServer().getConsoleSender().sendMessage("Func AsyncChatEvent(PlayerChatEvent e), HTTP response:" + response);
-            }
-        } catch (UnsupportedEncodingException ex) {
-            getLogger().warning(ChatColor.RED + "Impossible de d'encoder les données. Func AsyncChatEvent(PlayerChatEvent e)");
-            ex.printStackTrace();
-        }
+        // On envoie le message sur discord
+        sendMessageToDiscord(e.getMessage(), e.getPlayer().getName());
     }
 
     // Permet de faire des appels vers l'api discord
@@ -164,13 +152,44 @@ public final class Main extends JavaPlugin implements Listener {
             con.disconnect();
             returnData = response.toString();
         } catch (Exception ex) {
-            getLogger().warning(ChatColor.RED + "Impossible de se connecter à l'url " + urlString + ". Func getHttp(String urlString)");
+            getServer().getConsoleSender().sendMessage(ChatColor.RED + "Impossible de se connecter à l'url " + urlString + ". Func getHttp(String urlString)");
             ex.printStackTrace();
         }
 
         return returnData;
     }
 
+    // Envoyer un message sur le discord
+    @SuppressWarnings({"unchecked"})
+    public void sendMessageToDiscord(String message, String username){
+        // On va vérifier que le joueur ne fait pas de @everyone ou de @here
+        message = message.replace("<@everyone>", "**everyone**");
+        message = message.replace("<@here>", "**here**");
+        message = message.replace("@everyone", "**everyone**");
+        message = message.replace("@here", "**here**");
+
+        // On forme le JSON
+        JSONObject json = new JSONObject();
+        json.put("message", message);
+        json.put("username", username);
+
+        // On va appeler l'api du bot discord
+        try {
+            String urlString = config.getString("discordBot-api-url") + "mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
+
+            String response = getHttp(urlString);
+            if(getConfig().getBoolean("msg-verbose")){
+                getServer().getConsoleSender().sendMessage("Func AsyncChatEvent(PlayerChatEvent e), HTTP response:" + response);
+            }
+        } catch (UnsupportedEncodingException ex) {
+            getLogger().warning(ChatColor.RED + "Impossible de d'encoder les données. Func AsyncChatEvent(PlayerChatEvent e)");
+            ex.printStackTrace();
+        }
+    }
+    public void sendMessageToDiscord(String message){
+        sendMessageToDiscord(message, "SL-Craft");
+    }
+
     // Propre à la commande wild: évite les spams de la commande
     public boolean checkActiveUserForWildCommand(UUID playerUuid){
         if(wildCommandActiveUsers.contains(playerUuid)){
@@ -196,7 +215,7 @@ public final class Main extends JavaPlugin implements Listener {
         try {
             Class.forName("org.mariadb.jdbc.MariaDbPoolDataSource");
         } catch (ClassNotFoundException e){
-            getLogger().warning (ChatColor.RED+"Il manque le driver MariaDB!");
+            getServer().getConsoleSender().sendMessage (ChatColor.RED+"Il manque le driver MariaDB!");
             getServer().getPluginManager().disablePlugin(this);
         }
         try {
@@ -205,11 +224,34 @@ public final class Main extends JavaPlugin implements Listener {
             //getLogger().info(ChatColor.GREEN+"Connexion à la base de données réussie!");
         }// ou les saisir
         catch (SQLException e) {
-            getLogger().warning(ChatColor.RED+"Erreur lors de la connexion à la base de données.");
+            getServer().getConsoleSender().sendMessage(ChatColor.RED+"Erreur lors de la connexion à la base de données.");
             getServer().getPluginManager().disablePlugin(this);
         }
         return conn;
     }
+    
+    private void updateConfig(){
+        getLogger().info("Vérification du fichier de configuration...");
+        // On va vérifier si l'on dispose de la nouvelle variable du port du serveur web
+        if(config.contains("msg-server-port")){
+            getLogger().info("Mise à jour du paramètre 'internal-webserver-port'");
+            // Et on va regarder si on a l'ancienne en mémoire
+            if(config.contains("internal-webserver-port")){
+                // On va copier l'ancienne valeur dans la nouvelle
+                config.set("internal-webserver-port", config.getString("msg-server-port"));
+                // Et on va supprimer l'ancienne
+                config.set("msg-server-port", null);
+            }else{
+                // On va mettre la valeur par défaut
+                config.addDefault("internal-webserver-port", 25566);
+
+            }
+
+            config.options().copyDefaults(true);
+            saveConfig();
+            reloadConfig();
+        }
+    }
 
     private void initDatabase(){
         try{
@@ -232,7 +274,7 @@ public final class Main extends JavaPlugin implements Listener {
             ps.executeQuery();
             con.close();
         }catch(Exception e){
-            getLogger().warning(ChatColor.RED+"Erreur lors de l'exécution de initDatabase(): "+e);
+            getServer().getConsoleSender().sendMessage(ChatColor.RED+"Erreur lors de l'exécution de initDatabase(): "+e);
         }
     }
 }
diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java
similarity index 69%
rename from src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java
rename to src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java
index 9c38df8..267ac51 100644
--- a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java
+++ b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/internalWebServer.java
@@ -3,6 +3,7 @@ package com.slprojects.slcraftplugin.tachesParalleles;
 import com.slprojects.slcraftplugin.Main;
 import org.bukkit.ChatColor;
 import org.bukkit.entity.Player;
+import org.json.simple.JSONArray;
 import org.json.simple.JSONObject;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
@@ -13,12 +14,12 @@ import java.net.Socket;
 import java.net.URLDecoder;
 import java.net.URLEncoder;
 
-public class waitForDiscordMsg {
+public class internalWebServer {
     @SuppressWarnings({ "unchecked", "InfiniteLoopStatement" })
     public static void startServer(Main plugin){
-        int serverPort = plugin.getConfig().getInt("msg-server-port");
+        int serverPort = plugin.getConfig().getInt("internal-webserver-port");
 
-        plugin.getServer().getConsoleSender().sendMessage("Écoute des messages Discord sur le port " + ChatColor.GOLD + serverPort);
+        plugin.getServer().getConsoleSender().sendMessage("Lancement du serveur web intégré sur le port " + ChatColor.GOLD + serverPort);
         // On fait un thread pour écouter le port
         Runnable serverThread = () -> {
             try {
@@ -63,19 +64,32 @@ public class waitForDiscordMsg {
                             // On récupère le nom de la commande
                             String commandName = split2[1];
 
-                            if ("discordMsg".equals(commandName)) {// On récupère le message
-                                JSONObject json = (JSONObject) new JSONParser().parse(URLDecoder.decode(split2[2], "UTF-8"));
-                                String message = json.get("message").toString();
-                                String playerName = json.get("playerName").toString();
-
-                                // On envoie le message aux joueurs
-                                for (Player p : plugin.getServer().getOnlinePlayers()) {
-                                    p.sendMessage(ChatColor.DARK_PURPLE + playerName + ChatColor.WHITE + ": " + message);
-                                }
-                                plugin.getServer().getConsoleSender().sendMessage(ChatColor.DARK_PURPLE + playerName + ": " + message);
-                                out.print("Message envoyé !");
-                            } else {
-                                out.print("La commande \"" + commandName + "\" n'est pas reconnue.\r\n");
+                            switch (commandName) {
+                                case "discordMsg":
+                                    JSONObject json = (JSONObject) new JSONParser().parse(URLDecoder.decode(split2[2], "UTF-8"));
+                                    String message = json.get("message").toString();
+                                    String playerName = json.get("playerName").toString();
+
+                                    // On envoie le message aux joueurs
+                                    for (Player p : plugin.getServer().getOnlinePlayers()) {
+                                        p.sendMessage(ChatColor.DARK_PURPLE + playerName + ChatColor.WHITE + ": " + message);
+                                    }
+                                    plugin.getServer().getConsoleSender().sendMessage(ChatColor.DARK_PURPLE + playerName + ": " + message);
+                                    out.print("Message envoyé !");
+                                    break;
+                                case "getPlayers":
+                                    // On renvoie la liste des joueurs
+                                    JSONObject listToReturn = new JSONObject();
+                                    JSONArray players = new JSONArray();
+                                    for (Player p : plugin.getServer().getOnlinePlayers()) {
+                                        players.add(p.getName());
+                                    }
+                                    listToReturn.put("players", players);
+                                    out.print(listToReturn.toJSONString());
+                                    break;
+                                default:
+                                    out.print("La commande \"" + commandName + "\" n'est pas reconnue.\r\n");
+                                    break;
                             }
                         }
                     }
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index 442ce83..cf2d839 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -28,7 +28,7 @@ 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: 25575
+internal-webserver-port: 25575
 msg-verbose: false
 
 # API Bot Discord
diff --git a/target/classes/com/slprojects/slcraftplugin/Main.class b/target/classes/com/slprojects/slcraftplugin/Main.class
index 3ebfd74f46a879f7dbb7c90892bc31187cd9b28a..d0f07666ca3782cf5fc3dc6d748f28e12d7fbe6e 100644
GIT binary patch
delta 6360
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

delta 5219
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

diff --git a/target/classes/config.yml b/target/classes/config.yml
index 442ce83..cf2d839 100644
--- a/target/classes/config.yml
+++ b/target/classes/config.yml
@@ -28,7 +28,7 @@ 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: 25575
+internal-webserver-port: 25575
 msg-verbose: false
 
 # API Bot Discord
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
index 70a23ac..a78256c 100644
--- a/target/classes/plugin.yml
+++ b/target/classes/plugin.yml
@@ -1,5 +1,5 @@
 name: SLCraftPlugin
-version: '1.5.3'
+version: '1.6.0'
 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 097f81d..ae5e44b 100644
--- a/target/maven-archiver/pom.properties
+++ b/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
 #Generated by Maven
-#Sun Apr 03 12:10:13 CEST 2022
+#Thu Apr 07 19:00:13 CEST 2022
 artifactId=SLCraftPlugin
 groupId=com.slprojects
-version=1.5.3
+version=1.6.0
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
index acea625..6ab406d 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
@@ -1,5 +1,5 @@
 com\slprojects\slcraftplugin\tachesParalleles\savePlayerData.class
 com\slprojects\slcraftplugin\commandes\wildCommand.class
 com\slprojects\slcraftplugin\Main.class
+com\slprojects\slcraftplugin\tachesParalleles\internalWebServer.class
 com\slprojects\slcraftplugin\commandes\linkCodeCommand.class
-com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg.class
diff --git a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
index af03a36..21c846c 100644
--- a/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
+++ b/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -1,5 +1,5 @@
-D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg.java
 D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\commandes\wildCommand.java
 D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\commandes\linkCodeCommand.java
+D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\tachesParalleles\internalWebServer.java
 D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\Main.java
 D:\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\tachesParalleles\savePlayerData.java
-- 
GitLab