package net.mc_pandacraft.java.plugin.pandacraftutils; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import org.bukkit.ChatColor; import org.bukkit.configuration.file.FileConfiguration; /* * Configuration du plugin */ public class ConfigManager { private static ConfigManager instance = null; public synchronized static ConfigManager getInstance() { if (instance == null) try { instance = new ConfigManager(); } catch (Exception e) { PandacraftUtils.getInstance().getLogger().severe("Erreur de chargement de la configuration de PandacraftUtils"); e.printStackTrace(); } return instance; } public synchronized static void reloadConfig() { if (instance != null) PandacraftUtils.getInstance().reloadConfig(); instance = null; } private PandacraftUtils plugin = PandacraftUtils.getInstance(); private ConfigManager() throws Exception { // dossier de configuration principale File configDir = plugin.getDataFolder(); configDir.mkdir(); // dossier qui doit contenir les messages automatiques File autoMessagesDir = new File(configDir, "automessages"); autoMessagesDir.mkdir(); // 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(); // fichier qui doit contenir les insultes à censurer File badWordsFile = new File(configDir, "badwords.txt"); badWordsFile.createNewFile(); plugin.saveDefaultConfig(); FileConfiguration configFile = plugin.getConfig(); Database_host = configFile.getString("database.host"); Database_port = configFile.getInt("database.port"); Database_database = configFile.getString("database.base"); Database_username = configFile.getString("database.user"); Database_password = configFile.getString("database.pass"); AFK_timeoutAutoAfkMessage = configFile.getInt("afk.timeoutAutoMessage"); AFK_timeoutAutoAfkKick = configFile.getInt("afk.timeoutAutoKick"); ChatAnalysis_timeBeforeResendSameMessage = configFile.getLong("chatAnalysis.timeBeforeResendSameMessage"); ChatAnalysis_timeBeforeResendSameCommand = configFile.getLong("chatAnalysis.timeBeforeResendSameCommand"); ChatAnalysis_timePerCaracterForNewMessage = configFile.getLong("chatAnalysis.timePerCaracterForNewMessage"); ChatAnalysis_maxViolationLevel = configFile.getInt("chatAnalysis.maxViolationLevel"); ChatAnalysis_nbSecondForOneVLDown = configFile.getInt("chatAnalysis.nbSecondForOneVLDown"); CuboCommand_worlds = Arrays.asList(configFile.getString("cubos.worlds").split(";")); UsersCleaner_users_cleaner_group = configFile.getString("cleaner.users_cleaner_group"); // TODO ajouter les valeurs par défaut dans config.yml Automessage_interval_players = configFile.getInt("autoMessage.interval_player", 10*60); Automessage_interval_default = configFile.getInt("autoMessage.interval_default", 2*60+30); // TODO ajouter les valeurs par défaut dans config.yml // TODO gérer les codes de coloration; ServerMessages_defaultColor = ChatColor.YELLOW.toString(); ServerMessages_prefix = ChatColor.YELLOW+"["+ChatColor.WHITE+"Pandacraft"+ChatColor.YELLOW+"] "; //configFile.getString("server_messages_prefix"); // TODO ajouter les valeurs par défaut dans config.yml // TODO gérer les codes de coloration; ServerMOTD = "§7Serveur §fPandacraft§7, §eVenez nous rejoindre :D\n§bCreatif§7, §6Survie§7 et §4Faction/PVP§7 !"; initChatAnalysisBadWord(); initCommandAlias(); initAutomessages(); } /* * Connexion à la base de donnée */ public String Database_host; public int Database_port; public String Database_username; public String Database_database; public String Database_password; /* * Users cleaner */ public String UsersCleaner_users_cleaner_group; /* * Automessages */ public List> Automessages_messages; /** * En seconde : pour les joueurs != visiteur */ public int Automessage_interval_players; /** * En seconde : pour les visiteurs */ public int Automessage_interval_default; private void initAutomessages() { Automessages_messages = new ArrayList>(); Map message; message = new HashMap(); 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(); message.put("message", "Utilisez la commande &7/cubo"+ServerMessages_defaultColor+" 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(); message.put("message", "WorldEdit disponible en &bCréatif"+ServerMessages_defaultColor+" avec le grade %n&f[&eUltimate&f]"+ServerMessages_defaultColor+". Profitez en vite :D%n &a https://www.mc-pandacraft.net/?p=ultimate"); message.put("permissions", "*"); Automessages_messages.add(message); message = new HashMap(); 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 */ } /* * Configuration AFK */ /** * En secondes */ public int AFK_timeoutAutoAfkMessage; /** * En secondes */ public int AFK_timeoutAutoAfkKick; // 10 min /* * Configuration analyse du chat et des messages privés * (antispam, insultes, publicité) */ /** * En milisecondes */ public long ChatAnalysis_timeBeforeResendSameMessage;// 2 min /** * En milisecondes */ public long ChatAnalysis_timeBeforeResendSameCommand;// 60 sec /** * En milisecondes */ public long ChatAnalysis_timePerCaracterForNewMessage;// 0.1 sec public int ChatAnalysis_maxViolationLevel; public int ChatAnalysis_nbSecondForOneVLDown; public List ChatAnalysis_badWords; // les insultes private void initChatAnalysisBadWord() { ChatAnalysis_badWords = new ArrayList(); /* * Insultes */ ChatAnalysis_badWords.add("pu+tes?"); ChatAnalysis_badWords.add("conn?a(rd?|ss?e?)"); ChatAnalysis_badWords.add("sal(o+|au)pe?s?"); ChatAnalysis_badWords.add("[ea]ncul(é|e|er|ai(s|t|))"); ChatAnalysis_badWords.add("merdes?"); ChatAnalysis_badWords.add("ni(qu|k)e? ta m(è|e|é)re?"); ChatAnalysis_badWords.add("fil?s de putes?"); ChatAnalysis_badWords.add("ta m(è|e|é)re? l(a|e) putes?"); ChatAnalysis_badWords.add("tafiole?s?"); ChatAnalysis_badWords.add("vas? te pendre"); ChatAnalysis_badWords.add("fuck"); ChatAnalysis_badWords.add("mother ?fuc?ker"); ChatAnalysis_badWords.add("dick"); ChatAnalysis_badWords.add("ass"); ChatAnalysis_badWords.add("bitch"); //ChatAnalysis_badWords.add(""); /* * Pub pour des serveurs (avec sous domaines type *.mtxserv.fr ou nom de serveur connu genre Minefield) */ ChatAnalysis_badWords.add("minefield"); ChatAnalysis_badWords.add("mineplex"); ChatAnalysis_badWords.add("hypixel"); //ChatAnalysis_badWords.add(""); //ChatAnalysis_badWords.add(""); //ChatAnalysis_badWords.add(""); } /* * 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.not_default"); CommandAlias_alias.add(alias); /* Map alias = new HashMap(); alias.put("initialCommand", ""); alias.put("replaceWith", ""); alias.put("permissions", ""); CommandAlias_alias.add(alias); */ } public List CuboCommand_worlds = new ArrayList(); public String ServerMessages_prefix; public String ServerMessages_defaultColor; public String ServerMOTD; }