diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 339a82e3adcda0856bbbca85f3d780709c9813f9..22a9058dae1845023b76f38bb4b925d829ab5fe1 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -11,11 +11,6 @@ <option name="name" value="sonatype" /> <option name="url" value="https://oss.sonatype.org/content/groups/public/" /> </remote-repository> - <remote-repository> - <option name="id" value="central" /> - <option name="name" value="Maven Central repository" /> - <option name="url" value="https://repo1.maven.org/maven2" /> - </remote-repository> <remote-repository> <option name="id" value="papermc-repo" /> <option name="name" value="papermc-repo" /> @@ -26,6 +21,11 @@ <option name="name" value="placeholderapi" /> <option name="url" value="https://repo.extendedclip.com/content/repositories/placeholderapi/" /> </remote-repository> + <remote-repository> + <option name="id" value="central" /> + <option name="name" value="Maven Central repository" /> + <option name="url" value="https://repo1.maven.org/maven2" /> + </remote-repository> <remote-repository> <option name="id" value="jboss.community" /> <option name="name" value="JBoss Community repository" /> diff --git a/.idea/misc.xml b/.idea/misc.xml index 6f19b7ef0b23c73c83364de2b2f25bfe51dbc291..b390bb4ca4224596bdb9456084d43d635622f529 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,9 +1,19 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="EntryPointsManager"> + <entry_points version="2.0"> + <entry_point TYPE="field" FQNAME="com.slprojects.slcraftplugin.Main periodicEvent" /> + </entry_points> <list size="1"> <item index="0" class="java.lang.String" itemvalue="org.bukkit.event.EventHandler" /> </list> + <pattern value="com.slprojects.slcraftplugin.Main" method="AsyncChatEvent" /> + <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" /> + <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" method="joinEvent" /> + <pattern value="com.slprojects.slcraftplugin.Main" /> + <pattern value="com.slprojects.slcraftplugin.Main" method="onPlayerJoin" /> + <pattern value="com.slprojects.slcraftplugin.Main" method="onPlayerQuit" /> + <pattern value="com.slprojects.slcraftplugin.parallelTasks.dataHandlers.dataHandler" method="quitEvent" /> </component> <component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="MavenProjectsManager"> diff --git a/SLCraftPlugin.iml b/SLCraftPlugin.iml deleted file mode 100644 index f5de878b032bd6930370a575e7ca458c9c77e1bf..0000000000000000000000000000000000000000 --- a/SLCraftPlugin.iml +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<module version="4"> - <component name="FacetManager"> - <facet type="minecraft" name="Minecraft"> - <configuration> - <autoDetectTypes> - <platformType>PAPER</platformType> - <platformType>ADVENTURE</platformType> - </autoDetectTypes> - </configuration> - </facet> - </component> -</module> \ No newline at end of file diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java b/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java index 677fffd3b38a0c15b341a351da8cf6fb6fc3ed70..986a2946b345ed51beac9bb1421a09d9fd3124e0 100644 --- a/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java +++ b/src/main/java/com/slprojects/slcraftplugin/commands/admins/WildReset.java @@ -20,13 +20,22 @@ public class WildReset implements CommandExecutor { this.plugin = plugin; } + /** + * Commande /wildreset + * + * @param sender CommandSender + * @param command Command + * @param label String + * @param args String[] + * @return boolean + */ @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (args.length > 0) { for (int i = 0; i < args.length; i++) { Player player = plugin.getServer().getPlayer(args[i]); if (player != null) { - List<Object> reset = new ArrayList<Object>() { + List<Object> reset = new ArrayList<>() { { add(0); add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java index de66ecd94735595a3347c575fc0e166ed039cc29..7b80a8a9a9ef373814410e7674e29a4c0042ba99 100644 --- a/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java +++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/LinkCode.java @@ -25,6 +25,15 @@ public class LinkCode implements CommandExecutor { this.plugin = plugin; } + /** + * Commande /linkcode + * + * @param sender CommandSender + * @param command Command + * @param label String + * @param args String[] + * @return boolean + */ @Override public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, String[] args) { if (sender instanceof Player) { diff --git a/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java b/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java index 91360661092677f4cbcae29d3ae6ff6447e783c3..6976261a79ebf9ce2b136dd41a0489a09c87b004 100644 --- a/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java +++ b/src/main/java/com/slprojects/slcraftplugin/commands/publics/Wild.java @@ -34,6 +34,11 @@ public class Wild implements CommandExecutor { private final List<String> excludedBiomes; private final String wildWorld; + /** + * Commande /wild + * + * @param plugin Main + */ @SuppressWarnings("unchecked") public Wild(Main plugin) { // On récupère la classe parente pour les paramètres @@ -163,7 +168,7 @@ public class Wild implements CommandExecutor { // Indexes: // - 0: Nombre d'utilisation du jour // - 1: Date de la dernière commande - List<Object> stats = new ArrayList<Object>(); + List<Object> stats = new ArrayList<>(); stats.add(wildUsersAskNum.get(playerIndex)); stats.add(wildUsersLastAsked.get(playerIndex)); return stats; diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java index ad65a2f81bd719e5ce7a4f2dff0944b3c0d3db08..8de54d6011026744a77c52a430de67daa1fd2037 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/InternalWebServer.java @@ -15,6 +15,11 @@ import java.net.URLDecoder; import java.net.URLEncoder; public class InternalWebServer { + /** + * Lance le serveur web intégré + * + * @param plugin Instance du plugin + */ @SuppressWarnings({"unchecked", "InfiniteLoopStatement"}) public static void startServer(Main plugin) { int serverPort = plugin.getConfig().getInt("internal-webserver-port"); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java index 024989bec864e8569b46870dfe7114f80a70713c..8358b74af1ee76dc51f8ffc624b3cfb91b2c3d76 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayedTimeHandler.java @@ -27,6 +27,11 @@ public class PlayedTimeHandler implements dataHandler { private final int requiredPlayedTimeForUpgradingPlayersAccount; private final Group playersAccountUpgradeGroup; + /** + * Gère le temps de jeu des joueurs + * + * @param plugin Plugin + */ public PlayedTimeHandler(Main plugin) { this.plugin = plugin; String playersAccountUpgradeRole = plugin.getConfig().getString("stats.players-account-upgrade-role"); @@ -46,6 +51,11 @@ public class PlayedTimeHandler implements dataHandler { } } + /** + * Gestion de l'arrivée d'un joueur + * + * @param player Joueur + */ @Override public void joinEvent(Player player) { usersIndexes.add(player.getUniqueId()); @@ -65,11 +75,21 @@ public class PlayedTimeHandler implements dataHandler { } } + /** + * Gestion de la déconnexion d'un joueur + * + * @param player Joueur + */ @Override public void quitEvent(Player player) { savePlayedTime(player); // On actualise le temps de jeu du joueur } + /** + * Sauvegarde le temps de jeu du joueur + * + * @param player Joueur + */ public void savePlayedTime(Player player) { // On va calculer le temps de jeu du joueur UUID playerUuid = player.getUniqueId(); @@ -84,6 +104,11 @@ public class PlayedTimeHandler implements dataHandler { checkPlayerTime(player); } + /** + * Vérifie si le joueur a débloqué le rôle habitué + * + * @param player Joueur + */ public void checkPlayerTime(Player player) { // On va calculer le temps de jeu du joueur UUID playerUuid = player.getUniqueId(); @@ -131,7 +156,7 @@ public class PlayedTimeHandler implements dataHandler { plugin.sendMessageToDiscord("Un grand merci à toi qui a passé plus de 20H de jeu sur le serveur! â¤"); // Feux d'artifices - GeneralEvents.fireworkSoundEffect(player, plugin); + GeneralEvents.playFireworkSoundEffect(player, plugin); } } else { ConsoleLog.danger("Impossible de vérifier la priorité du ou des rôles suivants : " + playerGroupName + " & " + playersAccountUpgradeGroup.getName()); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java index f54650ef1e74cfdeb8c103cbd743255ac0be8d1d..68b1056b9b9162f7011076c090dd738c8eea2968 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/dataHandlers/PlayerDataHandler.java @@ -214,7 +214,7 @@ public class PlayerDataHandler implements dataHandler { if (lastUsedResult.next()) { LocalDateTime lastUsed = Timestamp.valueOf(lastUsedResult.getString("value")).toLocalDateTime(); if (ChronoUnit.HOURS.between(lastUsed, LocalDateTime.now()) > 24) { - return new ArrayList<Object>() { + return new ArrayList<>() { { add(0); add(lastUsed); @@ -226,7 +226,7 @@ public class PlayerDataHandler implements dataHandler { ResultSet askNumResult = playerAskNum.executeQuery(); if (askNumResult.next()) { - return new ArrayList<Object>() { + return new ArrayList<>() { { add(Integer.valueOf(askNumResult.getString("value"))); add(lastUsed); @@ -236,7 +236,7 @@ public class PlayerDataHandler implements dataHandler { ConsoleLog.warning("Func savePlayerData::getPlayerWildCmdStats(Player player)"); ConsoleLog.warning("Fonctionnement anormal! On dispose de la date de 'wildCmdLastUsed' mais pas de 'wildCmdAskNum' pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); ConsoleLog.warning("Passage de 'wildCmdAskNum' à 0."); - return new ArrayList<Object>() { + return new ArrayList<>() { { add(0); add(lastUsed); @@ -260,7 +260,7 @@ public class PlayerDataHandler implements dataHandler { insertWildCmdAskNum.setString(2, "0"); insertWildCmdAskNum.executeQuery(); - return new ArrayList<Object>() { + return new ArrayList<>() { { add(0); add(dateBidon); @@ -277,7 +277,7 @@ public class PlayerDataHandler implements dataHandler { ConsoleLog.warning("Fonctionnement anormal! La recherche dans la bdd a échouée pour le joueur " + player.getName() + " UUID: " + player.getUniqueId()); ConsoleLog.warning("Passage de 'wildCmdLastUsed' au 11 décembre 2001 et 'wildCmdAskNum' à 0"); - return new ArrayList<Object>() { + return new ArrayList<>() { { add(0); add(LocalDateTime.parse("2001-12-11 12:30", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"))); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java index fe0ed5bfe46530b8fe74f86cf77f0b71f483b1d3..dc3a8030bd31889affeedd04140395f8a2e0f3d1 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/GeneralEvents.java @@ -8,7 +8,13 @@ import org.bukkit.scheduler.BukkitRunnable; import java.util.Random; public class GeneralEvents { - public static void fireworkSoundEffect(Player player, Main plugin) { + /** + * Joue un son de feu d'artifice + * + * @param player Joueur + * @param plugin Plugin + */ + public static void playFireworkSoundEffect(Player player, Main plugin) { int min = 1; int max = 25; Random random = new Random(); diff --git a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java index ec65540fe63204d8d0e30fa2ecdcc14da491d332..96524c96f1e93f52752af65f55d6e7c17fb55483 100644 --- a/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java +++ b/src/main/java/com/slprojects/slcraftplugin/parallelTasks/events/PeriodicEvent.java @@ -9,12 +9,20 @@ public class PeriodicEvent { private boolean doesTheEventIsCurrentlyRunning = false; private final int periodicEventCallTime; + /** + * Évènement périodique + * + * @param plugin Plugin + */ public PeriodicEvent(Main plugin) { this.plugin = plugin; startPeriodicEvent(); periodicEventCallTime = plugin.getConfig().getInt("periodic-event-call-time") * plugin.getConfig().getInt("ticks-per-seconds"); } + /** + * Lance l'évènement périodique + */ public void startPeriodicEvent() { if (doesTheEventIsCurrentlyRunning) throw new RuntimeException("L'exécution de l'évènement périodique est déjà enclanchée."); @@ -29,6 +37,9 @@ public class PeriodicEvent { }.runTaskLater(plugin, (periodicEventCallTime)); } + /** + * Évènement périodique + */ private void periodicEvent() { for (Player player : plugin.getServer().getOnlinePlayers()) { plugin.playerDataHandler.playedTimeHandler.savePlayedTime(player); diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java b/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java index e863c61c18cf348ef50692ae89279a36f8bd4c10..3d8a85c5d3fd5cbcee6579f8fe8ca4386ab0182c 100644 --- a/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java +++ b/src/main/java/com/slprojects/slcraftplugin/utils/ConsoleLog.java @@ -6,18 +6,38 @@ import org.bukkit.ChatColor; import static org.bukkit.Bukkit.getServer; public class ConsoleLog { + /** + * Envoyer un message d'information dans la console. + * + * @param message Message à envoyer + */ public static void info(String message) { getServer().getConsoleSender().sendMessage("[" + Main.pluginName + "] " + message); } + /** + * Envoyer un message d'avertissement dans la console. + * + * @param message Message à envoyer + */ public static void warning(String message) { getServer().getConsoleSender().sendMessage(ChatColor.GOLD + "[" + Main.pluginName + "] " + message); } + /** + * Envoyer un message d'erreur dans la console. + * + * @param message Message à envoyer + */ public static void danger(String message) { getServer().getConsoleSender().sendMessage(ChatColor.RED + "[" + Main.pluginName + "] " + message); } + /** + * Envoyer un message de succès dans la console. + * + * @param message Message à envoyer + */ public static void success(String message) { getServer().getConsoleSender().sendMessage(ChatColor.GREEN + "[" + Main.pluginName + "] " + message); } diff --git a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java index 54aee618c3e5d706f2aecd117f6b68a14ac6cefb..dcf76b99e2769939fa41469cb1b47478b4fc8ba7 100644 --- a/src/main/java/com/slprojects/slcraftplugin/utils/Database.java +++ b/src/main/java/com/slprojects/slcraftplugin/utils/Database.java @@ -2,6 +2,7 @@ package com.slprojects.slcraftplugin.utils; import com.slprojects.slcraftplugin.Main; import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.plugin.Plugin; import org.mariadb.jdbc.MariaDbPoolDataSource; import java.sql.Connection; @@ -15,18 +16,31 @@ import static org.bukkit.Bukkit.getServer; public class Database { static final private String userSettingsTabName = "site_userSetting"; + /** + * Récupère une valeur dans la table site_userSetting + * + * @param uuid UUID du joueur + * @param key Nom de la clé + * @return Valeur de la clé + */ public static String getUserSetting(String uuid, String key) { - Connection con = bddOpenConn(); + Connection con; + try { + con = bddOpenConn(); + } catch (SQLException e) { + ConsoleLog.danger("Impossible d'ouvrir la connexion à la bdd."); + throw new RuntimeException(e); + } String returnValue = null; try { PreparedStatement query = con.prepareStatement("SELECT * FROM " + userSettingsTabName + " WHERE uuid = ? AND name = ?"); query.setString(1, uuid); query.setString(2, key); - ResultSet resultat = query.executeQuery(); + ResultSet result = query.executeQuery(); - if (resultat.next()) { - returnValue = resultat.getString("value"); + if (result.next()) { + returnValue = result.getString("value"); } } catch (SQLException e) { ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e); @@ -42,9 +56,21 @@ public class Database { return returnValue; } - public static boolean setUserSetting(String uuid, String key, String value) { - Connection con = bddOpenConn(); - boolean isOperationASuccess = false; + /** + * Ajoute ou modifie une valeur dans la table site_userSetting + * + * @param uuid UUID du joueur + * @param key Nom de la clé + * @param value Valeur de la clé + */ + public static void setUserSetting(String uuid, String key, String value) { + Connection con; + try { + con = bddOpenConn(); + } catch (SQLException e) { + ConsoleLog.danger("Impossible d'ouvrir la connexion à la bdd."); + throw new RuntimeException(e); + } boolean isEntryExists = (getUserSetting(uuid, key) != null); try { @@ -54,12 +80,12 @@ public class Database { updateEntry.setString(2, uuid); updateEntry.setString(3, key); updateEntry.executeUpdate(); - isOperationASuccess = true; } else { - isOperationASuccess = insertUserSettingEntry(uuid, key, value); + insertUserSettingEntry(uuid, key, value); } } catch (SQLException e) { - ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e); + ConsoleLog.danger("Erreur lors de l'exécution de la requête sql."); + throw new RuntimeException(e); } // On ferme la bdd @@ -67,15 +93,25 @@ public class Database { con.close(); } catch (SQLException e) { ConsoleLog.danger("Impossible de fermer la connexion à la bdd."); - e.printStackTrace(); + throw new RuntimeException(e); } - - return isOperationASuccess; } - private static boolean insertUserSettingEntry(String uuid, String key, String value) { - Connection con = bddOpenConn(); - boolean isOperationASuccess = false; + /** + * Ajoute une entrée dans la table site_userSetting + * + * @param uuid UUID du joueur + * @param key Nom de la clé + * @param value Valeur de la clé + */ + private static void insertUserSettingEntry(String uuid, String key, String value) { + Connection con; + try { + con = bddOpenConn(); + } catch (SQLException e) { + ConsoleLog.danger("Erreur lors de l'ouverture de la connexion à la bdd."); + throw new RuntimeException(e); + } try { PreparedStatement insertEntry = con.prepareStatement("INSERT INTO site_userSetting (uuid, name, value) VALUES (?, ?, ?)"); @@ -83,9 +119,9 @@ public class Database { insertEntry.setString(2, key); insertEntry.setString(3, value); insertEntry.executeQuery(); - isOperationASuccess = true; } catch (SQLException e) { - ConsoleLog.danger("Erreur lors de l'exécution de la requête sql." + e); + ConsoleLog.danger("Erreur lors de l'exécution de la requête sql."); + throw new RuntimeException(e); } // On ferme la bdd @@ -93,30 +129,47 @@ public class Database { con.close(); } catch (SQLException e) { ConsoleLog.danger("Impossible de fermer la connexion à la bdd."); - e.printStackTrace(); + throw new RuntimeException(e); } - - return isOperationASuccess; } - public static Connection bddOpenConn() { - FileConfiguration config = getServer().getPluginManager().getPlugin(Main.pluginName).getConfig(); - Connection conn = null; - - try { - Class.forName("org.mariadb.jdbc.MariaDbPoolDataSource"); - } catch (ClassNotFoundException e) { - ConsoleLog.danger("Il manque le driver MariaDB!"); + /** + * Ouvre une connexion à la base de données + * + * @return Connection + */ + public static Connection bddOpenConn() throws SQLException { + Plugin plugin = getServer().getPluginManager().getPlugin(Main.pluginName); + if (plugin == null) { + throw new IllegalStateException("Le plugin " + Main.pluginName + " n'a pas été trouvé."); } - try { - MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource("jdbc:mariadb://" + config.getString("database.host") + "/" + config.getString("database.database") + "?user=" + config.getString("database.user") + "&password=" + config.getString("database.password") + "&maxPoolSize=10"); - conn = dataSource.getConnection(); - //ConsoleLog.success("Connexion à la base de données réussie!"); - } catch (SQLException e) { - ConsoleLog.danger("Erreur lors de la connexion à la base de données."); + FileConfiguration config = plugin.getConfig(); + + String connectionString = "jdbc:mariadb://" + config.getString("database.host"); + connectionString += "/" + config.getString("database.database"); + connectionString += "?user=" + config.getString("database.user"); + connectionString += "&password=" + config.getString("database.password"); + connectionString += "&maxPoolSize=10"; + + MariaDbPoolDataSource dataSource = new MariaDbPoolDataSource(connectionString); + + try (Connection conn = dataSource.getConnection()) { + if (!conn.isValid(1000)) { + throw new SQLException("Could not establish database connection."); + } } - return conn; + testDataSource(dataSource); + + return dataSource.getConnection(); + } + + private static void testDataSource(MariaDbPoolDataSource dataSource) throws SQLException { + try (Connection conn = dataSource.getConnection()) { + if (!conn.isValid(1000)) { + throw new SQLException("Erreur lors de la connexion à la base de données."); + } + } } }