diff --git a/.classpath b/.classpath index 4c6378c..c9ea35b 100644 --- a/.classpath +++ b/.classpath @@ -4,7 +4,7 @@ - + diff --git a/Format des fichiers de configuration.md b/Format des fichiers de configuration.md index c71a4d5..cacc436 100644 --- a/Format des fichiers de configuration.md +++ b/Format des fichiers de configuration.md @@ -28,15 +28,23 @@ Les lignes vides seront ignorés (ou ne contenant que des caractères non imprim ___________________ ## 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 : +Chaque messages automatiques se trouve 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 `;`. +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 `;`. Si le message automatique s'applique à tous les joueurs, on peut utiliser `*`. Le reste du fichier correspond au message automatique, avec les codes couleurs de la forme `&X`. +___________________ +## commandalias +Chaque alias se trouve dans un fichier se trouvant dans le sous-dossier. +le nom du fichier importe peu. +La structure d'un fichier se présente comme ce qui suit. +En première ligne, on a la commande d'origine (celle tapée par le joueur) avec le `/` devant. +La deuxième ligne est la commande de remplacement, toujours avec le `/` devant. +La troisième ligne correspond aux permissions associés à cet alias, séparé par des `;`. Le joueur doit avoir au moins une de ces permissions pour que l'alias s'applique. Si l'alias s'applique à tous les joueurs, on peut utiliser `*`. diff --git a/lib/bukkit-1.7.2-R0.3-javadoc.jar b/lib/bukkit-1.7.2-R0.3-javadoc.jar new file mode 100644 index 0000000..d5a2d8f Binary files /dev/null and b/lib/bukkit-1.7.2-R0.3-javadoc.jar differ diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandAliasConfig.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandAliasConfig.java new file mode 100644 index 0000000..7fdf912 --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandAliasConfig.java @@ -0,0 +1,56 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import net.mc_pandacraft.java.plugin.pandacraftutils.config.elements.CommandAliasConfigEntry; + +public class CommandAliasConfig extends AbstractConfig { + + private List config = new ArrayList(); + + + public CommandAliasConfig() throws IOException { + super("commandalias", FileType.DIR); + + List files = getFileList(); + + for (File f : files) { + + String name = f.getName(); + + try { + + List lines = getFileLines(false, false, false, f); + + if (lines.size() != 3) throw new Exception("Le fichier "+name+" n'est pas du bon format. Doit avoir 3 lignes"); + if (!lines.get(0).startsWith("/") || !lines.get(1).startsWith("/")) + throw new Exception("Le fichier "+name+" n'est pas du bon format. La première et la deuxième ligne doit commencer par un slash."); + + + + config.add(new CommandAliasConfigEntry(lines.get(0), lines.get(1), lines.get(2))); + + + } catch (Exception e) { + warning("fichier '"+name+"' invalide"); + e.printStackTrace(); + } + + + } + + + + + } + + public List getCommandAlias() { + 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 0780e8e..4c5ee85 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java @@ -2,6 +2,7 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.config; import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -40,6 +41,34 @@ public class ConfigManager { + /** + * Découpe une chaine de caractère contenant une série de noeuds + * de permissions séparés par des point-virgules et la retourne sous forme d'une liste. + * @param perms la chaine de permissions à traiter + * @return null si le paramètre est nulle ou si perms.equals("*"), ou alors la chaine splittée. + */ + public static List splitPermissionsString(String perms) { + if (perms == null || perms.equals("*")) + return null; + else + return Arrays.asList(perms.split(";")); + } + + + + + + + + + + + + + + + + @@ -53,6 +82,7 @@ public class ConfigManager { public final WorldBorderConfig worldBorderConfig; public final ChatBadWordsConfig chatBadWordsConfig; public final AutoMessagesConfig autoMessagesConfig; + public final CommandAliasConfig commandAliasConfig; @@ -69,20 +99,16 @@ public class ConfigManager { worldBorderConfig = new WorldBorderConfig(); chatBadWordsConfig = new ChatBadWordsConfig(); autoMessagesConfig = new AutoMessagesConfig(); + commandAliasConfig = new CommandAliasConfig(); - // dossier qui doit contenir les alias de commandes - File commandAliasDir = new File(configDir, "commandalias"); - commandAliasDir.mkdir(); - // dossier qui doit contenir les séries de commandes File multiCommandsDir = new File(configDir, "multicommands"); multiCommandsDir.mkdir(); - initCommandAlias(); initMultiCommand(); } @@ -94,82 +120,6 @@ public class ConfigManager { - - - /* - * Alias pour les commandes - */ - - public List> CommandAlias_alias; - - private void initCommandAlias() { - CommandAlias_alias = new ArrayList>(); - Map alias; - - - alias = new HashMap(); - alias.put("initialCommand", "/day"); - alias.put("replaceWith", "/ptime day"); - alias.put("permissions", "pandacraft.grade.users"); // multiple permission separated with semicolumn - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/night"); - alias.put("replaceWith", "/ptime night"); - alias.put("permissions", "pandacraft.grade.users"); - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/time"); - alias.put("replaceWith", "/ptime"); - alias.put("permissions", "pandacraft.grade.users"); - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/shop"); - alias.put("replaceWith", "/warp shop"); - alias.put("permissions", "*"); // tout le monde - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/lobby"); - alias.put("replaceWith", "/spawn"); - alias.put("permissions", "*"); // tout le monde - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/hub"); - alias.put("replaceWith", "/spawn"); - alias.put("permissions", "*"); // tout le monde - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/tete"); - alias.put("replaceWith", "/heads nick"); - alias.put("permissions", "*"); - CommandAlias_alias.add(alias); - - alias = new HashMap(); - alias.put("initialCommand", "/inscription"); - alias.put("replaceWith", "/mail send marcbal Inscription"); - alias.put("permissions", "pandacraft.grade.users"); - CommandAlias_alias.add(alias); - /* - Map alias = new HashMap(); - alias.put("initialCommand", ""); - alias.put("replaceWith", ""); - alias.put("permissions", ""); - CommandAlias_alias.add(alias); - */ - } - - - - - - - - /* * Multicommand */ 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 index b9ba1ed..7489b7c 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/AutoMessagesConfigEntry.java @@ -1,11 +1,11 @@ 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.config.ConfigManager; import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; public class AutoMessagesConfigEntry implements Comparable { @@ -13,13 +13,10 @@ public class AutoMessagesConfigEntry implements Comparable permissions; - public AutoMessagesConfigEntry(int o, String perm, List m) { + public AutoMessagesConfigEntry(int o, String perms, 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(";")); + permissions = ConfigManager.splitPermissionsString(perms); order = o; } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/CommandAliasConfigEntry.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/CommandAliasConfigEntry.java new file mode 100644 index 0000000..4c63a6c --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/elements/CommandAliasConfigEntry.java @@ -0,0 +1,45 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config.elements; + +import java.util.Collections; +import java.util.List; + +import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; + +public class CommandAliasConfigEntry { + private final String initialCmd; + private final String replacement; + private final List permissions; + + public CommandAliasConfigEntry(String init, String repl, String perms) { + + permissions = Collections.unmodifiableList(ConfigManager.splitPermissionsString(perms)); + + if (init == null || init.trim().equals("")) + throw new IllegalArgumentException(); + if (repl == null || repl.trim().equals("")) + throw new IllegalArgumentException(); + + initialCmd = init; + replacement = repl; + } + + + + public String getInitialCommand() { return initialCmd; } + public String getReplacementCommand() { return replacement; } + + + 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; + } + + +} diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/CommandAliasManager.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/CommandAliasManager.java index 6b984ad..7da6488 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/CommandAliasManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/modules/CommandAliasManager.java @@ -1,12 +1,13 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.modules; 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.CommandAliasConfigEntry; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayer; +import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager; -import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.Listener; @@ -26,35 +27,21 @@ public class CommandAliasManager implements Listener { @EventHandler(priority=EventPriority.HIGHEST) public void onPlayerCommandPreprocess (PlayerCommandPreprocessEvent event) { - Player p = event.getPlayer(); + OnlinePlayer op = OnlinePlayerManager.get(event.getPlayer()); - List> aliases = ConfigManager.getInstance().CommandAlias_alias; - for (Map alias : aliases) { - if (alias == null) - continue; - String perms = alias.get("permissions"); - String initialCmd = alias.get("initialCommand"); - String aliasCmd = alias.get("replaceWith"); - if (perms == null || initialCmd == null || aliasCmd == null) - continue; + List aliases = ConfigManager.getInstance().commandAliasConfig.getCommandAlias(); + for (CommandAliasConfigEntry alias : aliases) { - if (!perms.equals("*")) { - String[] aPerms = perms.split(";"); - boolean found = false; - for (String perm : aPerms) { - if (perm == null || perm.equals("")) continue; // boucle qui parcours les permissions de l'alias - if (p.hasPermission(perm)) found = true; - } - if (!found) continue; // boucle qui parcours les alias de commandes - } + if (!alias.hasPlayerPermission(op)) + continue; String mess = event.getMessage(); - if(mess.toLowerCase().startsWith(initialCmd)) - mess = mess.replaceFirst("(?i)"+initialCmd, aliasCmd); - else + if(!mess.toLowerCase().startsWith(alias.getInitialCommand())) continue; + mess = mess.replaceFirst("(?i)"+alias.getInitialCommand(), alias.getReplacementCommand()); + event.setMessage(mess); return; }