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

1.5.2

parent e6e53412
No related branches found
No related tags found
No related merge requests found
Showing
with 153 additions and 108 deletions
File added
File added
......@@ -6,7 +6,7 @@
<groupId>com.slprojects</groupId>
<artifactId>SLCraftPlugin</artifactId>
<version>1.5.1</version>
<version>1.5.2</version>
<packaging>jar</packaging>
<name>SLCraftPlugin</name>
......
......@@ -32,6 +32,7 @@ import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
......@@ -65,10 +66,10 @@ public final class Main extends JavaPlugin implements Listener {
wildCommandActiveUsers = new ArrayList<>();
wildCommand wildCommand = new wildCommand(this);
getCommand("wild").setExecutor(wildCommand);
Objects.requireNonNull(getCommand("wild")).setExecutor(wildCommand);
linkCodeCommand linkCodeCommand = new linkCodeCommand(this);
getCommand("getLinkCode").setExecutor(linkCodeCommand);
Objects.requireNonNull(getCommand("getLinkCode")).setExecutor(linkCodeCommand);
waitForDiscordMsg.startServer(this);
......@@ -80,17 +81,17 @@ public final class Main extends JavaPlugin implements Listener {
// Plugin shutdown logic
getLogger().info(ChatColor.RED+"SL-Craft | Plugin éteint");
getServer().getOnlinePlayers().forEach(player -> {
savePlayerData.saveOnQuit(player);
});
getServer().getOnlinePlayers().forEach(player -> savePlayerData.saveOnQuit(player));
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent e) {
// On désactive le message par défaut
e.joinMessage(null);
savePlayerData.saveOnJoin(e.getPlayer());
// On affiche le message de bienvenue
String welcomeMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-join-message"));
String welcomeMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), Objects.requireNonNull(getConfig().getString("player-join-message")));
// Et on joue un petit son chez tous les joueurs
for(Player p : getServer().getOnlinePlayers()){
p.sendMessage(welcomeMessage);
......@@ -103,8 +104,10 @@ public final class Main extends JavaPlugin implements Listener {
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerQuit(PlayerQuitEvent e) {
// On désactive le message par défaut
e.quitMessage(null);
savePlayerData.saveOnQuit(e.getPlayer());
String quitMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), getConfig().getString("player-quit-message"));
String quitMessage = PlaceholderAPI.setPlaceholders(e.getPlayer(), Objects.requireNonNull(getConfig().getString("player-quit-message")));
for(Player p : getServer().getOnlinePlayers()){
p.sendMessage(quitMessage);
}
......@@ -113,20 +116,35 @@ public final class Main extends JavaPlugin implements Listener {
// 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) throws UnsupportedEncodingException {
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());
String urlString = "http://node.sl-projects.com:27001/mc/chat/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
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")){
getLogger().info("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();
}
}
// Permet de faire des appels vers l'api discord
public String getHttp(String urlString) {
String returnData = "";
// 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("Accept-Language", "fr-FR,fr;q=0.5");
con.setRequestProperty("Content-Type", "application/json");
con.setDoOutput(true);
con.setDoInput(true);
......@@ -137,16 +155,22 @@ public final class Main extends JavaPlugin implements Listener {
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());
returnData = response.toString();
} catch (Exception ex) {
getLogger().warning(ChatColor.RED + "Impossible de se connecter à l'url " + urlString + ". Func getHttp(String urlString)");
ex.printStackTrace();
}
return returnData;
}
// Propre à la commande wild: évite les spams de la commande
......
......@@ -66,7 +66,7 @@ public class linkCodeCommand implements CommandExecutor {
}
player.sendMessage("Utilise ce code pour lier ton compte: "+ChatColor.GREEN+generatedString);
player.sendMessage(ChatColor.GRAY+"Ce code à usage unique expirera dans 5 minutes.");
plugin.getLogger().info("Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a généré le code "+ChatColor.GREEN+generatedString+ChatColor.RESET+ChatColor.GRAY+" - Il expirera le "+java.sql.Timestamp.valueOf(LocalDateTime.now().plusMinutes(5)).toString());
plugin.getLogger().info("Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a généré le code "+ChatColor.GREEN+generatedString+ChatColor.RESET+ChatColor.GRAY+" - Il expirera le "+ java.sql.Timestamp.valueOf(LocalDateTime.now().plusMinutes(5)));
}catch (Exception e){
e.printStackTrace();
......
......@@ -9,16 +9,17 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import static java.lang.Math.abs;
public class wildCommand implements CommandExecutor {
// Variables
private Main plugin;
private final Main plugin;
public wildCommand(Main plugin){
......@@ -27,7 +28,8 @@ public class wildCommand implements CommandExecutor {
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
@SuppressWarnings("unchecked")
public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) {
// On vérifie que la commande a bien été lancée par un joueur
if (sender instanceof Player) {
Player player = (Player) sender;
......@@ -41,7 +43,7 @@ public class wildCommand implements CommandExecutor {
plugin.getLogger().info("Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.GREEN+"accepté");
// on récupère la liste des biomes exclus
List<String> excludedBiomes = new ArrayList<String>();
List<String> excludedBiomes;
excludedBiomes = (List<String>) plugin.getConfig().getList("excluded-biomes");
player.sendMessage("§6Téléportation vers une coordonnée aléatoire.");
......@@ -58,13 +60,13 @@ public class wildCommand implements CommandExecutor {
flag=false;
x = r.nextInt(high-low) + low;
z = r.nextInt(high-low) + low;
y = Bukkit.getWorld(plugin.getConfig().getString("world")).getHighestBlockYAt(x, z);
y = Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world")))).getHighestBlockYAt(x, z);
y++; // On incrémente la pos Y pour éviter que le joueur se retrouve dans le sol
for (String excludedBiome : excludedBiomes) {
for (String excludedBiome : Objects.requireNonNull(excludedBiomes)) {
try{
Biome.valueOf(excludedBiome.toUpperCase());
if (Bukkit.getWorld(plugin.getConfig().getString("world")).getBiome(x, y, z).equals(Biome.valueOf(excludedBiome.toUpperCase()))) {
if (Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world")))).getBiome(x, y, z).equals(Biome.valueOf(excludedBiome.toUpperCase()))) {
flag = true;
}
}catch(Exception ignored){}
......@@ -72,7 +74,7 @@ public class wildCommand implements CommandExecutor {
}
// On téléporte le joueur
Location loc = new Location(Bukkit.getWorld(plugin.getConfig().getString("world")), x, y, z, 0, 0);
Location loc = new Location(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world"))), x, y, z, 0, 0);
player.teleport(loc);
int maxVal = Math.max(abs(x), abs(z));
......@@ -86,11 +88,9 @@ public class wildCommand implements CommandExecutor {
}
// Vu qu'il y a un sleep et que ça bloque le thread, on va exécuter la fonction dans un thread
Runnable runnableRemoveActiveUser = new Runnable() {
public void run() {
Runnable runnableRemoveActiveUser = () -> {
// On retire le joueur de la liste des utilisateurs en attente
plugin.removeActiveUserForWildCommand(player.getUniqueId());
}
};
new Thread(runnableRemoveActiveUser).start();
......
......@@ -7,22 +7,20 @@ import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.URLEncoder;
public class waitForDiscordMsg {
@SuppressWarnings({ "unchecked", "InfiniteLoopStatement" })
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() {
Runnable serverThread = () -> {
try {
ServerSocket serverSocket = new ServerSocket(serverPort);
while (true) {
......@@ -65,9 +63,7 @@ public class waitForDiscordMsg {
// On récupère le nom de la commande
String commandName = split2[1];
switch (commandName) {
case "discordMsg":
// On récupère le message
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();
......@@ -78,8 +74,7 @@ public class waitForDiscordMsg {
}
plugin.getLogger().info(ChatColor.DARK_PURPLE + playerName + ": " + message);
out.print("Message envoyé !");
break;
default:
} else {
out.print("La commande \"" + commandName + "\" n'est pas reconnue.\r\n");
}
}
......@@ -94,14 +89,32 @@ public class waitForDiscordMsg {
} catch (IOException e) {
plugin.getLogger().info(ChatColor.RED + "Erreur lors de l'écoute du port " + ChatColor.GOLD + serverPort);
e.printStackTrace();
// On va logger le message sur discord
JSONObject json = new JSONObject();
json.put("desc", "Erreur lors de l'écoute du port " + serverPort);
json.put("message", e.getMessage());
String urlString = null;
try {
urlString = plugin.getConfig().getString("discordBot-api-url") + "mc/error/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
relaunchListener(plugin);
} catch (UnsupportedEncodingException ex) {
plugin.getLogger().info(ChatColor.RED + "Erreur lors de l'encodage du message. Func waitForDiscordMsg::startServer(Main plugin)");
ex.printStackTrace();
}
plugin.getHttp(urlString);
} catch (ParseException e) {
e.printStackTrace();
}
}
};
new Thread(serverThread).start();
}
public static void relaunchListener(Main plugin) {
// On relance la fonction avec une latence
startServer(plugin);
}
}
......@@ -29,3 +29,7 @@ player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
# Serveur messagerie
msg-server-port: 25575
msg-verbose: false
# API Bot Discord
discordBot-api-url: "http://node.sl-projects.com:27001/"
\ No newline at end of file
No preview for this file type
No preview for this file type
File deleted
No preview for this file type
......@@ -29,3 +29,7 @@ player-quit-message: "&a%player_name% &fvient de quitter le serveur :'("
# Serveur messagerie
msg-server-port: 25575
msg-verbose: false
# API Bot Discord
discordBot-api-url: "http://node.sl-projects.com:27001/"
\ No newline at end of file
name: SLCraftPlugin
version: '1.5.1'
version: '1.5.2'
main: com.slprojects.slcraftplugin.Main
depend: [PlaceholderAPI]
api-version: 1.18
......
#Generated by Maven
#Mon Mar 07 20:27:25 CET 2022
#Wed Mar 09 23:27:16 CET 2022
groupId=com.slprojects
artifactId=SLCraftPlugin
version=1.5.1
version=1.5.2
com\slprojects\slcraftplugin\commandes\wildCommand$1.class
com\slprojects\slcraftplugin\tachesParalleles\savePlayerData.class
com\slprojects\slcraftplugin\commandes\wildCommand.class
com\slprojects\slcraftplugin\Main.class
com\slprojects\slcraftplugin\commandes\linkCodeCommand.class
com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg.class
com\slprojects\slcraftplugin\tachesParalleles\waitForDiscordMsg$1.class
C:\Users\sofia\Documents\Minecraft Plugin Workspace\SL-Craft Plugin\src\main\java\com\slprojects\slcraftplugin\tachesParalleles\savePlayerData.java
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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment