From 38bcd103c9df91ccbc992df7740dd790a67471de Mon Sep 17 00:00:00 2001
From: SofianeLasri <alasri250@gmail.com>
Date: Sun, 6 Mar 2022 17:44:46 +0100
Subject: [PATCH] pre 1.5

---
 pom.xml                                       |   2 +-
 .../com/slprojects/slcraftplugin/Main.java    |  79 +++++++++++++++---
 .../tachesParalleles/waitForDiscordMsg.java   |  69 +++++++++++++++
 src/main/resources/config.yml                 |   5 +-
 .../com/slprojects/slcraftplugin/Main.class   | Bin 14946 -> 17345 bytes
 target/classes/config.yml                     |   5 +-
 target/classes/plugin.yml                     |   2 +-
 target/maven-archiver/pom.properties          |   4 +-
 .../compile/default-compile/createdFiles.lst  |   4 +-
 .../compile/default-compile/inputFiles.lst    |   1 +
 10 files changed, 154 insertions(+), 17 deletions(-)
 create mode 100644 src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java

diff --git a/pom.xml b/pom.xml
index c886200..8855c8e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
 
     <groupId>com.slprojects</groupId>
     <artifactId>SLCraftPlugin</artifactId>
-    <version>1.4</version>
+    <version>1.5</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 45f9473..3a01b31 100644
--- a/src/main/java/com/slprojects/slcraftplugin/Main.java
+++ b/src/main/java/com/slprojects/slcraftplugin/Main.java
@@ -4,6 +4,8 @@ package com.slprojects.slcraftplugin;
 
 import com.slprojects.slcraftplugin.commandes.linkCodeCommand;
 import com.slprojects.slcraftplugin.commandes.wildCommand;
+import com.slprojects.slcraftplugin.tachesParalleles.waitForDiscordMsg;
+import me.clip.placeholderapi.PlaceholderAPI;
 import org.bukkit.ChatColor;
 import org.bukkit.Sound;
 import org.bukkit.Statistic;
@@ -12,13 +14,23 @@ import org.bukkit.entity.Player;
 import org.bukkit.event.EventHandler;
 import org.bukkit.event.EventPriority;
 import org.bukkit.event.Listener;
+import org.bukkit.event.player.AsyncPlayerChatEvent;
 import org.bukkit.event.player.PlayerJoinEvent;
 import org.bukkit.event.player.PlayerQuitEvent;
 import org.bukkit.plugin.java.JavaPlugin;
 import org.json.simple.JSONObject;
 import org.mariadb.jdbc.MariaDbPoolDataSource;
 
-import java.sql.*;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.HttpURLConnection;
+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;
@@ -27,8 +39,6 @@ import java.util.List;
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
 
-import me.clip.placeholderapi.PlaceholderAPI;
-
 import static java.lang.Integer.parseInt;
 
 public final class Main extends JavaPlugin implements Listener {
@@ -68,6 +78,8 @@ public final class Main extends JavaPlugin implements Listener {
         linkCodeCommand linkCodeCommand = new linkCodeCommand(this);
         getCommand("getLinkCode").setExecutor(linkCodeCommand);
 
+        waitForDiscordMsg.startServer(this);
+
         getLogger().info(ChatColor.GREEN+"SL-Craft | Plugin démarré");
     }
 
@@ -105,6 +117,46 @@ public final class Main extends JavaPlugin implements Listener {
         }
     }
 
