Gestion dans une classe à part des messages automatiques
This commit is contained in:
parent
dbae5bea01
commit
9abe06afe1
@ -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
|
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`.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,7 +2,8 @@ package net.mc_pandacraft.java.plugin.pandacraftutils.commands;
|
|||||||
|
|
||||||
import java.util.List;
|
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 net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -20,7 +21,7 @@ public class CommandAutomessager extends AbstractCommandExecutor {
|
|||||||
public boolean onCommand(CommandSender sender, Command cmd, String alias,
|
public boolean onCommand(CommandSender sender, Command cmd, String alias,
|
||||||
String[] args) {
|
String[] args) {
|
||||||
|
|
||||||
List<AutoMessage> messages = plugin.autoMessagesManager.getMessagesFromConfig();
|
List<AutoMessagesConfigEntry> messages = ConfigManager.getInstance().autoMessagesConfig.getAutoMessages();
|
||||||
|
|
||||||
if (args.length == 0 || !(sender instanceof Player)) {
|
if (args.length == 0 || !(sender instanceof Player)) {
|
||||||
sender.sendMessage(ChatColor.GOLD+"Il y a "+messages.size()+" messages (de 0 à "+(messages.size()-1)+")");
|
sender.sendMessage(ChatColor.GOLD+"Il y a "+messages.size()+" messages (de 0 à "+(messages.size()-1)+")");
|
||||||
|
@ -5,6 +5,7 @@ import java.io.File;
|
|||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
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 <code>true</code> si on doit ignorer les lignes vides
|
* @param ignoreEmpty <code>true</code> si on doit ignorer les lignes vides
|
||||||
* @param ignoreHashtagComment <code>true</code> si on doit ignorer les lignes commentés (commençant par un #)
|
* @param ignoreHashtagComment <code>true</code> si on doit ignorer les lignes commentés (commençant par un #)
|
||||||
* @param trimOutput <code>true</code> si on doit appeller la méthode String.trim() sur chaque ligne retournée
|
* @param trimOutput <code>true</code> 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
|
* @return la liste des lignes utiles
|
||||||
* @throws IOException
|
* @throws IOException
|
||||||
*/
|
*/
|
||||||
protected List<String> getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput) throws IOException {
|
protected List<String> getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput, File f) throws IOException {
|
||||||
if (!configFile.isFile())
|
if (!f.isFile())
|
||||||
return null;
|
return null;
|
||||||
|
|
||||||
BufferedReader reader = new BufferedReader(new FileReader(configFile));
|
BufferedReader reader = new BufferedReader(new FileReader(f));
|
||||||
|
|
||||||
List<String> lines = new ArrayList<String>();
|
List<String> lines = new ArrayList<String>();
|
||||||
|
|
||||||
@ -79,9 +81,25 @@ public abstract class AbstractConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retourne toutes les lignes du fichier de configuration
|
||||||
|
* @param ignoreEmpty <code>true</code> si on doit ignorer les lignes vides
|
||||||
|
* @param ignoreHashtagComment <code>true</code> si on doit ignorer les lignes commentés (commençant par un #)
|
||||||
|
* @param trimOutput <code>true</code> si on doit appeller la méthode String.trim() sur chaque ligne retournée
|
||||||
|
* @return la liste des lignes utiles
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
protected List<String> 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<File> 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 {
|
protected enum FileType {
|
||||||
FILE, DIR
|
FILE, DIR
|
||||||
}
|
}
|
||||||
|
@ -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<AutoMessagesConfigEntry> config;
|
||||||
|
|
||||||
|
|
||||||
|
public AutoMessagesConfig() throws IOException {
|
||||||
|
super("automessages", FileType.DIR);
|
||||||
|
|
||||||
|
List<File> 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<String> 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<AutoMessagesConfigEntry> getAutoMessages() {
|
||||||
|
return Collections.unmodifiableList(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -8,8 +8,6 @@ import java.util.Map;
|
|||||||
|
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Configuration du plugin
|
* Configuration du plugin
|
||||||
*/
|
*/
|
||||||
@ -54,6 +52,7 @@ public class ConfigManager {
|
|||||||
public final DefaultConfig defaultConfig;
|
public final DefaultConfig defaultConfig;
|
||||||
public final WorldBorderConfig worldBorderConfig;
|
public final WorldBorderConfig worldBorderConfig;
|
||||||
public final ChatBadWordsConfig chatBadWordsConfig;
|
public final ChatBadWordsConfig chatBadWordsConfig;
|
||||||
|
public final AutoMessagesConfig autoMessagesConfig;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -69,6 +68,8 @@ public class ConfigManager {
|
|||||||
defaultConfig = new DefaultConfig();
|
defaultConfig = new DefaultConfig();
|
||||||
worldBorderConfig = new WorldBorderConfig();
|
worldBorderConfig = new WorldBorderConfig();
|
||||||
chatBadWordsConfig = new ChatBadWordsConfig();
|
chatBadWordsConfig = new ChatBadWordsConfig();
|
||||||
|
autoMessagesConfig = new AutoMessagesConfig();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// dossier qui doit contenir les messages automatiques
|
// dossier qui doit contenir les messages automatiques
|
||||||
@ -86,7 +87,6 @@ public class ConfigManager {
|
|||||||
|
|
||||||
|
|
||||||
initCommandAlias();
|
initCommandAlias();
|
||||||
initAutomessages();
|
|
||||||
initMultiCommand();
|
initMultiCommand();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -95,51 +95,6 @@ public class ConfigManager {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Automessages
|
|
||||||
*/
|
|
||||||
public List<Map<String, String>> Automessages_messages;
|
|
||||||
|
|
||||||
private void initAutomessages() {
|
|
||||||
Automessages_messages = new ArrayList<Map<String,String>>();
|
|
||||||
|
|
||||||
String defColor = defaultConfig.serverMessages_defaultColor;
|
|
||||||
|
|
||||||
Map<String, String> message;
|
|
||||||
|
|
||||||
message = new HashMap<String, String>();
|
|
||||||
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<String, String>();
|
|
||||||
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<String, String>();
|
|
||||||
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<String, String>();
|
|
||||||
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
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -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<AutoMessagesConfigEntry> {
|
||||||
|
private final int order;
|
||||||
|
private final String message;
|
||||||
|
private final List<String> permissions;
|
||||||
|
|
||||||
|
public AutoMessagesConfigEntry(int o, String perm, List<String> 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;
|
||||||
|
}
|
||||||
|
}
|
@ -1,17 +1,14 @@
|
|||||||
package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
|
package net.mc_pandacraft.java.plugin.pandacraftutils.modules;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.PandacraftUtils;
|
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.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.OnlinePlayer;
|
||||||
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
import net.mc_pandacraft.java.plugin.pandacraftutils.players.OnlinePlayerManager;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
|
||||||
public class AutoMessagesManager extends BukkitRunnable {
|
public class AutoMessagesManager extends BukkitRunnable {
|
||||||
@ -30,7 +27,7 @@ public class AutoMessagesManager extends BukkitRunnable {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
List<AutoMessage> messages = getMessagesFromConfig();
|
List<AutoMessagesConfigEntry> messages = ConfigManager.getInstance().autoMessagesConfig.getAutoMessages();
|
||||||
int interval_default = ConfigManager.getInstance().defaultConfig.autoMessages_defaultInterval,
|
int interval_default = ConfigManager.getInstance().defaultConfig.autoMessages_defaultInterval,
|
||||||
interval_players = ConfigManager.getInstance().defaultConfig.autoMessages_playerInterval;
|
interval_players = ConfigManager.getInstance().defaultConfig.autoMessages_playerInterval;
|
||||||
// message
|
// message
|
||||||
@ -68,61 +65,16 @@ public class AutoMessagesManager extends BukkitRunnable {
|
|||||||
// affichage du message
|
// affichage du message
|
||||||
if (atLeastOnePermitted) {
|
if (atLeastOnePermitted) {
|
||||||
op.setAutomessage_last_message_id(id);
|
op.setAutomessage_last_message_id(id);
|
||||||
op.updateAutomessage_last_message_time();
|
|
||||||
|
|
||||||
op.sendMessageFromServer(messages.get(id).getMessage());
|
op.sendMessageFromServer(messages.get(id).getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
op.updateAutomessage_last_message_time();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public List<AutoMessage> getMessagesFromConfig() {
|
|
||||||
ArrayList<AutoMessage> ret = new ArrayList<AutoMessage>();
|
|
||||||
|
|
||||||
for (Map<String, String> 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<String> 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;
|
|
||||||
|
|
||||||
for (String pe : permissions) {
|
|
||||||
if (op.hasPermission(pe)) return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
10
src/net/mc_pandacraft/java/util/bukkit/SignUtil.java
Normal file
10
src/net/mc_pandacraft/java/util/bukkit/SignUtil.java
Normal file
@ -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");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user