diff --git a/resources/plugin.yml b/resources/plugin.yml index a5982ae..3eb9ec4 100644 --- a/resources/plugin.yml +++ b/resources/plugin.yml @@ -1,7 +1,7 @@ name: MobArena author: garbagemule main: com.garbagemule.MobArena.MobArena -version: 0.95.5.28 +version: 0.95.5.29 softdepend: [Multiverse-Core,Towny,Heroes,MagicSpells,Vault] commands: ma: diff --git a/src/com/garbagemule/MobArena/commands/CommandHandler.java b/src/com/garbagemule/MobArena/commands/CommandHandler.java index ed95365..f41a7dc 100644 --- a/src/com/garbagemule/MobArena/commands/CommandHandler.java +++ b/src/com/garbagemule/MobArena/commands/CommandHandler.java @@ -188,6 +188,7 @@ public class CommandHandler implements CommandExecutor // mobarena.setup register(ConfigCommand.class); + register(SettingCommand.class); register(AddArenaCommand.class); register(RemoveArenaCommand.class); diff --git a/src/com/garbagemule/MobArena/commands/setup/SettingCommand.java b/src/com/garbagemule/MobArena/commands/setup/SettingCommand.java new file mode 100644 index 0000000..e2959c2 --- /dev/null +++ b/src/com/garbagemule/MobArena/commands/setup/SettingCommand.java @@ -0,0 +1,99 @@ +package com.garbagemule.MobArena.commands.setup; + +import com.garbagemule.MobArena.Messenger; +import com.garbagemule.MobArena.commands.Command; +import com.garbagemule.MobArena.commands.CommandInfo; +import com.garbagemule.MobArena.framework.Arena; +import com.garbagemule.MobArena.framework.ArenaMaster; +import org.bukkit.ChatColor; +import org.bukkit.command.CommandSender; + +import java.util.Map; + +@CommandInfo( + name = "setting", + pattern = "sett(ing)?", + usage = "/ma setting ( ())", + desc = "show or change arena settings", + permission = "mobarena.setup.setting" +) +public class SettingCommand implements Command { + @Override + public boolean execute(ArenaMaster am, CommandSender sender, String... args) { + // Require at least an arena + if (args.length < 1) return false; + + // Find the arena first + Arena arena = am.getArenaWithName(args[0]); + if (arena == null) { + Messenger.tell(sender, "There's no arena with the name '" + args[0] + "'."); + return true; + } + + // If we have no more args, just show all settings + if (args.length == 1) { + StringBuilder buffy = new StringBuilder(); + buffy.append("Settings for ").append(ChatColor.GREEN).append(args[0]).append(ChatColor.RESET).append(":"); + for (Map.Entry entry : arena.getSettings().getValues(false).entrySet()) { + buffy.append("\n").append(ChatColor.RESET); + buffy.append(ChatColor.AQUA).append(entry.getKey()).append(ChatColor.RESET).append(": "); + buffy.append(ChatColor.YELLOW).append(entry.getValue()); + } + Messenger.tell(sender, buffy.toString()); + return true; + } + + // Otherwise, find the setting + Object val = arena.getSettings().get(args[1], null); + if (val == null) { + StringBuilder buffy = new StringBuilder(); + buffy.append(ChatColor.RED).append(" is not a valid setting."); + buffy.append("Type ").append(ChatColor.YELLOW).append("/ma setting ").append(args[0]); + buffy.append(ChatColor.RESET).append(" to see all settings."); + Messenger.tell(sender, buffy.toString()); + return true; + } + + // If there are no more args, show the value + if (args.length == 2) { + StringBuilder buffy = new StringBuilder(); + buffy.append(ChatColor.AQUA).append(args[1]).append(ChatColor.RESET).append(": "); + buffy.append(ChatColor.YELLOW).append(val); + Messenger.tell(sender, buffy.toString()); + return true; + } + + // Otherwise, determine the value of the setting + if (val instanceof Boolean) { + if (!args[2].matches("on|off|yes|no|true|false")) { + Messenger.tell(sender, "Expected a boolean value for that setting"); + return true; + } + boolean value = args[2].matches("on|yes|true"); + args[2] = String.valueOf(value); + arena.getSettings().set(args[1], value); + } else if (val instanceof Number) { + try { + arena.getSettings().set(args[1], Integer.parseInt(args[2])); + } catch (NumberFormatException e) { + Messenger.tell(sender, "Expected a numeric value for that setting."); + return true; + } + } else { + arena.getSettings().set(args[1], args[2]); + } + + // Save config-file and reload arena + am.saveConfig(); + am.reloadArena(args[0]); + + // Notify the sender + StringBuilder buffy = new StringBuilder(); + buffy.append("Setting ").append(ChatColor.AQUA).append(args[1]).append(ChatColor.RESET); + buffy.append(" for arena ").append(ChatColor.GREEN).append(args[0]).append(ChatColor.RESET); + buffy.append(" set to ").append(ChatColor.YELLOW).append(args[2]).append(ChatColor.RESET); + buffy.append("!"); + Messenger.tell(sender, buffy.toString()); + return true; + } +}