Gestion dans une classe à part des messages automatiques

This commit is contained in:
2015-02-18 02:27:31 -05:00
parent dbae5bea01
commit 9abe06afe1
8 changed files with 179 additions and 111 deletions

View File

@@ -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)+")");

View File

@@ -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 don
* @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
}

View File

@@ -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);
}
}

View File

@@ -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
*/
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}
}
}

View 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");
}
}