+    // On renvoie chaque message des joueurs sur le canal de chat du serveur discord
+    @SuppressWarnings("unchecked")
+    @EventHandler(priority = EventPriority.LOWEST)
+    void AsyncChatEvent(AsyncPlayerChatEvent e) throws UnsupportedEncodingException {
+        // On va appeler l'api du bot discord
+        JSONObject json = new JSONObject();
+        json.put("message", e.getMessage());
+        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);
+            HttpURLConnection con = (HttpURLConnection) url.openConnection();
+            con.setRequestMethod("GET");
+            con.setRequestProperty("User-Agent", "Mozilla/5.0");
+            con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
+            con.setRequestProperty("Content-Type", "application/json");
+            con.setDoOutput(true);
+            con.setDoInput(true);
+            con.setUseCaches(false);
+            con.setAllowUserInteraction(false);
+            con.setConnectTimeout(5000);
+            con.setReadTimeout(5000);
+            con.connect();
+            BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+            String inputLine;
+            StringBuilder response = new StringBuilder();
+            while ((inputLine = in.readLine()) != null) {
+                response.append(inputLine);
+            }
+            in.close();
+            con.disconnect();
+            getLogger().info(response.toString());
+        } catch (Exception ex) {
+            ex.printStackTrace();
+        }
+    }
+
     // Propre au compteur de temps de jeu
     @SuppressWarnings("unchecked")
     public void savePlayer(Player player) {
@@ -136,7 +188,7 @@ public final class Main extends JavaPlugin implements Listener {
         // On ouvre la bdd
         Connection con = bddOpenConn();
         try {
-            // On va regarder si l'utilisateur existe
+            // 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();
@@ -156,7 +208,7 @@ public final class Main extends JavaPlugin implements Listener {
                     insertionNbJoins.setString(2, target.get("joins").toString());
                     insertionNbJoins.executeQuery();
 
-                    // On va regarder si l'utilisateur a déjà joué avant (vu qu'on avait pas de données sur ce joueur)
+                    // 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.
@@ -172,9 +224,9 @@ public final class Main extends JavaPlugin implements Listener {
                             insertionDateInscription.executeQuery();
 
                             // On va précisier que la date d'inscription a été trouvée chez CoreProtect
-                            getLogger().info("L'utilisateur "+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.");
+                            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 l'utilisateur n'a pas joué avant, malgré la condition)
+                            // 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());
@@ -186,7 +238,7 @@ public final class Main extends JavaPlugin implements Listener {
                             insertionInaccurrateJoinedDate.setString(2, "true");
                             insertionInaccurrateJoinedDate.executeQuery();
                             
-                            getLogger().info("L'utilisateur "+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.");
+                            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
@@ -230,7 +282,7 @@ public final class Main extends JavaPlugin implements Listener {
                                 insertionDateInscription.executeQuery();
 
                                 // On va précisier que la date d'inscription a été trouvée chez CoreProtect
-                                getLogger().info("L'utilisateur "+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.");
+                                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',?)");
@@ -244,7 +296,7 @@ public final class Main extends JavaPlugin implements Listener {
                                 insertionInaccurrateJoinedDate.setString(2, "true");
                                 insertionInaccurrateJoinedDate.executeQuery();
 
-                                getLogger().info("L'utilisateur "+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.");
+                                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.");
                             }
                         }
 
@@ -325,4 +377,11 @@ public final class Main extends JavaPlugin implements Listener {
             getLogger().warning(ChatColor.RED+"Erreur lors de l'exécution de initDatabase(): "+e);
         }
     }
+
+    // API Spring
+    /*
+    @GetMapping("/discordMsg/{jsonEncodedString}")
+    void sendDiscordMessage(){
+
+    }*/
 }
diff --git a/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java
new file mode 100644
index 0000000..756a17b
--- /dev/null
+++ b/src/main/java/com/slprojects/slcraftplugin/tachesParalleles/waitForDiscordMsg.java
@@ -0,0 +1,69 @@
+package com.slprojects.slcraftplugin.tachesParalleles;
+
+import com.slprojects.slcraftplugin.Main;
+import org.bukkit.ChatColor;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.PrintWriter;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class waitForDiscordMsg {
+    public static void startServer(Main plugin){
+        int serverPort = plugin.getConfig().getInt("msg-server-port");
+
+        plugin.getLogger().info("Écoute des messages Discord sur le port " + ChatColor.GOLD + serverPort);
+        // On fait un thread pour écouter le port
+        Runnable serverThread = new Runnable() {
+            public void run() {
+                try {
+                    ServerSocket serverSocket = new ServerSocket(serverPort);
+                    while (true) {
+                        Socket client = serverSocket.accept();
+
+                        // Get input and output streams to talk to the client
+                        BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
+                        PrintWriter out = new PrintWriter(client.getOutputStream());
+
+                        // Start sending our reply, using the HTTP 1.1 protocol
+                        out.print("HTTP/1.1 200 \r\n"); // Version & status code
+                        out.print("Content-Type: text/plain\r\n"); // The type of data
+                        out.print("Connection: close\r\n"); // Will close stream
+                        out.print("\r\n"); // End of headers
+
+                        // Now, read the HTTP request from the client, and send it
+                        // right back to the client as part of the body of our
+                        // response. The client doesn't disconnect, so we never get
+                        // an EOF. It does sends an empty line at the end of the
+                        // headers, though. So when we see the empty line, we stop
+                        // reading. This means we don't mirror the contents of POST
+                        // requests, for example. Note that the readLine() method
+                        // works with Unix, Windows, and Mac line terminators.
+                        String line;
+                        while ((line = in.readLine()) != null) {
+                            if (line.length() == 0)
+                                break;
+                            out.print(line + "\r\n");
+                            plugin.getLogger().info(line);
+                        }
+
+                        // Close socket, breaking the connection to the client, and
+                        // closing the input and output streams
+                        out.close(); // Flush and close the output stream
+                        in.close(); // Close the input stream
+                        client.close(); // Close the socket itself
+                    }
+                } catch (IOException e) {
+                    plugin.getLogger().info(ChatColor.RED + "Erreur lors de l'écoute du port " + ChatColor.GOLD  + serverPort);
+                    e.printStackTrace();
+                }
+            }
+        };
+
+        new Thread(serverThread).start();
+
+
+    }
+}
diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml
index a7e69bc..4d1dd37 100644
--- a/src/main/resources/config.yml
+++ b/src/main/resources/config.yml
@@ -25,4 +25,7 @@ database:
 
 player-join-playSound: true
 player-join-message: "&a%player_name% &fa rejoint le serveur :D"
-player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
\ No newline at end of file
+player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
+
+# Serveur messagerie
+msg-server-port: 25566
\ 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 369cff01cfd21bed898d96352ea3e53d30472f15..7b8b54cb644d050ba3e31aa80c3f5e8263644ffd 100644
GIT binary patch
delta 8316
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

delta 6048
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
VV2Wa3VBlh4WQt~rWr}Bz1OTQMS8@OV

diff --git a/target/classes/config.yml b/target/classes/config.yml
index a7e69bc..4d1dd37 100644
--- a/target/classes/config.yml
+++ b/target/classes/config.yml
@@ -25,4 +25,7 @@ database:
 
 player-join-playSound: true
 player-join-message: "&a%player_name% &fa rejoint le serveur :D"
-player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
\ No newline at end of file
+player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
+
+# Serveur messagerie
+msg-server-port: 25566
\ No newline at end of file
diff --git a/target/classes/plugin.yml b/target/classes/plugin.yml
index 91a79f0..a3f955e 100644
--- a/target/classes/plugin.yml
+++ b/target/classes/plugin.yml
@@ -1,5 +1,5 @@
 name: SLCraftPlugin
-version: '1.4'
+version: '1.5'
 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 f16796f..d5775f3 100644
--- a/target/maven-archiver/pom.properties
+++ b/target/maven-archiver/pom.properties
@@ -1,5 +1,5 @@
 #Generated by Maven
-#Sat Mar 05 15:11:15 CET 2022
+#Sun Mar 06 17:00:16 CET 2022
 groupId=com.slprojects
 artifactId=SLCraftPlugin
-version=1.4
+version=1.5
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 06d0095..21d3155 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,4 +1,6 @@
+com\slprojects\slcraftplugin\commandes\wildCommand$1.class
 com\slprojects\slcraftplugin\commandes\wildCommand.class
 com\slprojects\slcraftplugin\Main.class
 com\slprojects\slcraftplugin\commandes\linkCodeCommand.class
-com\slprojects\slcraftplugin\commandes\wildCommand$1.class
+com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg.class
+com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg$1.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 2251861..64cb0dc 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,3 +1,4 @@
 C:\Users\sofia\Documents\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\commandes\wildCommand.java
 C:\Users\sofia\Documents\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\Main.java
 C:\Users\sofia\Documents\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\commandes\linkCodeCommand.java
+C:\Users\sofia\Documents\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg.java
-- 
GitLab