From fe9a8681693505c660fca626126dd306987b69d7 Mon Sep 17 00:00:00 2001 From: Evenprime Date: Wed, 4 May 2011 07:58:39 +0200 Subject: [PATCH] Further integration of the new configuration system + package refactoring --- .../nocheat/ConfigurationException.java | 13 + .../co/evenprime/bukkit/nocheat/NoCheat.java | 66 ++- .../bukkit/nocheat/NoCheatConfiguration.java | 302 ------------ .../bukkit/nocheat/checks/AirbuildCheck.java | 28 +- .../nocheat/checks/BedteleportCheck.java | 19 +- .../nocheat/checks/BogusitemsCheck.java | 19 +- .../bukkit/nocheat/checks/Check.java | 11 +- .../bukkit/nocheat/checks/ItemdupeCheck.java | 16 +- .../bukkit/nocheat/checks/MovingCheck.java | 39 +- .../bukkit/nocheat/checks/SpeedhackCheck.java | 36 +- .../options => config}/BooleanOption.java | 2 +- .../options => config}/ChildOption.java | 7 +- .../options => config}/IntegerOption.java | 6 +- .../bukkit/nocheat/config/LevelOption.java | 82 ++++ .../options => config}/LongStringOption.java | 2 +- .../MediumStringOption.java | 2 +- .../nocheat/config/NoCheatConfiguration.java | 434 ++++++++++++++++++ .../{wizard/options => config}/Option.java | 8 +- .../options => config}/ParentOption.java | 25 +- .../options => config}/ShortStringOption.java | 2 +- .../options => config}/TextFieldOption.java | 2 +- .../bukkit/nocheat/wizard/Wizard.java | 137 +----- .../wizard/gui/ChildOptionGuiFactory.java | 18 +- .../nocheat/wizard/gui/ParentOptionGui.java | 10 +- .../wizard/options/LogLevelOption.java | 63 --- 25 files changed, 776 insertions(+), 573 deletions(-) create mode 100644 src/cc/co/evenprime/bukkit/nocheat/ConfigurationException.java delete mode 100644 src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/BooleanOption.java (84%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/ChildOption.java (55%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/IntegerOption.java (74%) create mode 100644 src/cc/co/evenprime/bukkit/nocheat/config/LevelOption.java rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/LongStringOption.java (78%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/MediumStringOption.java (78%) create mode 100644 src/cc/co/evenprime/bukkit/nocheat/config/NoCheatConfiguration.java rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/Option.java (50%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/ParentOption.java (53%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/ShortStringOption.java (78%) rename src/cc/co/evenprime/bukkit/nocheat/{wizard/options => config}/TextFieldOption.java (89%) delete mode 100644 src/cc/co/evenprime/bukkit/nocheat/wizard/options/LogLevelOption.java diff --git a/src/cc/co/evenprime/bukkit/nocheat/ConfigurationException.java b/src/cc/co/evenprime/bukkit/nocheat/ConfigurationException.java new file mode 100644 index 00000000..56f6bbc0 --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/ConfigurationException.java @@ -0,0 +1,13 @@ +package cc.co.evenprime.bukkit.nocheat; + +public class ConfigurationException extends Exception { + + /** + * + */ + private static final long serialVersionUID = -457634587532590464L; + + public ConfigurationException(String message) { + super(message); + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java index 6fa922eb..8c46108d 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java +++ b/src/cc/co/evenprime/bukkit/nocheat/NoCheat.java @@ -1,6 +1,7 @@ package cc.co.evenprime.bukkit.nocheat; +import java.io.File; import java.util.logging.Level; import java.util.logging.Logger; @@ -20,6 +21,7 @@ import cc.co.evenprime.bukkit.nocheat.checks.Check; import cc.co.evenprime.bukkit.nocheat.checks.ItemdupeCheck; import cc.co.evenprime.bukkit.nocheat.checks.MovingCheck; import cc.co.evenprime.bukkit.nocheat.checks.SpeedhackCheck; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import com.ensifera.animosity.craftirc.CraftIRC; @@ -37,12 +39,12 @@ import org.bukkit.plugin.Plugin; */ public class NoCheat extends JavaPlugin { - public MovingCheck movingCheck; - public BedteleportCheck bedteleportCheck; - public SpeedhackCheck speedhackCheck; - public AirbuildCheck airbuildCheck; - public ItemdupeCheck itemdupeCheck; - public BogusitemsCheck bogusitemsCheck; + private MovingCheck movingCheck; + private BedteleportCheck bedteleportCheck; + private SpeedhackCheck speedhackCheck; + private AirbuildCheck airbuildCheck; + private ItemdupeCheck itemdupeCheck; + private BogusitemsCheck bogusitemsCheck; private Check[] checks; @@ -63,6 +65,12 @@ public class NoCheat extends JavaPlugin { // CraftIRC 2.x, if available private CraftIRC irc; + private Level chatLevel; + private Level ircLevel; + private Level consoleLevel; + private String ircTag; + + public NoCheat() { } @@ -116,20 +124,19 @@ public class NoCheat extends JavaPlugin { public void onEnable() { - movingCheck = new MovingCheck(this); - bedteleportCheck = new BedteleportCheck(this); - speedhackCheck = new SpeedhackCheck(this); - airbuildCheck = new AirbuildCheck(this); - itemdupeCheck = new ItemdupeCheck(this); - bogusitemsCheck = new BogusitemsCheck(this); + // parse the nocheat.yml config file + setupConfig(); + + movingCheck = new MovingCheck(this, config); + bedteleportCheck = new BedteleportCheck(this, config); + speedhackCheck = new SpeedhackCheck(this, config); + airbuildCheck = new AirbuildCheck(this, config); + itemdupeCheck = new ItemdupeCheck(this, config); + bogusitemsCheck = new BogusitemsCheck(this, config); // just for convenience checks = new Check[] { movingCheck, bedteleportCheck, speedhackCheck, airbuildCheck, itemdupeCheck, bogusitemsCheck }; - - // parse the nocheat.yml config file - setupConfig(); - - + PluginDescriptionFile pdfFile = this.getDescription(); // Get, if available, the Permissions and irc plugin @@ -236,7 +243,7 @@ public class NoCheat extends JavaPlugin { } private void logToChat(Level l, String message) { - if(config.chatLevel.intValue() <= l.intValue()) { + if(chatLevel.intValue() <= l.intValue()) { for(Player player : getServer().getOnlinePlayers()) { if(hasPermission(player, PermissionData.PERMISSION_NOTIFY)) { player.sendMessage("["+l.getName()+"] " + message); @@ -246,13 +253,13 @@ public class NoCheat extends JavaPlugin { } private void logToIRC(Level l, String message) { - if(irc != null && config.ircLevel.intValue() <= l.intValue()) { - irc.sendMessageToTag("["+l.getName()+"] " + message , config.ircTag); + if(irc != null && ircLevel.intValue() <= l.intValue()) { + irc.sendMessageToTag("["+l.getName()+"] " + message , ircTag); } } private void logToConsole(Level l, String message) { - if( config.consoleLevel.intValue() <= l.intValue()) { + if( consoleLevel.intValue() <= l.intValue()) { Logger.getLogger("Minecraft").log(l, message); } } @@ -295,9 +302,22 @@ public class NoCheat extends JavaPlugin { */ private void setupConfig() { if(this.config == null) - this.config = new NoCheatConfiguration(this); + this.config = new NoCheatConfiguration(new File(NoCheatConfiguration.configFile)); else - this.config.config(); + this.config.config(new File(NoCheatConfiguration.configFile)); + + config.setupFileLogger(); + + try { + this.chatLevel = config.getLogLevelValue("logging.logtochat"); + this.ircLevel = config.getLogLevelValue("logging.logtoirc"); + this.consoleLevel = config.getLogLevelValue("logging.logtoconsole"); + this.ircTag = config.getStringValue("logging.logtoirctag"); + } catch (ConfigurationException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + this.setEnabled(false); + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java b/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java deleted file mode 100644 index ac4371f1..00000000 --- a/src/cc/co/evenprime/bukkit/nocheat/NoCheatConfiguration.java +++ /dev/null @@ -1,302 +0,0 @@ -package cc.co.evenprime.bukkit.nocheat; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.util.LinkedList; -import java.util.List; -import java.util.logging.FileHandler; -import java.util.logging.Level; -import java.util.logging.Logger; - -import org.bukkit.util.config.Configuration; - -import cc.co.evenprime.bukkit.nocheat.actions.Action; -import cc.co.evenprime.bukkit.nocheat.actions.CancelAction; -import cc.co.evenprime.bukkit.nocheat.actions.LogAction; - -/** - * Central location for everything that's described in the configuration file - * - * @author Evenprime - * - */ -public class NoCheatConfiguration { - - - private final static String configFile = "plugins/NoCheat/nocheat.yml"; - - // Our personal logger - private final static String loggerName = "cc.co.evenprime.nocheat"; - public final Logger logger = Logger.getLogger(loggerName); - - // The log level above which information gets logged to the specified logger - public Level chatLevel = Level.WARNING; - public Level ircLevel = Level.WARNING; - public Level consoleLevel = Level.SEVERE; - public Level fileLevel = Level.INFO; - - public String fileName = "plugins/NoCheat/nocheat.log"; - - public String ircTag = "nocheat"; - - // Our log output to a file - private FileHandler fh = null; - - private final NoCheat plugin; - - public NoCheatConfiguration(NoCheat plugin) { - - this.plugin = plugin; - - config(); - } - - /** - * Read the configuration file and assign either standard values or whatever is declared in the file - * @param configurationFile - */ - public void config() { - - File configurationFile = new File(configFile); - - if(!configurationFile.exists()) { - createStandardConfigFile(configurationFile); - } - - Configuration c = new Configuration(configurationFile); - c.load(); - - logger.setLevel(Level.INFO); - logger.setUseParentHandlers(false); - - chatLevel = stringToLevel(c.getString("logging.logtochat"), chatLevel); - consoleLevel = stringToLevel(c.getString("logging.logtoconsole"), consoleLevel); - fileLevel = stringToLevel(c.getString("logging.logtofile"), fileLevel); - ircLevel = stringToLevel(c.getString("logging.logtoirc"), ircLevel); - ircTag = c.getString("logging.logtoirctag", ircTag); - - if(fh == null) { - try { - fh = new FileHandler(fileName, true); - fh.setLevel(fileLevel); - fh.setFormatter(Logger.getLogger("Minecraft").getHandlers()[0].getFormatter()); - logger.addHandler(fh); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - plugin.speedhackCheck.limits[0] = c.getInt("speedhack.limits.low", plugin.speedhackCheck.limits[0]); - plugin.speedhackCheck.limits[1] = c.getInt("speedhack.limits.med", plugin.speedhackCheck.limits[1]); - plugin.speedhackCheck.limits[2] = c.getInt("speedhack.limits.high", plugin.speedhackCheck.limits[2]); - - plugin.speedhackCheck.logMessage = c.getString("speedhack.logmessage", plugin.speedhackCheck.logMessage); - - plugin.movingCheck.actions[0] = stringToActions(c.getString("moving.action.low"), plugin.movingCheck.actions[0]); - plugin.movingCheck.actions[1] = stringToActions(c.getString("moving.action.med"), plugin.movingCheck.actions[1]); - plugin.movingCheck.actions[2] = stringToActions(c.getString("moving.action.high"), plugin.movingCheck.actions[2]); - - - plugin.movingCheck.logMessage = c.getString("moving.logmessage", plugin.movingCheck.logMessage); - plugin.movingCheck.summaryMessage = c.getString("moving.summarymessage", plugin.movingCheck.summaryMessage); - - plugin.movingCheck.allowFlying = c.getBoolean("moving.allowflying", plugin.movingCheck.allowFlying); - plugin.movingCheck.allowFakeSneak = c.getBoolean("moving.allowfakesneak", plugin.movingCheck.allowFakeSneak); - - plugin.speedhackCheck.actions[0] = stringToActions(c.getString("speedhack.action.low"), plugin.speedhackCheck.actions[0]); - plugin.speedhackCheck.actions[1] = stringToActions(c.getString("speedhack.action.med"), plugin.speedhackCheck.actions[1]); - plugin.speedhackCheck.actions[2] = stringToActions(c.getString("speedhack.action.high"), plugin.speedhackCheck.actions[2]); - - plugin.airbuildCheck.limits[0] = c.getInt("airbuild.limits.low", plugin.airbuildCheck.limits[0]); - plugin.airbuildCheck.limits[1] = c.getInt("airbuild.limits.med", plugin.airbuildCheck.limits[1]); - plugin.airbuildCheck.limits[2] = c.getInt("airbuild.limits.high", plugin.airbuildCheck.limits[2]); - - plugin.airbuildCheck.actions[0] = stringToActions(c.getString("airbuild.action.low"), plugin.airbuildCheck.actions[0]); - plugin.airbuildCheck.actions[1] = stringToActions(c.getString("airbuild.action.med"), plugin.airbuildCheck.actions[1]); - plugin.airbuildCheck.actions[2] = stringToActions(c.getString("airbuild.action.high"), plugin.airbuildCheck.actions[2]); - - plugin.speedhackCheck.setActive(c.getBoolean("active.speedhack", true)); - plugin.movingCheck.setActive(c.getBoolean("active.moving", true)); - plugin.airbuildCheck.setActive(c.getBoolean("active.airbuild", false)); - plugin.bedteleportCheck.setActive(c.getBoolean("active.bedteleport", true)); - plugin.itemdupeCheck.setActive(c.getBoolean("active.itemdupe", true)); - plugin.bogusitemsCheck.setActive(c.getBoolean("active.bogusitems", false)); - } - - public void cleanup() { - - if(fh != null) { - try { - logger.removeHandler(fh); - fh.flush(); - fh.close(); - - } catch (Exception e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - } - - private Action[] stringToActions(String string, Action[] def) { - - if(string == null) return def; - - List as = new LinkedList(); - String[] parts = string.split(" "); - - for(String s : parts) { - if(s.equals("loglow")) - as.add(LogAction.loglow); - else if(s.equals("logmed")) - as.add(LogAction.logmed); - else if(s.equals("loghigh")) - as.add(LogAction.loghigh); - else if(s.equals("deny")) - as.add(CancelAction.cancel); - else if(s.equals("reset")) - as.add(CancelAction.cancel); - else if(s.equals("cancel")) - as.add(CancelAction.cancel); - else if(s.startsWith("custom")) { - try { - // TODO: Implement Custom Action - //as.add(new CustomAction(Integer.parseInt(s.substring(6)))); - } - catch(Exception e) { - System.out.println("NC: Couldn't parse number of custom action '" + s + "'"); - } - } - else { - System.out.println("NC: Can't parse action "+ s); - } - } - - - return as.toArray(def); - } - - private String actionsToString(Action[] actions) { - - StringBuffer s = new StringBuffer(); - - if(actions != null) { - for(Action a : actions) { - s.append(' ').append(a.getName()); - } - } - - return s.toString().trim(); - } - /** - * Convert a string into a log level - * @param string - * @return - */ - private static Level stringToLevel(String string, Level def) { - - if(string == null) { - return def; - } - - if(string.trim().equals("info") || string.trim().equals("low")) return Level.INFO; - if(string.trim().equals("warn") || string.trim().equals("med")) return Level.WARNING; - if(string.trim().equals("severe")|| string.trim().equals("high")) return Level.SEVERE; - - return Level.OFF; - } - - private static String levelToString(Level level) { - - if(level == null) { - return "off"; - } - - if(level.equals(Level.INFO)) return "low"; - else if(level.equals(Level.WARNING)) return "med"; - else if(level.equals(Level.SEVERE)) return "high"; - - return "off"; - } - - /** - * Standard configuration file for people who haven't got one yet - * @param f - */ - private void createStandardConfigFile(File f) { - try { - f.getParentFile().mkdirs(); - f.createNewFile(); - BufferedWriter w = new BufferedWriter(new FileWriter(f)); - - w.write("# Logging: potential log levels are low (info), med (warn), high (severe), off"); w.newLine(); - w.write("logging:"); w.newLine(); - w.write(" filename: "+fileName); w.newLine(); - w.write(" logtofile: "+levelToString(fileLevel)); w.newLine(); - w.write(" logtoconsole: "+levelToString(consoleLevel)); w.newLine(); - w.write(" logtochat: "+levelToString(chatLevel)); w.newLine(); - w.write(" logtoirc: "+levelToString(ircLevel)); w.newLine(); - w.write(" logtoirctag: "+ircTag); w.newLine(); - w.write("# Checks and Bugfixes that are activated (true or false)"); w.newLine(); - w.write("active:"); w.newLine(); - w.write(" speedhack: true"); w.newLine(); - w.write(" moving: true"); w.newLine(); - w.write(" airbuild: false"); w.newLine(); - w.write(" bedteleport: true"); w.newLine(); - w.write(" itemdupe: true"); w.newLine(); - w.write(" bogusitems: false"); w.newLine(); - w.write("# Speedhack specific options"); w.newLine(); - w.write("speedhack:"); w.newLine(); - w.write(" logmessage: \"" + plugin.speedhackCheck.logMessage+"\""); w.newLine(); - w.write(" limits:"); w.newLine(); - w.write(" low: "+plugin.speedhackCheck.limits[0]); w.newLine(); - w.write(" med: "+plugin.speedhackCheck.limits[1]); w.newLine(); - w.write(" high: "+plugin.speedhackCheck.limits[2]); w.newLine(); - w.write("# Speedhack Action, one or more of 'loglow logmed loghigh cancel'"); w.newLine(); - w.write(" action:"); w.newLine(); - w.write(" low: "+actionsToString(plugin.speedhackCheck.actions[0])); w.newLine(); - w.write(" med: "+actionsToString(plugin.speedhackCheck.actions[1])); w.newLine(); - w.write(" high: "+actionsToString(plugin.speedhackCheck.actions[2])); w.newLine(); - w.write("# Moving specific options") ; w.newLine(); - w.write("moving:"); w.newLine(); - w.write(" logmessage: \"" + plugin.movingCheck.logMessage+"\""); w.newLine(); - w.write(" summarymessage: \"" + plugin.movingCheck.summaryMessage+"\""); w.newLine(); - w.write("# Should (normal speed) flying be generally allowed?"); w.newLine(); - w.write(" allowflying: " + plugin.movingCheck.allowFlying); w.newLine(); - w.write("# Should sneaking with normal walking speed be generally allowed?"); w.newLine(); - w.write(" allowfakesneak: " + plugin.movingCheck.allowFakeSneak); w.newLine(); - w.write("# Moving Action, one or more of 'loglow logmed loghigh cancel'"); w.newLine(); - w.write(" action:"); w.newLine(); - w.write(" low: "+actionsToString(plugin.movingCheck.actions[0])); w.newLine(); - w.write(" med: "+actionsToString(plugin.movingCheck.actions[1])); w.newLine(); - w.write(" high: "+actionsToString(plugin.movingCheck.actions[2])); w.newLine(); - w.write("# Airbuild specific options"); w.newLine(); - w.write("airbuild:"); w.newLine(); - w.write("# How many blocks per second are placed by the player in midair to trigger corresponding action"); w.newLine(); - w.write(" limits:"); w.newLine(); - w.write(" low: "+plugin.airbuildCheck.limits[0]); w.newLine(); - w.write(" med: "+plugin.airbuildCheck.limits[1]); w.newLine(); - w.write(" high: "+plugin.airbuildCheck.limits[2]); w.newLine(); - w.write("# Airbuild Action, one or more of 'loglow logmed loghigh cancel'"); w.newLine(); - w.write(" action:"); w.newLine(); - w.write(" low: "+actionsToString(plugin.airbuildCheck.actions[0])); w.newLine(); - w.write(" med: "+actionsToString(plugin.airbuildCheck.actions[1])); w.newLine(); - w.write(" high: "+actionsToString(plugin.airbuildCheck.actions[2])); w.newLine(); - w.write("# Bedteleport specific options (none exist yet)"); w.newLine(); - w.write("bedteleport:"); w.newLine(); - w.write("# Itemdupe specific options (none exist yet)"); w.newLine(); - w.write("itemdupe:"); w.newLine(); - w.write("# Bogusitems specific options (none exist yet)"); w.newLine(); - w.write("bogusitems:"); w.newLine(); - - w.flush(); w.close(); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } -} diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/AirbuildCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/AirbuildCheck.java index d1d8855a..a8209164 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/AirbuildCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/AirbuildCheck.java @@ -9,11 +9,13 @@ import org.bukkit.event.Event.Priority; import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.plugin.PluginManager; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; import cc.co.evenprime.bukkit.nocheat.actions.Action; import cc.co.evenprime.bukkit.nocheat.actions.CancelAction; import cc.co.evenprime.bukkit.nocheat.actions.CustomAction; import cc.co.evenprime.bukkit.nocheat.actions.LogAction; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.AirbuildData; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.AirbuildBlockListener; @@ -28,15 +30,15 @@ import cc.co.evenprime.bukkit.nocheat.listeners.AirbuildBlockListener; public class AirbuildCheck extends Check { // How should airbuild violations be treated? - public final Action actions[][] = { + private final Action actions[][] = { { LogAction.loglow, CancelAction.cancel }, { LogAction.logmed, CancelAction.cancel }, { LogAction.loghigh, CancelAction.cancel } }; - public final int limits[] = { 1, 3, 10 }; + private int limits[]; - public AirbuildCheck(NoCheat plugin) { - super(plugin, "airbuild", PermissionData.PERMISSION_AIRBUILD); + public AirbuildCheck(NoCheat plugin, NoCheatConfiguration config) { + super(plugin, "airbuild", PermissionData.PERMISSION_AIRBUILD, config); } public void check(BlockPlaceEvent event) { @@ -123,6 +125,24 @@ public class AirbuildCheck extends Check { data.perSecond = 0; } + @Override + public void configure(NoCheatConfiguration config) { + + try { + limits = new int[3]; + + limits[0] = config.getIntegerValue("airbuild.limits.low"); + limits[1] = config.getIntegerValue("airbuild.limits.med"); + limits[2] = config.getIntegerValue("airbuild.limits.high"); + + setActive(config.getBooleanValue("active.airbuild")); + + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + } + @Override protected void registerListeners() { PluginManager pm = Bukkit.getServer().getPluginManager(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/BedteleportCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/BedteleportCheck.java index 885d2df6..e63507be 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/BedteleportCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/BedteleportCheck.java @@ -6,7 +6,9 @@ import org.bukkit.event.Event.Priority; import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.plugin.PluginManager; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.BedteleportPlayerListener; @@ -18,8 +20,8 @@ import cc.co.evenprime.bukkit.nocheat.listeners.BedteleportPlayerListener; public class BedteleportCheck extends Check { - public BedteleportCheck(NoCheat plugin) { - super(plugin, "bedteleport", PermissionData.PERMISSION_BEDTELEPORT); + public BedteleportCheck(NoCheat plugin, NoCheatConfiguration config) { + super(plugin, "bedteleport", PermissionData.PERMISSION_BEDTELEPORT, config); } public void check(PlayerMoveEvent event) { @@ -31,7 +33,18 @@ public class BedteleportCheck extends Check { if(event.getPlayer().isSleeping()) event.setCancelled(true); } - + + @Override + public void configure(NoCheatConfiguration config) { + + try { + setActive(config.getBooleanValue("active.bedteleport")); + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + } + @Override protected void registerListeners() { PluginManager pm = Bukkit.getServer().getPluginManager(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java index dc764dbd..87ca949b 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/BogusitemsCheck.java @@ -15,14 +15,16 @@ import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; import org.bukkit.plugin.PluginManager; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.BogusitemsPlayerListener; public class BogusitemsCheck extends Check { - public BogusitemsCheck(NoCheat plugin){ - super(plugin, "bogusitems", PermissionData.PERMISSION_BOGUSITEMS); + public BogusitemsCheck(NoCheat plugin, NoCheatConfiguration config){ + super(plugin, "bogusitems", PermissionData.PERMISSION_BOGUSITEMS, config); } public void check(PlayerPickupItemEvent event) { @@ -86,11 +88,22 @@ public class BogusitemsCheck extends Check { for(int i = 0; i < stacks.length; i++) { if(stacks[i] != null && stacks[i].getAmount() <= 0) { inv.clear(i); - plugin.log(Level.WARNING, "Removed illegal item from inventory of " + player.getName()); + plugin.log(Level.WARNING, "Removed invalid item from inventory of " + player.getName()); } } } + @Override + public void configure(NoCheatConfiguration config) { + + try { + setActive(config.getBooleanValue("active.bogusitems")); + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + } + @Override protected void registerListeners() { PluginManager pm = Bukkit.getServer().getPluginManager(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/Check.java b/src/cc/co/evenprime/bukkit/nocheat/checks/Check.java index 3826ae49..1156e3c7 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/Check.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/Check.java @@ -4,6 +4,7 @@ package cc.co.evenprime.bukkit.nocheat.checks; import org.bukkit.entity.Player; import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; /** * @@ -18,16 +19,20 @@ public abstract class Check { private String name; protected NoCheat plugin; - public Check(NoCheat plugin, String name, int permission) { + protected Check(NoCheat plugin, String name, int permission, NoCheatConfiguration config) { this.plugin = plugin; this.permission = permission; this.name = name; + + configure(config); } public boolean skipCheck(Player player) { // Should we check at all? return !active || plugin.hasPermission(player, permission); } + + protected abstract void configure(NoCheatConfiguration config); protected abstract void registerListeners(); @@ -35,7 +40,7 @@ public abstract class Check { return active; } - public void setActive(boolean active) { + protected void setActive(boolean active) { synchronized(this) { if(active && !listenersRegistered) { listenersRegistered = true; @@ -50,4 +55,6 @@ public abstract class Check { public String getName() { return name; } + + } diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java index b5b092dd..0eb2edca 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/ItemdupeCheck.java @@ -8,14 +8,16 @@ import org.bukkit.event.Event.Priority; import org.bukkit.event.entity.EntityDeathEvent; import org.bukkit.plugin.PluginManager; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.ItemdupeEntityListener; public class ItemdupeCheck extends Check { - public ItemdupeCheck(NoCheat plugin){ - super(plugin, "itemdupe", PermissionData.PERMISSION_ITEMDUPE); + public ItemdupeCheck(NoCheat plugin, NoCheatConfiguration config){ + super(plugin, "itemdupe", PermissionData.PERMISSION_ITEMDUPE, config); } @@ -28,6 +30,16 @@ public class ItemdupeCheck extends Check { } } + @Override + public void configure(NoCheatConfiguration config) { + + try { + setActive(config.getBooleanValue("active.itemdupe")); + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + } @Override protected void registerListeners() { diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java index c0789ca1..5893ae71 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/MovingCheck.java @@ -16,11 +16,13 @@ import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.plugin.PluginManager; import org.bukkit.util.Vector; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; import cc.co.evenprime.bukkit.nocheat.actions.Action; import cc.co.evenprime.bukkit.nocheat.actions.CancelAction; import cc.co.evenprime.bukkit.nocheat.actions.CustomAction; import cc.co.evenprime.bukkit.nocheat.actions.LogAction; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.MovingData; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.listeners.MovingEntityListener; @@ -35,8 +37,9 @@ import cc.co.evenprime.bukkit.nocheat.listeners.MovingPlayerMonitor; */ public class MovingCheck extends Check { - public MovingCheck(NoCheat plugin) { - super(plugin, "moving", PermissionData.PERMISSION_MOVING); + public MovingCheck(NoCheat plugin, NoCheatConfiguration config) { + super(plugin, "moving", PermissionData.PERMISSION_MOVING, config); + } // How many move events can a player have in air before he is expected to lose altitude (or land somewhere) @@ -51,22 +54,22 @@ public class MovingCheck extends Check { private final static double stepWidth = 0.6D; private final static double sneakStepWidth = 0.25D; - public int ticksBeforeSummary = 100; + private int ticksBeforeSummary = 100; public long statisticElapsedTimeNano = 0; - public boolean allowFlying = false; - public boolean allowFakeSneak = true; + public boolean allowFlying; + public boolean allowFakeSneak; + + private String logMessage; + private String summaryMessage; // How should moving violations be treated? - public final Action actions[][] = { + private final Action actions[][] = { { LogAction.loglow, CancelAction.cancel }, { LogAction.logmed, CancelAction.cancel }, { LogAction.loghigh, CancelAction.cancel } }; - public String logMessage = "Moving violation: %1$s from %2$s (%4$.1f, %5$.1f, %6$.1f) to %3$s (%7$.1f, %8$.1f, %9$.1f)"; - public String summaryMessage = "Moving summary of last ~%2$d seconds: %1$s total Violations: (%3$d,%4$d,%5$d)"; - public long statisticTotalEvents = 1; // Prevent accidental division by 0 at some point private static final double magic = 0.30000001192092896D; @@ -646,6 +649,24 @@ public class MovingCheck extends Check { data.teleportTo = null; } + @Override + public void configure(NoCheatConfiguration config) { + + try { + allowFlying = config.getBooleanValue("moving.allowflying"); + allowFakeSneak = config.getBooleanValue("moving.allowfakesneak"); + + logMessage = config.getStringValue("moving.logmessage"); + summaryMessage = config.getStringValue("moving.summarymessage"); + + setActive(config.getBooleanValue("active.moving")); + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + + } + @Override protected void registerListeners() { PluginManager pm = Bukkit.getServer().getPluginManager(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/checks/SpeedhackCheck.java b/src/cc/co/evenprime/bukkit/nocheat/checks/SpeedhackCheck.java index 3274a8c2..98239682 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/checks/SpeedhackCheck.java +++ b/src/cc/co/evenprime/bukkit/nocheat/checks/SpeedhackCheck.java @@ -10,11 +10,13 @@ import org.bukkit.event.player.PlayerMoveEvent; import org.bukkit.event.player.PlayerTeleportEvent; import org.bukkit.plugin.PluginManager; +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; import cc.co.evenprime.bukkit.nocheat.NoCheat; import cc.co.evenprime.bukkit.nocheat.actions.Action; import cc.co.evenprime.bukkit.nocheat.actions.CancelAction; import cc.co.evenprime.bukkit.nocheat.actions.CustomAction; import cc.co.evenprime.bukkit.nocheat.actions.LogAction; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.data.PermissionData; import cc.co.evenprime.bukkit.nocheat.data.SpeedhackData; import cc.co.evenprime.bukkit.nocheat.listeners.SpeedhackPlayerListener; @@ -27,23 +29,23 @@ import cc.co.evenprime.bukkit.nocheat.listeners.SpeedhackPlayerListener; */ public class SpeedhackCheck extends Check { - public SpeedhackCheck(NoCheat plugin) { - super(plugin, "speedhack", PermissionData.PERMISSION_SPEEDHACK); + public SpeedhackCheck(NoCheat plugin, NoCheatConfiguration config) { + super(plugin, "speedhack", PermissionData.PERMISSION_SPEEDHACK, config); } private static final int violationsLimit = 2; // Limits for the speedhack check per second - public int limits[] = { 30, 45, 60 }; + private int limits[]; + + private String logMessage; // How should speedhack violations be treated? - public Action actions[][] = { + private Action actions[][] = { { LogAction.loglow, CancelAction.cancel }, { LogAction.logmed, CancelAction.cancel }, { LogAction.loghigh, CancelAction.cancel } }; - public String logMessage = "%1$s sent %2$d move events, but only %3$d were allowed. Speedhack?"; - public void check(PlayerMoveEvent event) { Player player = event.getPlayer(); @@ -145,6 +147,28 @@ public class SpeedhackCheck extends Check { } } + @Override + public void configure(NoCheatConfiguration config) { + + try { + + limits = new int[3]; + + limits[0] = config.getIntegerValue("speedhack.limits.low"); + limits[1] = config.getIntegerValue("speedhack.limits.med"); + limits[2] = config.getIntegerValue("speedhack.limits.high"); + + logMessage = config.getStringValue("speedhack.logmessage"); + + setActive(config.getBooleanValue("active.speedhack")); + } catch (ConfigurationException e) { + setActive(false); + e.printStackTrace(); + } + } + + + @Override protected void registerListeners() { PluginManager pm = Bukkit.getServer().getPluginManager(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/BooleanOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/BooleanOption.java similarity index 84% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/BooleanOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/BooleanOption.java index 97615923..5d709c61 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/BooleanOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/BooleanOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public class BooleanOption extends ChildOption { diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ChildOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/ChildOption.java similarity index 55% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/ChildOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/ChildOption.java index 33f506ae..9d04c007 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ChildOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/ChildOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public abstract class ChildOption extends Option { @@ -14,4 +14,9 @@ public abstract class ChildOption extends Option { public abstract String getValue(); + + @Override + public String toYAMLString(String prefix) { + return prefix + getIdentifier() + ": \"" + getValue() + "\"\r\n"; + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/IntegerOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/IntegerOption.java similarity index 74% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/IntegerOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/IntegerOption.java index 062ff259..27f88eeb 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/IntegerOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/IntegerOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public class IntegerOption extends TextFieldOption { @@ -26,4 +26,8 @@ public class IntegerOption extends TextFieldOption { return false; } } + + public int getIntegerValue() { + return Integer.parseInt(this.getValue()); + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/LevelOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/LevelOption.java new file mode 100644 index 00000000..771ba0a7 --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/config/LevelOption.java @@ -0,0 +1,82 @@ +package cc.co.evenprime.bukkit.nocheat.config; + +import java.util.logging.Level; + + +public class LevelOption extends ChildOption { + + /** + * + */ + private static final long serialVersionUID = -1609308017422576285L; + + private LogLevel option; + + public enum LogLevel { + + + OFF("off", "never", Level.OFF), + LOW("low", "all messages", Level.INFO), + MED("med", "important messages", Level.WARNING), + HIGH("high", "very important messages", Level.SEVERE); + + private final String value; + private String description; + private Level level; + + private LogLevel(String value, String description, Level level) { + this.value = value; + this.description = description; + this.level = level; + } + + public String asString() { return this.value; } + + public static LogLevel getLogLevelFromString(String s) { + if(s == null) return OFF; + if("off".equals(s)) + return OFF; + else if("low".equals(s)) + return LOW; + else if("med".equals(s)) + return MED; + else if("high".equals(s)) + return HIGH; + else + return OFF; + } + + + public String toString() { + return this.name() + ": " + description; + } + + public Level getLevel() { + return level; + } + } + + public LevelOption(String identifier, LogLevel initialValue) { + + super(identifier); + this.option = initialValue; + } + + + @Override + public String getValue() { + return option.asString(); + } + + public void setValue(LogLevel value) { + this.option = value; + } + + public LogLevel getOptionValue() { + return this.option; + } + + public Level getLevelValue() { + return this.option.getLevel(); + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/LongStringOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/LongStringOption.java similarity index 78% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/LongStringOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/LongStringOption.java index 1b018110..4254ca75 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/LongStringOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/LongStringOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public class LongStringOption extends TextFieldOption { diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/MediumStringOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/MediumStringOption.java similarity index 78% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/MediumStringOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/MediumStringOption.java index c31db5f3..6c57029f 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/MediumStringOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/MediumStringOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public class MediumStringOption extends TextFieldOption { diff --git a/src/cc/co/evenprime/bukkit/nocheat/config/NoCheatConfiguration.java b/src/cc/co/evenprime/bukkit/nocheat/config/NoCheatConfiguration.java new file mode 100644 index 00000000..e5c56d9d --- /dev/null +++ b/src/cc/co/evenprime/bukkit/nocheat/config/NoCheatConfiguration.java @@ -0,0 +1,434 @@ +package cc.co.evenprime.bukkit.nocheat.config; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.util.LinkedList; +import java.util.List; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; + +import org.bukkit.util.config.Configuration; + +import cc.co.evenprime.bukkit.nocheat.ConfigurationException; +import cc.co.evenprime.bukkit.nocheat.actions.Action; +import cc.co.evenprime.bukkit.nocheat.actions.CancelAction; +import cc.co.evenprime.bukkit.nocheat.actions.LogAction; +import cc.co.evenprime.bukkit.nocheat.config.LevelOption.LogLevel; + +/** + * Central location for everything that's described in the configuration file + * + * @author Evenprime + * + */ +public class NoCheatConfiguration { + + + public final static String configFile = "plugins/NoCheat/nocheat.yml"; + + private ParentOption root; + + // Our personal logger + private final static String loggerName = "cc.co.evenprime.nocheat"; + public final Logger logger = Logger.getLogger(loggerName); + + // Our log output to a file + private FileHandler fh = null; + + public NoCheatConfiguration(File configurationFile) { + + // Setup the configuration tree + config(configurationFile); + } + + /** + * Read the configuration file and assign either standard values or whatever is declared in the file + * @param configurationFile + */ + public void config(File configurationFile) { + + Configuration CONFIG = new Configuration(configurationFile); + CONFIG.load(); + + root = new ParentOption(""); + + + /*** LOGGING section ***/ + { + ParentOption loggingNode = new ParentOption("logging"); + root.add(loggingNode); + + loggingNode.add(new MediumStringOption("filename", + CONFIG.getString("logging.filename", "plugins/NoCheat/nocheat.log"))); + + loggingNode.add(new LevelOption("logtofile", + LogLevel.getLogLevelFromString(CONFIG.getString("logging.logtofile", LogLevel.LOW.asString())))); + loggingNode.add(new LevelOption("logtoconsole", + LogLevel.getLogLevelFromString(CONFIG.getString("logging.logtoconsole", LogLevel.HIGH.asString())))); + loggingNode.add(new LevelOption("logtochat", + LogLevel.getLogLevelFromString(CONFIG.getString("logging.logtochat", LogLevel.MED.asString())))); + loggingNode.add(new LevelOption("logtoirc", + LogLevel.getLogLevelFromString(CONFIG.getString("logging.logtoirc", LogLevel.MED.asString())))); + + loggingNode.add(new ShortStringOption("logtoirctag", + CONFIG.getString("logging.logtoirctag", "nocheat"))); + } + + /*** ACTIVE section ***/ + { + ParentOption activeNode = new ParentOption("active"); + root.add(activeNode); + + activeNode.add(new BooleanOption("speedhack", + CONFIG.getBoolean("active.speedhack", true))); + activeNode.add(new BooleanOption("moving", + CONFIG.getBoolean("active.moving", true))); + activeNode.add(new BooleanOption("airbuild", + CONFIG.getBoolean("active.airbuild", false))); + activeNode.add(new BooleanOption("bedteleport", + CONFIG.getBoolean("active.bedteleport", true))); + activeNode.add(new BooleanOption("itemdupe", + CONFIG.getBoolean("active.itemdupe", true))); + activeNode.add(new BooleanOption("bogusitems", + CONFIG.getBoolean("active.bogusitems", false))); + } + + /*** SPEEDHACK section ***/ + { + ParentOption speedhackNode = new ParentOption("speedhack"); + root.add(speedhackNode); + + speedhackNode.add(new LongStringOption("logmessage", + CONFIG.getString("logging.filename", "%1$s sent %2$d move events, but only %3$d were allowed. Speedhack?"))); + + /*** SPEEDHACK LIMITS section ***/ + { + ParentOption speedhackLimitsNode = new ParentOption("limits"); + speedhackNode.add(speedhackLimitsNode); + + speedhackLimitsNode.add(new IntegerOption("low", + CONFIG.getInt("speedhack.limits.low", 30))); + speedhackLimitsNode.add(new IntegerOption("med", + CONFIG.getInt("speedhack.limits.med", 45))); + speedhackLimitsNode.add(new IntegerOption("high", + CONFIG.getInt("speedhack.limits.high", 60))); + } + + /*** SPEEDHACK ACTIONS section ***/ + { + ParentOption speedhackActionNode = new ParentOption("action"); + speedhackNode.add(speedhackActionNode); + + speedhackActionNode.add(new MediumStringOption("low", + CONFIG.getString("speedhack.action.low", "loglow cancel"))); + speedhackActionNode.add(new MediumStringOption("med", + CONFIG.getString("speedhack.action.med", "logmed cancel"))); + speedhackActionNode.add(new MediumStringOption("high", + CONFIG.getString("speedhack.action.high", "loghigh cancel"))); + } + } + + /*** MOVING section ***/ + { + ParentOption movingNode = new ParentOption("moving"); + root.add(movingNode); + + movingNode.add(new LongStringOption("logmessage", + CONFIG.getString("moving.logmessage", "Moving violation: %1$s from %2$s (%4$.1f, %5$.1f, %6$.1f) to %3$s (%7$.1f, %8$.1f, %9$.1f)"))); + movingNode.add(new LongStringOption("summarymessage", + CONFIG.getString("moving.summarymessage", "Moving summary of last ~%2$d seconds: %1$s total Violations: (%3$d,%4$d,%5$d)"))); + movingNode.add(new BooleanOption("allowflying", + CONFIG.getBoolean("moving.allowflying", false))); + movingNode.add(new BooleanOption("allowfakesneak", + CONFIG.getBoolean("moving.allowfakesneak", true))); + + /*** MOVING ACTION section ***/ + { + ParentOption movingActionNode = new ParentOption("action"); + movingNode.add(movingActionNode); + + movingActionNode.add(new MediumStringOption("low", + CONFIG.getString("moving.action.low", "loglow cancel"))); + movingActionNode.add(new MediumStringOption("med", + CONFIG.getString("moving.action.med", "logmed cancel"))); + movingActionNode.add(new MediumStringOption("high", + CONFIG.getString("moving.action.high", "loghigh cancel"))); + } + } + + /*** AIRBUILD section ***/ + { + ParentOption airbuildNode = new ParentOption("airbuild"); + root.add(airbuildNode); + + /*** AIRBUILD LIMITS section ***/ + { + ParentOption airbuildLimitsNode = new ParentOption("limits"); + airbuildNode.add(airbuildLimitsNode); + + airbuildLimitsNode.add(new IntegerOption("low", + CONFIG.getInt("airbuild.limits.low", 1))); + airbuildLimitsNode.add(new IntegerOption("med", + CONFIG.getInt("airbuild.limits.med", 3))); + airbuildLimitsNode.add(new IntegerOption("high", + CONFIG.getInt("airbuild.limits.high", 10))); + } + + /*** AIRBUILD ACTION section ***/ + { + ParentOption airbuildActionNode = new ParentOption("action"); + airbuildNode.add(airbuildActionNode); + + airbuildActionNode.add(new MediumStringOption("low", + CONFIG.getString("airbuild.action.low", "loglow cancel"))); + airbuildActionNode.add(new MediumStringOption("med", + CONFIG.getString("airbuild.action.med", "logmed cancel"))); + airbuildActionNode.add(new MediumStringOption("high", + CONFIG.getString("airbuild.action.high", "loghigh cancel"))); + } + } + + /*** BEDTELEPORT section ***/ + { + ParentOption bedteleportNode = new ParentOption("bedteleport"); + root.add(bedteleportNode); + } + + /*** ITEMDUPE section ***/ + { + ParentOption itemdupeNode = new ParentOption("itemdupe"); + root.add(itemdupeNode); + } + + /*** BOGUSITEMS section ***/ + { + ParentOption bogusitemsNode = new ParentOption("bogusitems"); + root.add(bogusitemsNode); + } + + if(!configurationFile.exists()) { + writeConfigFile(configurationFile, this); + } + } + + public void setupFileLogger() { + + logger.setLevel(Level.INFO); + logger.setUseParentHandlers(false); + + if(fh == null) { + try { + fh = new FileHandler(getStringValue("logging.filename"), true); + fh.setLevel(getLogLevelValue("logging.logtofile")); + fh.setFormatter(Logger.getLogger("Minecraft").getHandlers()[0].getFormatter()); + logger.addHandler(fh); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + public void cleanup() { + + if(fh != null) { + try { + logger.removeHandler(fh); + fh.flush(); + fh.close(); + + } catch (Exception e) { + e.printStackTrace(); + } + } + } + + private Action[] stringToActions(String string, Action[] def) { + + if(string == null) return def; + + List as = new LinkedList(); + String[] parts = string.split(" "); + + for(String s : parts) { + if(s.equals("loglow")) + as.add(LogAction.loglow); + else if(s.equals("logmed")) + as.add(LogAction.logmed); + else if(s.equals("loghigh")) + as.add(LogAction.loghigh); + else if(s.equals("deny")) + as.add(CancelAction.cancel); + else if(s.equals("reset")) + as.add(CancelAction.cancel); + else if(s.equals("cancel")) + as.add(CancelAction.cancel); + else if(s.startsWith("custom")) { + try { + // TODO: Implement Custom Action + //as.add(new CustomAction(Integer.parseInt(s.substring(6)))); + } + catch(Exception e) { + System.out.println("NC: Couldn't parse number of custom action '" + s + "'"); + } + } + else { + System.out.println("NC: Can't parse action "+ s); + } + } + + + return as.toArray(def); + } + + private String actionsToString(Action[] actions) { + + StringBuffer s = new StringBuffer(); + + if(actions != null) { + for(Action a : actions) { + s.append(' ').append(a.getName()); + } + } + + return s.toString().trim(); + } + + /** + * Convert a string into a log level + * @param string + * @return + */ + private static Level stringToLevel(String string, Level def) { + + if(string == null) { + return def; + } + + if(string.trim().equals("info") || string.trim().equals("low")) return Level.INFO; + if(string.trim().equals("warn") || string.trim().equals("med")) return Level.WARNING; + if(string.trim().equals("severe")|| string.trim().equals("high")) return Level.SEVERE; + + return Level.OFF; + } + + private static String levelToString(Level level) { + + if(level == null) { + return "off"; + } + + if(level.equals(Level.INFO)) return "low"; + else if(level.equals(Level.WARNING)) return "med"; + else if(level.equals(Level.SEVERE)) return "high"; + + return "off"; + } + + /** + * Write configuration file to specific filename + * @param f + */ + public static void writeConfigFile(File f, NoCheatConfiguration configuration) { + try { + if(f.getParentFile() != null) + f.getParentFile().mkdirs(); + f.createNewFile(); + BufferedWriter w = new BufferedWriter(new FileWriter(f)); + + w.write(configuration.getRoot().toYAMLString("")); + + w.flush(); w.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + + public int getIntegerValue(String optionName) throws ConfigurationException { + return getIntegerOption(optionName).getIntegerValue(); + } + public IntegerOption getIntegerOption(String optionName) throws ConfigurationException { + + Option o = getOption(optionName) ; + if(o instanceof IntegerOption) { + return (IntegerOption)o; + } + + throw new ConfigurationException("Config Node " + optionName + " is not an integer"); + } + + public String getStringValue(String optionName) throws ConfigurationException { + return getStringOption(optionName).getValue(); + } + public TextFieldOption getStringOption(String optionName) throws ConfigurationException { + + Option o = getOption(optionName); + if(o instanceof TextFieldOption) { + return (TextFieldOption)o; + } + + throw new ConfigurationException("Config Node " + optionName + " is not a string"); + } + + public Level getLogLevelValue(String optionName) throws ConfigurationException { + return getLogLevelOption(optionName).getLevelValue(); + } + public LevelOption getLogLevelOption(String optionName) throws ConfigurationException { + + Option o = getOption(optionName); + if(o instanceof LevelOption) { + return (LevelOption)o; + } + + throw new ConfigurationException("Config Node " + optionName + " is not a loglevel"); + } + + + public boolean getBooleanValue(String optionName) throws ConfigurationException { + return getBooleanOption(optionName).getBooleanValue(); + } + public BooleanOption getBooleanOption(String optionName) throws ConfigurationException { + + Option o = getOption(optionName); + if(o instanceof BooleanOption) { + return (BooleanOption)o; + } + + throw new ConfigurationException("Config Node " + optionName + " is not a boolean"); + } + + + private Option getOption(String optionName) throws ConfigurationException { + LinkedList l = new LinkedList(); + for(String s : optionName.split("\\.")) { + l.addLast(s); + } + return getOption(root, l); + } + + private Option getOption(Option parent, LinkedList names) throws ConfigurationException { + + if(names.size() == 0) { + return parent; + } + else if(parent instanceof ParentOption) { + for(Option o2 : ((ParentOption)parent).getChildOptions()) { + if(o2.getIdentifier().equals(names.getFirst())) { + + names.removeFirst(); + return getOption(o2, names); + } + } + } + + throw new ConfigurationException("Config Node doesn't exist"); + } + + public ParentOption getRoot() { + return root; + } +} diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/Option.java b/src/cc/co/evenprime/bukkit/nocheat/config/Option.java similarity index 50% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/Option.java rename to src/cc/co/evenprime/bukkit/nocheat/config/Option.java index db4c3edb..219411c9 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/Option.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/Option.java @@ -1,7 +1,7 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; -public class Option { +public abstract class Option { private final String identifier; @@ -12,4 +12,8 @@ public class Option { public String getIdentifier() { return identifier; } + + public String toYAMLString(String prefix) { + return prefix + "\r\n"; + } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ParentOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/ParentOption.java similarity index 53% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/ParentOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/ParentOption.java index 8742fcde..e50aefa4 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ParentOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/ParentOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; import java.util.Collection; import java.util.Collections; @@ -23,9 +23,28 @@ public class ParentOption extends Option { } public final void add(Option option) { - + children.addLast(option); + } + + @Override + public String toYAMLString(String prefix) { - + String s = ""; + if(getIdentifier().length() > 0) { + s += prefix + getIdentifier() + ":\r\n"; + + for(Option o : getChildOptions()) { + s += o.toYAMLString(prefix + " "); + } + } + else + { + for(Option o : getChildOptions()) { + s += o.toYAMLString(prefix); + } + } + + return s; } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ShortStringOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/ShortStringOption.java similarity index 78% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/ShortStringOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/ShortStringOption.java index ed737185..1725c463 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/ShortStringOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/ShortStringOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public class ShortStringOption extends TextFieldOption { diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/TextFieldOption.java b/src/cc/co/evenprime/bukkit/nocheat/config/TextFieldOption.java similarity index 89% rename from src/cc/co/evenprime/bukkit/nocheat/wizard/options/TextFieldOption.java rename to src/cc/co/evenprime/bukkit/nocheat/config/TextFieldOption.java index 5f026117..c549441c 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/TextFieldOption.java +++ b/src/cc/co/evenprime/bukkit/nocheat/config/TextFieldOption.java @@ -1,4 +1,4 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; +package cc.co.evenprime.bukkit.nocheat.config; public abstract class TextFieldOption extends ChildOption { diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/Wizard.java b/src/cc/co/evenprime/bukkit/nocheat/wizard/Wizard.java index bd74d106..c2db856b 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/Wizard.java +++ b/src/cc/co/evenprime/bukkit/nocheat/wizard/Wizard.java @@ -2,6 +2,7 @@ package cc.co.evenprime.bukkit.nocheat.wizard; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.io.File; import javax.swing.BoxLayout; import javax.swing.JButton; @@ -10,16 +11,8 @@ import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; +import cc.co.evenprime.bukkit.nocheat.config.NoCheatConfiguration; import cc.co.evenprime.bukkit.nocheat.wizard.gui.ParentOptionGui; -import cc.co.evenprime.bukkit.nocheat.wizard.options.BooleanOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ChildOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.IntegerOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.LogLevelOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.MediumStringOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.Option; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ParentOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.LongStringOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ShortStringOption; public class Wizard extends JFrame { @@ -28,7 +21,6 @@ public class Wizard extends JFrame { */ private static final long serialVersionUID = 8798111079958779207L; - private static final String pre = " "; public Wizard() { @@ -43,97 +35,9 @@ public class Wizard extends JFrame { inside.setLayout(new BoxLayout(inside,BoxLayout.Y_AXIS)); - final ParentOption root = new ParentOption(""); + final NoCheatConfiguration config = new NoCheatConfiguration(new File("config.yml")); - ParentOption loggingNode = new ParentOption("logging"); - root.add(loggingNode); - - loggingNode.add(new MediumStringOption("filename", "plugins/NoCheat/nocheat.log")); - loggingNode.add(new LogLevelOption("logtofile", LogLevelOption.Options.LOW)); - loggingNode.add(new LogLevelOption("logtoconsole", LogLevelOption.Options.HIGH)); - loggingNode.add(new LogLevelOption("logtochat", LogLevelOption.Options.MED)); - loggingNode.add(new LogLevelOption("logtoirc", LogLevelOption.Options.MED)); - loggingNode.add(new ShortStringOption("logtoirctag", "nocheat")); - - ParentOption activeNode = new ParentOption("active"); - root.add(activeNode); - - activeNode.add(new BooleanOption("speedhack", true)); - activeNode.add(new BooleanOption("moving", true)); - activeNode.add(new BooleanOption("airbuild", false)); - activeNode.add(new BooleanOption("bedteleport", true)); - activeNode.add(new BooleanOption("itemdupe", true)); - activeNode.add(new BooleanOption("bogusitems", false)); - - ParentOption speedhackNode = new ParentOption("speedhack"); - root.add(speedhackNode); - - speedhackNode.add(new LongStringOption("logmessage", "\"%1$s sent %2$d move events, but only %3$d were allowed. Speedhack?\"")); - - { - ParentOption speedhackLimitsNode = new ParentOption("limits"); - speedhackNode.add(speedhackLimitsNode); - - speedhackLimitsNode.add(new IntegerOption("low", 30)); - speedhackLimitsNode.add(new IntegerOption("med", 45)); - speedhackLimitsNode.add(new IntegerOption("high", 60)); - - ParentOption speedhackActionNode = new ParentOption("action"); - speedhackNode.add(speedhackActionNode); - - speedhackActionNode.add(new MediumStringOption("low", "loglow cancel")); - speedhackActionNode.add(new MediumStringOption("med", "logmed cancel")); - speedhackActionNode.add(new MediumStringOption("high", "loghigh cancel")); - } - - ParentOption movingNode = new ParentOption("moving"); - root.add(movingNode); - - movingNode.add(new LongStringOption("logmessage", "\"Moving violation: %1$s from %2$s (%4$.1f, %5$.1f, %6$.1f) to %3$s (%7$.1f, %8$.1f, %9$.1f)\"")); - movingNode.add(new LongStringOption("summarymessage", "\"Moving summary of last ~%2$d seconds: %1$s total Violations: (%3$d,%4$d,%5$d)\"")); - movingNode.add(new BooleanOption("allowflying", false)); - movingNode.add(new BooleanOption("allowfakesneak", true)); - - { - ParentOption movingActionNode = new ParentOption("action"); - movingNode.add(movingActionNode); - - movingActionNode.add(new MediumStringOption("low", "loglow cancel")); - movingActionNode.add(new MediumStringOption("med", "logmed cancel")); - movingActionNode.add(new MediumStringOption("high", "loghigh cancel")); - } - - ParentOption airbuildNode = new ParentOption("airbuild"); - root.add(airbuildNode); - - { - ParentOption airbuildLimitsNode = new ParentOption("limits"); - airbuildNode.add(airbuildLimitsNode); - - airbuildLimitsNode.add(new IntegerOption("low", 30)); - airbuildLimitsNode.add(new IntegerOption("med", 45)); - airbuildLimitsNode.add(new IntegerOption("high", 60)); - - ParentOption airbuildActionNode = new ParentOption("action"); - airbuildNode.add(airbuildActionNode); - - airbuildActionNode.add(new MediumStringOption("low", "loglow cancel")); - airbuildActionNode.add(new MediumStringOption("med", "logmed cancel")); - airbuildActionNode.add(new MediumStringOption("high", "loghigh cancel")); - } - - ParentOption bedteleportNode = new ParentOption("bedteleport"); - root.add(bedteleportNode); - - - ParentOption itemdupeNode = new ParentOption("itemdupe"); - root.add(itemdupeNode); - - - ParentOption bogusitemsNode = new ParentOption("bogusitems"); - root.add(bogusitemsNode); - - ParentOptionGui root2 = new ParentOptionGui(root); + ParentOptionGui root2 = new ParentOptionGui(config.getRoot()); inside.add(root2); @@ -143,9 +47,11 @@ public class Wizard extends JFrame { @Override public void actionPerformed(ActionEvent arg0) { - String s = parseParent(root, ""); + String s = config.getRoot().toYAMLString(""); JOptionPane.showMessageDialog(null, s); + + NoCheatConfiguration.writeConfigFile(new File("config.yml"), config); } }); b.setAlignmentY(0.0F); @@ -155,33 +61,4 @@ public class Wizard extends JFrame { this.pack(); } - - private String parseParent(ParentOption option, String prefix) { - - String s = ""; - if(option.getIdentifier().length() > 0) { - s += prefix + option.getIdentifier() + ":\r\n"; - } - - for(Option o : option.getChildOptions()) { - if(o instanceof ChildOption) - s += parseChild((ChildOption)o, prefix + pre); - else if(o instanceof ParentOption) - s += parseParent((ParentOption)o, prefix + pre); - else - parse(o, prefix + " "); - } - - return s; - } - - private String parseChild(ChildOption option, String prefix) { - - return prefix + option.getIdentifier() + ": " + option.getValue() + "\r\n"; - } - - private String parse(Object option, String prefix) { - - return ""; - } } diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ChildOptionGuiFactory.java b/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ChildOptionGuiFactory.java index 588675a8..c11c36db 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ChildOptionGuiFactory.java +++ b/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ChildOptionGuiFactory.java @@ -10,10 +10,10 @@ import javax.swing.JComponent; import javax.swing.JOptionPane; import javax.swing.JTextField; -import cc.co.evenprime.bukkit.nocheat.wizard.options.BooleanOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ChildOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.LogLevelOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.TextFieldOption; +import cc.co.evenprime.bukkit.nocheat.config.BooleanOption; +import cc.co.evenprime.bukkit.nocheat.config.ChildOption; +import cc.co.evenprime.bukkit.nocheat.config.LevelOption; +import cc.co.evenprime.bukkit.nocheat.config.TextFieldOption; public class ChildOptionGuiFactory { @@ -25,18 +25,18 @@ public class ChildOptionGuiFactory { else if(option instanceof TextFieldOption) { return createTextField((TextFieldOption)option); } - else if(option instanceof LogLevelOption) { - return createLogLevel((LogLevelOption)option); + else if(option instanceof LevelOption) { + return createLogLevel((LevelOption)option); } throw new RuntimeException("Unknown ChildOption " + option); } - private static JComboBox createLogLevel(final LogLevelOption option) { + private static JComboBox createLogLevel(final LevelOption option) { final JComboBox comboBox = new JComboBox(); - for(LogLevelOption.Options o : LogLevelOption.Options.values()) + for(LevelOption.LogLevel o : LevelOption.LogLevel.values()) comboBox.addItem(o); comboBox.setSelectedItem(option.getOptionValue()); @@ -45,7 +45,7 @@ public class ChildOptionGuiFactory { @Override public void actionPerformed(ActionEvent e) { - option.setValue((LogLevelOption.Options)comboBox.getSelectedItem()); + option.setValue((LevelOption.LogLevel)comboBox.getSelectedItem()); } diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ParentOptionGui.java b/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ParentOptionGui.java index 472d934a..c78af84e 100644 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ParentOptionGui.java +++ b/src/cc/co/evenprime/bukkit/nocheat/wizard/gui/ParentOptionGui.java @@ -11,9 +11,9 @@ import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ChildOption; -import cc.co.evenprime.bukkit.nocheat.wizard.options.Option; -import cc.co.evenprime.bukkit.nocheat.wizard.options.ParentOption; +import cc.co.evenprime.bukkit.nocheat.config.ChildOption; +import cc.co.evenprime.bukkit.nocheat.config.Option; +import cc.co.evenprime.bukkit.nocheat.config.ParentOption; public class ParentOptionGui extends JPanel { @@ -31,7 +31,7 @@ public class ParentOptionGui extends JPanel { if(option.getIdentifier().length() > 0) { this.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5,5,5,5), BorderFactory.createCompoundBorder( BorderFactory.createTitledBorder(BorderFactory.createMatteBorder(2, 2, - 2, 2, Color.BLACK), " " + option.getIdentifier() + " "), + 2, 2, Color.BLACK), " " + option.getIdentifier() + ": "), BorderFactory.createEmptyBorder(5,5,5,5)))); } this.setLayout(new GridBagLayout()); @@ -42,7 +42,7 @@ public class ParentOptionGui extends JPanel { } } - public void add(Option option) { + private void add(Option option) { if(option instanceof ParentOption) { GridBagConstraints c = new GridBagConstraints(); diff --git a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/LogLevelOption.java b/src/cc/co/evenprime/bukkit/nocheat/wizard/options/LogLevelOption.java deleted file mode 100644 index 4edffd81..00000000 --- a/src/cc/co/evenprime/bukkit/nocheat/wizard/options/LogLevelOption.java +++ /dev/null @@ -1,63 +0,0 @@ -package cc.co.evenprime.bukkit.nocheat.wizard.options; - - -public class LogLevelOption extends ChildOption { - - /** - * - */ - private static final long serialVersionUID = -1609308017422576285L; - - private Options value; - - - public enum Options { - OFF("never"), LOW("all messages"), MED("important messages"), HIGH("very important messages"); - - private final String value; - - private Options(String s) { - this.value = s; - } - - public String getValue() { return this.value; } - - public static Options getOption(String s) { - if("off".equals(s)) - return OFF; - else if("low".equals(s)) - return LOW; - else if("med".equals(s)) - return MED; - else if("high".equals(s)) - return HIGH; - else - return OFF; - } - - - public String toString() { - return this.name() + ": " + getValue(); - } - } - - public LogLevelOption(String identifier, Options initialValue) { - - super(identifier); - this.value = initialValue; - } - - - @Override - public String getValue() { - return value.getValue(); - } - - public void setValue(Options value) { - this.value = value; - } - - public Options getOptionValue() { - return this.value; - } -}