Skip to content
Snippets Groups Projects
Commit 692abb22 authored by Sofiane Lasri's avatar Sofiane Lasri
Browse files

Création de getPlayers, ne fonctionne pas lorsqu'il n'y a pas de joueurs.

parent cdde2036
No related branches found
No related tags found
No related merge requests found
Showing with 229 additions and 55 deletions
<?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
......@@ -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
<?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
......@@ -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>
......
......@@ -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,12 +224,35 @@ 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{
Connection con = bddOpenConn();
......@@ -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);
}
}
}
......@@ -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,7 +64,8 @@ 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
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();
......@@ -74,8 +76,20 @@ public class waitForDiscordMsg {
}
plugin.getServer().getConsoleSender().sendMessage(ChatColor.DARK_PURPLE + playerName + ": " + message);
out.print("Message envoyé !");
} else {
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;
}
}
}
......
......@@ -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
......
No preview for this file type
......@@ -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
......
name: SLCraftPlugin
version: '1.5.3'
version: '1.6.0'
main: com.slprojects.slcraftplugin.Main
depend: [PlaceholderAPI]
api-version: 1.18
......
#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
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
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment