diff --git a/Format des fichiers de configuration.md b/Format des fichiers de configuration.md index c8a46f2..46ca1da 100644 --- a/Format des fichiers de configuration.md +++ b/Format des fichiers de configuration.md @@ -1,5 +1,9 @@ Format des fichiers de configuration ========== +- *.txt : fichier modifiable à la main que le serveur ne fait que lire +- \*.yml : pareil que les fichiers *.txt, mais le contenu est au format YAML +- *.save : fichier à ne pas modifier, dont seul le serveur gère le contenu + ___________________ ## config.yml @@ -68,3 +72,10 @@ Une ligne aura cette forme : (T, C et A ne peuvent pas contenir d'espace) Les lignes vides et les lignes dont le premier caractère est un `#` seront ignorés. Les caractères non imprimables en début et fin de ligne sont conservés + +___________________ + +## command_history.save +Contient l'historique des commandes envoyés en utilisant le Network API. Une limite peut être fixé concernant le nombre commandes enregistrés. + +Ce fichier n'a pas à être éditée à la main, car c'est le serveur qui gère son contenu. diff --git a/NetworkAPI protocole.md b/NetworkAPI protocole.md index df1cd44..c9fcd5e 100644 --- a/NetworkAPI protocole.md +++ b/NetworkAPI protocole.md @@ -77,6 +77,14 @@ La partie **donnée** de la requête contient d'abord le pseudo du joueur source Cet exemple enverra de la part de `marcbal` le message `salut :)` à `toto`. +#### `console_command_history` +Retourne la liste des commandes se trouvant dans l'historique. Cette liste servira à l'interface Web pour aider à l'exécution des commandes. + +La partie **donnée** de la requête ne contient rien. + +Chaque ligne de la réponse sera une commande de l'historique, sachant que la dernière retournée sera la plus récente. Les doublons sont ignorés. C'est à dire que si une commande déjà existante l'historique est réexécutée, elle sera retirée de son ancien emplacement pour aller à la dernière place. + +Les commandes ajoutés à cette liste seront les commandes envoyés via les requêtes `command` et `command_async`. ## Structure d'une réponse La réponse est construite en mode texte, sur plusieurs lignes. Chaque ligne se fini par un '\n' : diff --git a/make_jar.jardesc b/make_jar.jardesc index 0bb0d0b..217a928 100644 --- a/make_jar.jardesc +++ b/make_jar.jardesc @@ -1,6 +1,6 @@ - + diff --git a/resources/plugin.yml b/resources/plugin.yml index ef277a3..0c2d291 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,6 +1,6 @@ name: PandacraftUtils main: net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils -version: 3.12 +version: 3.13 diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/PandacraftUtils.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/PandacraftUtils.java index 580657b..a529f50 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/PandacraftUtils.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/PandacraftUtils.java @@ -116,6 +116,8 @@ public class PandacraftUtils extends JavaPlugin { @Override public void onDisable(){ + + ConfigManager.getInstance().saveAll(); afkManager = null; wESelectionDisplayManager = null; 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 2788f60..392606c 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/AbstractConfig.java @@ -112,7 +112,7 @@ public abstract class AbstractConfig { protected void warning(String message) { - plugin.getLogger().warning("Error while loading configuration in '"+configFile.getName()+"' : "+message); + plugin.getLogger().warning("Erreur dans la configuration de '"+configFile.getName()+"' : "+message); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandHistoryConfig.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandHistoryConfig.java new file mode 100644 index 0000000..582cb18 --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/CommandHistoryConfig.java @@ -0,0 +1,61 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config; + +import java.io.IOException; +import java.io.PrintWriter; +import java.util.List; + +public class CommandHistoryConfig extends AbstractConfig implements Saveable { + + private List history; + + private final int nbMaxHistory = 100; + + public CommandHistoryConfig() + throws IOException { + super("command_history.save", FileType.FILE); + + history = getFileLines(true, false, false); + + } + + + + public synchronized String getStringList() { + + StringBuilder sb = new StringBuilder(); + for (String s : history) { + sb.append(s+"\n"); + } + sb.deleteCharAt(sb.length()-1); // pour supprimer le dernir retour à la ligne + return sb.toString(); + + } + + + + public synchronized void add(String s) { + if (s == null || s.trim().equals("")) return; + history.remove(s); // assure que l'élément ne se trouve pas déjà dans la liste + history.add(s); + if (history.size() > nbMaxHistory) + history.remove(0); + } + + + + @Override + public synchronized void save() { + try { + + PrintWriter br = new PrintWriter(configFile); + br.print(getStringList()); + br.flush(); + br.close(); + + } catch (Exception e) { + warning("impossible de sauvegarder"); + e.printStackTrace(); + } + } + +} 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 57f2442..c5141e3 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/ConfigManager.java @@ -21,6 +21,9 @@ public class ConfigManager { } public synchronized static void loadNewInstance() { + if (instance != null) { + instance.saveAll(); + } try { instance = new ConfigManager(); } catch (Exception e) { @@ -81,6 +84,7 @@ public class ConfigManager { public final AutoMessagesConfig autoMessagesConfig; public final CommandAliasConfig commandAliasConfig; public final MultiCommandConfig multiCommandConfig; + public final CommandHistoryConfig commandHistoryConfig; @@ -99,11 +103,21 @@ public class ConfigManager { autoMessagesConfig = new AutoMessagesConfig(); commandAliasConfig = new CommandAliasConfig(); multiCommandConfig = new MultiCommandConfig(); + commandHistoryConfig = new CommandHistoryConfig(); } + /** + * Effectue les sauvegardes nécessaires pour les éléments de configuration sauvegardable + */ + + public void saveAll() { + + commandHistoryConfig.save(); + + } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/Saveable.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/Saveable.java new file mode 100644 index 0000000..7ed4293 --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/config/Saveable.java @@ -0,0 +1,7 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.config; + +public interface Saveable { + + public void save(); + +} diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/NetworkAPI.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/NetworkAPI.java index a6de670..e8b3c60 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/NetworkAPI.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/NetworkAPI.java @@ -4,6 +4,7 @@ import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executo import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorChatSend; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorCommand; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorCommandAsync; +import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorConsoleCommandHistory; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPlayerList; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors.RequestExecutorPrivateMessage; @@ -24,6 +25,7 @@ public class NetworkAPI { new RequestExecutorPlayerList(); new RequestExecutorChatSend(); new RequestExecutorPrivateMessage(); + new RequestExecutorConsoleCommandHistory(); } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/Response.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/Response.java index 73a3852..3e9b985 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/Response.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/Response.java @@ -11,7 +11,11 @@ public class Response { this.good = good; this.data = data; } - + + /** + * Construit une réponse positive avec aucune donnée. Équivaut à + * new Response(true, "") + */ public Response() { } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommand.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommand.java index 44b439e..f7bc79f 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommand.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommand.java @@ -1,5 +1,6 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors; +import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response; public class RequestExecutorCommand extends AbstractRequestExecutor { @@ -18,7 +19,9 @@ public class RequestExecutorCommand extends AbstractRequestExecutor { try { boolean succes = plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), command); - + + ConfigManager.getInstance().commandHistoryConfig.add(command); + if (!succes) plugin.getLogger().warning("La commande ne peut pas s'exécuter : /"+command); } @@ -38,12 +41,8 @@ public class RequestExecutorCommand extends AbstractRequestExecutor { }.init(data)); - Response rep = new Response(); - rep.good = true; - rep.data = ""; - - return rep; + return new Response(); } } diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommandAsync.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommandAsync.java index c161b29..888051b 100644 --- a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommandAsync.java +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorCommandAsync.java @@ -1,5 +1,6 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors; +import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response; public class RequestExecutorCommandAsync extends AbstractRequestExecutor { @@ -15,7 +16,9 @@ public class RequestExecutorCommandAsync extends AbstractRequestExecutor { try { rep.good = plugin.getServer().dispatchCommand(plugin.getServer().getConsoleSender(), data); - + + ConfigManager.getInstance().commandHistoryConfig.add(data); + if (!rep.good) { plugin.getLogger().warning("La commande ne peut pas s'exécuter : /"+data); diff --git a/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorConsoleCommandHistory.java b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorConsoleCommandHistory.java new file mode 100644 index 0000000..7f92844 --- /dev/null +++ b/src/net/mc_pandacraft/java/plugin/pandacraftutils/network_api/request_executors/RequestExecutorConsoleCommandHistory.java @@ -0,0 +1,20 @@ +package net.mc_pandacraft.java.plugin.pandacraftutils.network_api.request_executors; + +import net.mc_pandacraft.java.plugin.pandacraftutils.config.ConfigManager; +import net.mc_pandacraft.java.plugin.pandacraftutils.network_api.Response; + +public class RequestExecutorConsoleCommandHistory extends + AbstractRequestExecutor { + + public RequestExecutorConsoleCommandHistory() { + super("console_command_history"); + } + + @Override + protected Response run(String data) { + + return new Response(true, ConfigManager.getInstance().commandHistoryConfig.getStringList()); + + } + +}