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

Reste à sauvegarder les données dans la bdd.

parent 09747718
No related branches found
No related tags found
1 merge request!5Feature/23 regler wild
Pipeline #33 failed
......@@ -59,7 +59,7 @@ public final class Main extends JavaPlugin implements Listener {
// On initialise les listeners
getServer().getPluginManager().registerEvents(this, this);
} else {
getServer().getConsoleSender().sendMessage(ChatColor.RED+"[\"+ this.getName() +\"] PlaceholderAPI n'est pas accessible!");
getServer().getConsoleSender().sendMessage(ChatColor.RED+"["+ this.getName() +"] PlaceholderAPI n'est pas accessible!");
getServer().getPluginManager().disablePlugin(this);
}
......@@ -89,12 +89,11 @@ public final class Main extends JavaPlugin implements Listener {
// On initialise la base de donnée
initDatabase();
wildCommandActiveUsers = new ArrayList<>();
wildCommand wildCommand = new wildCommand(this);
Objects.requireNonNull(getCommand("wild")).setExecutor(wildCommand);
getCommand("wild").setExecutor(wildCommand);
linkCodeCommand linkCodeCommand = new linkCodeCommand(this);
Objects.requireNonNull(getCommand("getLinkCode")).setExecutor(linkCodeCommand);
getCommand("getLinkCode").setExecutor(linkCodeCommand);
internalWebServer.startServer(this);
......@@ -268,26 +267,6 @@ public final class Main extends JavaPlugin implements Listener {
sendMessageToDiscord(message, "SL-Craft");
}
// Propre à la commande wild: évite les spams de la commande
public boolean checkActiveUserForWildCommand(UUID playerUuid){
if(wildCommandActiveUsers.contains(playerUuid)){
return false;
}else{
wildCommandActiveUsers.add(playerUuid);
return true;
}
}
public void removeActiveUserForWildCommand(UUID playerUuid){
if(wildCommandActiveUsers.contains(playerUuid)){
try {
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
wildCommandActiveUsers.remove(playerUuid);
}
}
public Connection bddOpenConn() { // si mot de passe avec des caractère spéciaux
Connection conn=null;
try {
......@@ -310,11 +289,26 @@ public final class Main extends JavaPlugin implements Listener {
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
// 1.6.0
if(!config.contains("server-type")){
getLogger().info("Ajout de la variable serverType dans le fichier de configuration...");
config.set("server-type", "dev");
saveConfig();
reloadConfig();
}
if(config.contains("wild") && (config.contains("excluded-biomes") && config.contains("world") && config.contains("max-range"))){
getLogger().info("Mise à jour des paramètres concernant la commande /wild");
config.set("wild.excluded-biomes", config.get("excluded-biomes"));
config.set("wild.world", config.get("world"));
config.set("wild.max-range", config.get("max-range"));
config.set("excluded-biomes", null);
config.set("world", null);
config.set("max-range", null);
config.options().copyDefaults(true);
saveConfig();
reloadConfig();
......
......@@ -9,22 +9,39 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.util.List;
import java.util.Objects;
import java.util.Random;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.util.*;
import static java.lang.Math.abs;
public class wildCommand implements CommandExecutor {
// Variables
private final Main plugin;
private List<UUID> wildUsersIndexes;
private List<LocalDateTime> wildUsersLastAsked;
private List<Integer> wildUsersAskNum;
private List<Location> wildUsersStartLocation;
private final int usageCooldown;
private final int usagePerDay;
public wildCommand(Main plugin){
// On récupère la classe parente pour les paramètres
this.plugin = plugin;
wildUsersIndexes = new ArrayList<>();
wildUsersLastAsked = new ArrayList<>();
wildUsersAskNum = new ArrayList<>();
wildUsersStartLocation = new ArrayList<>();
usageCooldown = plugin.getConfig().getInt("wild.usage-cooldown");
usagePerDay = plugin.getConfig().getInt("wild.usage-per-day");
plugin.getServer().getConsoleSender().sendMessage("Instance de wild.");
}
@Override
......@@ -33,8 +50,35 @@ public class wildCommand implements CommandExecutor {
// On vérifie que la commande a bien été lancée par un joueur
if (sender instanceof Player) {
Player player = (Player) sender;
UUID playerUUID = player.getUniqueId();
int playerIndex;
LocalDateTime dateTimeNow = LocalDateTime.now();
if(wildUsersIndexes.contains(playerUUID)){
playerIndex = wildUsersIndexes.indexOf(playerUUID);
if(abs(ChronoUnit.SECONDS.between(wildUsersLastAsked.get(playerIndex), dateTimeNow)) > usageCooldown){
if(wildUsersAskNum.get(playerIndex) < usagePerDay){
wildUsersLastAsked.set(playerIndex, dateTimeNow);
wildUsersStartLocation.set(playerIndex, player.getLocation());
askForTeleport(player);
}else{
plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé");
player.sendMessage("§cVous n'avez le droit qu'à §n"+usagePerDay+"§r§c téléportations aléatoires par jour.");
}
}else{
plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé");
player.sendMessage("§cVous devez attendre §n"+usageCooldown+"s§r§c avant de relancer la commande.");
}
}else{
wildUsersIndexes.add(playerUUID);
wildUsersLastAsked.add(dateTimeNow);
wildUsersAskNum.add(0);
wildUsersStartLocation.add(player.getLocation());
askForTeleport(player);
}
// On vérifie qu'il n'a pas déjà lancé la commande wild
/*// On vérifie qu'il n'a pas déjà lancé la commande wild dans les n dernières secondes
if(!plugin.checkActiveUserForWildCommand(player.getUniqueId())){
plugin.getServer().getConsoleSender().sendMessage("Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.RED+"refusé");
player.sendMessage("§cVous devez attendre 5s avant de relancer la commande.");
......@@ -44,14 +88,14 @@ public class wildCommand implements CommandExecutor {
// on récupère la liste des biomes exclus
List<String> excludedBiomes;
excludedBiomes = (List<String>) plugin.getConfig().getList("excluded-biomes");
excludedBiomes = (List<String>) plugin.getConfig().getList("wild.excluded-biomes");
player.sendMessage("§6Téléportation vers une coordonnée aléatoire.");
// On défini le radius de téléportation
Random r = new Random();
int low = plugin.getConfig().getInt("max-range")*(-1);
int high = plugin.getConfig().getInt("max-range");
int low = plugin.getConfig().getInt("wild.max-range")*(-1);
int high = plugin.getConfig().getInt("wild.max-range");
// Tant qu'on a un biome non souhaite, on va regérer les coordonnées
boolean flag=true;
......@@ -60,13 +104,13 @@ public class wildCommand implements CommandExecutor {
flag=false;
x = r.nextInt(high-low) + low;
z = r.nextInt(high-low) + low;
y = Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world")))).getHighestBlockYAt(x, z);
y = Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("wild.world")))).getHighestBlockYAt(x, z);
y++; // On incrémente la pos Y pour éviter que le joueur se retrouve dans le sol
for (String excludedBiome : Objects.requireNonNull(excludedBiomes)) {
try{
Biome.valueOf(excludedBiome.toUpperCase());
if (Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world")))).getBiome(x, y, z).equals(Biome.valueOf(excludedBiome.toUpperCase()))) {
if (Objects.requireNonNull(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("wild.world")))).getBiome(x, y, z).equals(Biome.valueOf(excludedBiome.toUpperCase()))) {
flag = true;
}
}catch(Exception ignored){}
......@@ -74,7 +118,7 @@ public class wildCommand implements CommandExecutor {
}
// On téléporte le joueur
Location loc = new Location(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("world"))), x, y, z, 0, 0);
Location loc = new Location(Bukkit.getWorld(Objects.requireNonNull(plugin.getConfig().getString("wild.world"))), x, y, z, 0, 0);
player.teleport(loc);
int maxVal = Math.max(abs(x), abs(z));
......@@ -93,8 +137,81 @@ public class wildCommand implements CommandExecutor {
plugin.removeActiveUserForWildCommand(player.getUniqueId());
};
new Thread(runnableRemoveActiveUser).start();
new Thread(runnableRemoveActiveUser).start();*/
}
return true;
}
private void askForTeleport(Player player){
int playerIndex = wildUsersIndexes.indexOf(player.getUniqueId());
plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Le joueur "+ChatColor.GOLD+player.getName()+ChatColor.RESET+" a exécuté la commande "+ChatColor.GOLD+"/wild"+ChatColor.RESET+" : "+ChatColor.GREEN+"accepté");
player.sendMessage("Vous allez être téléporté dans §c" + plugin.getConfig().getInt("wild.move-cooldown") + "s§r, ne bougez pas.");
int delayInTicks = plugin.getConfig().getInt("wild.move-cooldown") * 20;
new BukkitRunnable() {
@Override
public void run(){
Location oldPlayerLocation = wildUsersStartLocation.get(playerIndex);
Location newPlayerLocation = player.getLocation();
if((oldPlayerLocation.getX() != newPlayerLocation.getX()) && (oldPlayerLocation.getY() != newPlayerLocation.getY()) && (oldPlayerLocation.getZ() != newPlayerLocation.getZ())){
player.sendMessage("§cVous avez bougé, téléportation annulée.");
// Date bidon pour annuler le cooldown (c'est ma date de naissance :D)
wildUsersLastAsked.set(playerIndex, LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")));
}else{
teleportPlayer(player, playerIndex);
}
}
}.runTaskLater(plugin, delayInTicks);
}
private void teleportPlayer(Player player, int playerIndex){
wildUsersAskNum.set(playerIndex, wildUsersAskNum.get(playerIndex)+1);
// on récupère la liste des biomes exclus
List<String> excludedBiomes;
excludedBiomes = (List<String>) plugin.getConfig().getList("wild.excluded-biomes");
player.sendMessage("§6Téléportation vers une coordonnée aléatoire.");
// On défini le radius de téléportation
Random r = new Random();
int low = plugin.getConfig().getInt("wild.max-range")*(-1);
int high = plugin.getConfig().getInt("wild.max-range");
// Tant qu'on a un biome non souhaite, on va regérer les coordonnées
boolean flag=true;
int x=0, z=0, y=0;
while(flag){
flag=false;
x = r.nextInt(high-low) + low;
z = r.nextInt(high-low) + low;
y = Bukkit.getWorld(plugin.getConfig().getString("wild.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) {
// Biomes non reconnus ou supprimés (deep warm ocean)
try{
Biome.valueOf(excludedBiome.toUpperCase());
if (Bukkit.getWorld(plugin.getConfig().getString("wild.world")).getBiome(x, y, z).equals(Biome.valueOf(excludedBiome.toUpperCase()))) {
flag = true;
}
}catch(Exception ignored){}
}
}
// On téléporte le joueur
Location loc = new Location(Bukkit.getWorld(plugin.getConfig().getString("wild.world")), x, y, z, 0, 0);
player.teleport(loc);
int maxVal = Math.max(abs(x), abs(z));
if(maxVal <= 10000){
player.sendMessage("§7§oVous êtes sur un biome généré en 1.16");
}else if(maxVal <= 14500){
player.sendMessage("§7§oVous êtes sur un biome généré en 1.17");
}else{
player.sendMessage("§7§oVous êtes sur un biome généré en 1.18");
}
}
}
......@@ -18,8 +18,8 @@ public class internalWebServer {
public static void startServer(Main plugin){
int serverPort = plugin.getConfig().getInt("internal-webserver-port");
plugin.getServer().getConsoleSender().sendMessage("Lancement du serveur web intégré sur le port " + ChatColor.GOLD + serverPort);
plugin.getServer().getConsoleSender().sendMessage(ChatColor.YELLOW + "Attention! Le serveur ne fonctionne pas avec les requêtes https!");
plugin.getServer().getConsoleSender().sendMessage("["+ plugin.getName() +"] Lancement du serveur web intégré sur le port " + ChatColor.GOLD + serverPort);
plugin.getServer().getConsoleSender().sendMessage(ChatColor.YELLOW + "["+ plugin.getName() +"] Attention! Le serveur ne fonctionne pas avec les requêtes https!");
// On fait un thread pour écouter le port
Runnable serverThread = () -> {
try {
......@@ -113,7 +113,7 @@ public class internalWebServer {
client.close(); // Close the socket itself
}
} catch (IOException e) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Erreur lors de l'écoute du port " + ChatColor.GOLD + serverPort);
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "["+ plugin.getName() +"] Erreur lors de l'écoute du port " + ChatColor.GOLD + serverPort);
e.printStackTrace();
// On va logger le message sur discord
......@@ -125,7 +125,7 @@ public class internalWebServer {
urlString = plugin.getConfig().getString("discordBot-api-url") + "mc/error/" + URLEncoder.encode(json.toJSONString(), "UTF-8").replace("+", "%20");
relaunchListener(plugin);
} catch (UnsupportedEncodingException ex) {
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "Erreur lors de l'encodage du message. Func waitForDiscordMsg::startServer(Main plugin)");
plugin.getServer().getConsoleSender().sendMessage(ChatColor.RED + "["+ plugin.getName() +"] Erreur lors de l'encodage du message. Func waitForDiscordMsg::startServer(Main plugin)");
ex.printStackTrace();
}
plugin.getHttp(urlString);
......
......@@ -61,7 +61,7 @@ public class savePlayerData {
try {
con.close();
} catch (SQLException e) {
plugin.getLogger().warning(ChatColor.RED + "Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnQuit(Player player)");
plugin.getLogger().warning("Impossible de fermer la connexion à la bdd. Func savePlayerData::saveOnQuit(Player player)");
e.printStackTrace();
}
}
......
# /wild
wild:
excluded-biomes:
- cold_ocean
- deep_cold_ocean
- deep_frozen_ocean
- deep_lukewarm_ocean
- deep_ocean
- deep_warm_ocean
- frozen_ocean
- frozen_river
- lukewarm_ocean
......@@ -14,6 +14,9 @@ excluded-biomes:
- warm_ocean
world: survie
max-range: 20000 #14500 -> 1.17, 10000 -> 1.16
usage-cooldown: 30
move-cooldown: 5
usage-per-day: 5
# Configuration de la base de donnée
database:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment