Gestion dans une classe à part des messages automatiques
This commit is contained in:
@@ -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<AutoMessage> messages = plugin.autoMessagesManager.getMessagesFromConfig();
|
||||
List<AutoMessagesConfigEntry> 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)+")");
|
||||
|
@@ -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 <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
|
||||
* @param f le fichier à lire
|
||||
* @return la liste des lignes utiles
|
||||
* @throws IOException
|
||||
*/
|
||||
protected List<String> getFileLines(boolean ignoreEmpty, boolean ignoreHashtagComment, boolean trimOutput) throws IOException {
|
||||
if (!configFile.isFile())
|
||||
protected List<String> 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<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 {
|
||||
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 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<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;
|
||||
|
||||
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<AutoMessage> messages = getMessagesFromConfig();
|
||||
List<AutoMessagesConfigEntry> 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<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;
|
||||
op.updateAutomessage_last_message_time();
|
||||
|
||||
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");
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user