From 9abe06afe1c435e5d8a8adec966a974df428d086 Mon Sep 17 00:00:00 2001 From: Marc Baloup Date: Wed, 18 Feb 2015 02:27:31 -0500 Subject: [PATCH] =?UTF-8?q?Gestion=20dans=20une=20classe=20=C3=A0=20part?= =?UTF-8?q?=20des=20messages=20automatiques?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Format des fichiers de configuration.md | 15 +++++ .../commands/CommandAutomessager.java | 5 +- .../config/AbstractConfig.java | 37 +++++++++-- .../config/AutoMessagesConfig.java | 55 ++++++++++++++++ .../pandacraftutils/config/ConfigManager.java | 51 +-------------- .../elements/AutoMessagesConfigEntry.java | 55 ++++++++++++++++ .../modules/AutoMessagesManager.java | 62 +++---------------- .../java/util/bukkit/SignUtil.java | 10 +++ 8 files changed, 179 insertions(+), 111 deletions(-) create mode 100644 src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AutoMessagesConfig.java create mode 100644 src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java create mode 100644 src/net/mc_pandacraft/java/util/bukkit/SignUtil.java diff --git a/Format des fichiers de configuration.md b/Format des fichiers de configuration.md index 150a277..c71a4d5 100644 --- a/Format des fichiers de configuration.md +++ b/Format des fichiers de configuration.md @@ -25,3 +25,18 @@ Ce fichier est au format texte. Chaque ligne est une expression régulière corr Les lignes vides seront ignorés (ou ne contenant que des caractères non imprimable). Lescaractères non imprimables en début et fin de ligne sont conservés +___________________ + +## automessages +Chaque messages automatiques se trouvent dans un fichier se trouvant dans le sous-dossier. L'ordre est défini selon la numérotation des fichiers. Les fichiers sont nommés selon ce format : + + X.txt + +Où `X` est un nombre entier positif ou nul. Le nombre ne peut pas avoir de 0 initial (par exemple, `0014` n'est pas valide, préférez plutôt `14`) + +La première ligne du fichier représente les noeux de permissions correspondant au message automatique, sachant qu'un joueur doit avoir un moins une de ces permissions pour voir le message. Les permissions sont séparés par des `;`. + +Le reste du fichier correspond au message automatique, avec les codes couleurs de la forme `&X`. + + + diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAutomessager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAutomessager.java index f58276e..e26f238 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAutomessager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/commands/CommandAutomessager.java @@ -2,7 +2,8 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.commands; import java.util.List; -import net.mc_pandacraft.java.plugin.pandacraftutils.modules.AutoMessagesManager.AutoMessage; +import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; +import net.mc_pandacraft.java.plugin.pandacraftutils.config.elements.AutoMessagesConfigEntry; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; import org.bukkit.ChatColor; @@ -20,7 +21,7 @@ public class CommandAutomessager extends AbstractCommandExecutor { public boolean onCommand(CommandSender sender, Command cmd, String alias, String[] args) { - List messages = plugin.autoMessagesManager.getMessagesFromConfig(); + List messages = ConfigManager.getInstance().autoMessagesConfig.getAutoMessages(); if (args.length == 0 || !(sender instanceof Player)) { sender.sendMessage(ChatColor.GOLD+"Il y a "+messages.size()+" messages (de 0 à "+(messages.size()-1)+")"); diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java index 05e3aaf..2788f60 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java @@ -5,6 +5,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; @@ -41,18 +42,19 @@ public abstract class AbstractConfig { } /** - * Retourne toutes les lignes du fichier de configuration + * Retourne toutes les lignes d'un fichier donné * @param ignoreEmpty true si on doit ignorer les lignes vides * @param ignoreHashtagComment true si on doit ignorer les lignes commentés (commençant par un #) * @param trimOutput true si on doit appeller la méthode String.trim() sur chaque ligne retournée + * @param f le fichier à lire * @return la liste des lignes utiles * @throws IOException */ - protected List getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput) throws IOException { - if (!configFile.isFile()) + protected List getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput, File f) throws IOException { + if (!f.isFile()) return null; - BufferedReader reader = new BufferedReader(new FileReader(configFile)); + BufferedReader reader = new BufferedReader(new FileReader(f)); List lines = new ArrayList(); @@ -79,9 +81,25 @@ public abstract class AbstractConfig { } + /** + * Retourne toutes les lignes du fichier de configuration + * @param ignoreEmpty true si on doit ignorer les lignes vides + * @param ignoreHashtagComment true si on doit ignorer les lignes commentés (commençant par un #) + * @param trimOutput true si on doit appeller la méthode String.trim() sur chaque ligne retournée + * @return la liste des lignes utiles + * @throws IOException + */ + protected List getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput) throws IOException { + return getFileLines(ignoreEmpty, ignoreHashtagComment, trimOutput, configFile); + } - protected void warning(String message) { - plugin.getLogger().warning("Error while loading configuration in '"+configFile.getName()+"' : "+message); + + + protected List getFileList() { + if (!configFile.isDirectory()) + return null; + + return Arrays.asList(configFile.listFiles()); } @@ -93,6 +111,13 @@ public abstract class AbstractConfig { + protected void warning(String message) { + plugin.getLogger().warning("Error while loading configuration in '"+configFile.getName()+"' : "+message); + } + + + + protected enum FileType { FILE, DIR } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AutoMessagesConfig.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AutoMessagesConfig.java new file mode 100644 index 0000000..8969f2d --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AutoMessagesConfig.java @@ -0,0 +1,55 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config; + +import java.io.File; +import java.io.IOException; +import java.util.Collections; +import java.util.List; + +import net.mc_pandacraft.java.plugin.pandacraftutils.config.elements.AutoMessagesConfigEntry; + +public class AutoMessagesConfig extends AbstractConfig { + private List config; + + + public AutoMessagesConfig() throws IOException { + super("automessages", FileType.DIR); + + List fileList = getFileList(); + + + for (File f : fileList) { + String name = f.getName(); + try { + + if (!name.matches("[0-9]+\\.txt")) continue; + + int i = Integer.valueOf(name.split("\\.")[0]); + + List lines = getFileLines(false, false, false, f); + + if (lines.size() < 2) throw new Exception("Le fichier "+name+" n'est pas du bon format. Doit faire au moins 2 lignes"); + + String perm = lines.remove(0); + + config.add(new AutoMessagesConfigEntry(i, perm, lines)); + + } catch (Exception e) { + warning("fichier '"+name+"' invalide"); + e.printStackTrace(); + } + } + + + // tri des messages automatiques selon le numéro du fichier + config.sort(null); + + + + } + + + public List getAutoMessages() { + return Collections.unmodifiableList(config); + } + +} diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java index 86ac083..fd00025 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java @@ -8,8 +8,6 @@ import java.util.Map; import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; -import org.bukkit.ChatColor; - /* * Configuration du plugin */ @@ -54,6 +52,7 @@ public class ConfigManager { public final DefaultConfig defaultConfig; public final WorldBorderConfig worldBorderConfig; public final ChatBadWordsConfig chatBadWordsConfig; + public final AutoMessagesConfig autoMessagesConfig; @@ -69,6 +68,8 @@ public class ConfigManager { defaultConfig = new DefaultConfig(); worldBorderConfig = new WorldBorderConfig(); chatBadWordsConfig = new ChatBadWordsConfig(); + autoMessagesConfig = new AutoMessagesConfig(); + // dossier qui doit contenir les messages automatiques @@ -86,7 +87,6 @@ public class ConfigManager { initCommandAlias(); - initAutomessages(); initMultiCommand(); } @@ -95,51 +95,6 @@ public class ConfigManager { - /* - * Automessages - */ - public List> Automessages_messages; - - private void initAutomessages() { - Automessages_messages = new ArrayList>(); - - String defColor = defaultConfig.serverMessages_defaultColor; - - Map message; - - message = new HashMap(); - message.put("message", ChatColor.BLUE+"Bienvenue sur Pandacraft ! :) Pour pouvoir jouer, n'oubliez pas de vous inscrire en cliquant sur le lien en dessous%n &ahttps://www.mc-pandacraft.net/?p=inscription"); - message.put("permissions", "pandacraft.grade.default"); - Automessages_messages.add(message); - - message = new HashMap(); - message.put("message", "Utilisez la commande &7/cubo"+defColor+" en Survie pour protéger vos construction ! :)%n&a https://www.mc-pandacraft.net/?p=antigrief#tuto_cubo"); - message.put("permissions", "*"); - Automessages_messages.add(message); - - message = new HashMap(); - message.put("message", "WorldEdit disponible en &bCréatif"+defColor+" avec le grade %n&f[&eUltimate&f]"+defColor+". Profitez en vite :D%n &a https://www.mc-pandacraft.net/?p=ultimate"); - message.put("permissions", "*"); - Automessages_messages.add(message); - - message = new HashMap(); - message.put("message", "Launcher disponible pour Pandacraft : Optifine intégré et mise à jour automatique avec le serveur.%n &ahttps://www.mc-pandacraft.net/?p=launcher"); - message.put("permissions", "*"); - Automessages_messages.add(message); - /* - * Fonctionnement : - * Chaque joueur a une variable indiquand la date/heure du dernier message affiché - * Cette valeur est initialisé à la valeur courante, lors de chaque connexion du joueur - * Selon le grade, l'intervalle entre les messages est défini : 2min30 pour les visiteurs, 10 minutes pour les autres - * Chaque joueur a une variable qui correspond à l'ID du dernier message (dans l'ArrayList) pour ne pas répéter deux fois le même - */ - - } - - - - - diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java new file mode 100644 index 0000000..b9ba1ed --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java @@ -0,0 +1,55 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config.elements; + +import java.util.Arrays; +import java.util.List; + +import org.apache.commons.lang.StringUtils; +import org.bukkit.ChatColor; + +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; + +public class AutoMessagesConfigEntry implements Comparable { + private final int order; + private final String message; + private final List permissions; + + public AutoMessagesConfigEntry(int o, String perm, List m) { + if (m == null) throw new IllegalArgumentException("message ne doit pas être null"); + message = ChatColor.translateAlternateColorCodes('&', StringUtils.join(m, '\n')); + if (perm == null || perm.equals("*")) + permissions = null; + else + permissions = Arrays.asList(perm.split(";")); + order = o; + } + + + public String getMessage() { return message; } + + + + public boolean hasPlayerPermission(OnlinePlayer op) { + if (op == null) throw new IllegalArgumentException("le joueur ne doit pas être null"); + if (permissions == null) + return true; + + for (String pe : permissions) { + if (op.hasPermission(pe)) return true; + } + return false; + } + + + + + @Override + public int compareTo(AutoMessagesConfigEntry o) { + if (o == null) throw new NullPointerException(); + + if (order < o.order) return -1; + if (order > o.order) return 1; + + + return 0; + } +} diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/AutoMessagesManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/AutoMessagesManager.java index 29901da..caf3b10 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/AutoMessagesManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/AutoMessagesManager.java @@ -1,17 +1,14 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules; -import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.List; -import java.util.Map; import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils; import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; +import net.mc_pandacraft.java.plugin.pandacraftutils.config.elements.AutoMessagesConfigEntry; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; -import org.bukkit.ChatColor; import org.bukkit.scheduler.BukkitRunnable; public class AutoMessagesManager extends BukkitRunnable { @@ -30,7 +27,7 @@ public class AutoMessagesManager extends BukkitRunnable { @Override public void run() { - List messages = getMessagesFromConfig(); + List messages = ConfigManager.getInstance().autoMessagesConfig.getAutoMessages(); int interval_default = ConfigManager.getInstance().defaultConfig.autoMessages_defaultInterval, interval_players = ConfigManager.getInstance().defaultConfig.autoMessages_playerInterval; // message @@ -68,61 +65,16 @@ public class AutoMessagesManager extends BukkitRunnable { // affichage du message if (atLeastOnePermitted) { op.setAutomessage_last_message_id(id); - op.updateAutomessage_last_message_time(); op.sendMessageFromServer(messages.get(id).getMessage()); } - } - - } - - - - - public List getMessagesFromConfig() { - ArrayList ret = new ArrayList(); - - for (Map message : ConfigManager.getInstance().Automessages_messages) - ret.add(new AutoMessage(ChatColor.translateAlternateColorCodes('&', message.get("message").replace("%n", "\n")), message.get("permissions"))); - - return ret; - } - - - - - public class AutoMessage { - private String message; - private List permissions; - - public AutoMessage(String m, String perm) { - setMessage(m); - if (perm == null || perm.equals("*")) - permissions = null; - else - permissions = Arrays.asList(perm.split(";")); - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - if (message == null) throw new IllegalArgumentException("message ne doit pas être null"); - this.message = message; - } - - public boolean hasPlayerPermission(OnlinePlayer op) { - if (op == null) throw new IllegalArgumentException("le joueur ne doit pas être null"); - if (permissions == null) - return true; + op.updateAutomessage_last_message_time(); - for (String pe : permissions) { - if (op.hasPermission(pe)) return true; - } - return false; } - } + } + + + } diff --git a/src/net/mc_pandacraft/java/util/bukkit/SignUtil.java b/src/net/mc_pandacraft/java/util/bukkit/SignUtil.java new file mode 100644 index 0000000..8aec6e9 --- /dev/null +++ b/src/net/mc_pandacraft/java/util/bukkit/SignUtil.java @@ -0,0 +1,10 @@ +package net.mc_pandacraft.java.util.bukkit; + +import org.apache.commons.lang.WordUtils; + + +public class SignUtil { + public static String[] textIntoSign(String text) { + return WordUtils.wrap(text, 15).split("\n"); + } +}