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