Files
MobArena/src/com/garbagemule/MobArena/MACommands.java
T

1214 lines
47 KiB
Java

package com.garbagemule.MobArena;
import java.util.List;
import java.util.LinkedList;
import java.util.Set;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.Server;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.ConsoleCommandSender;
import com.garbagemule.MobArena.MAMessages.Msg;
public class MACommands implements CommandExecutor
{
public static List<String> ALLOWED_COMMANDS = new LinkedList<String>();
public static final List<String> COMMANDS = new LinkedList<String>();
static
{
COMMANDS.add("j"); // Join
COMMANDS.add("join"); // Join
COMMANDS.add("l"); // Leave
COMMANDS.add("leave"); // Leave
COMMANDS.add("notready"); // List of players who aren't ready
COMMANDS.add("spec"); // Watch arena
COMMANDS.add("spectate"); // Watch arena
COMMANDS.add("arenas"); // List of arenas
COMMANDS.add("list"); // List of players
COMMANDS.add("players"); // List of players
COMMANDS.add("info"); // Info/help
COMMANDS.add("help"); // Info/help
COMMANDS.add("restore"); // Restore inventory
COMMANDS.add("enable"); // Enabling
COMMANDS.add("disable"); // Disabling
COMMANDS.add("protect"); // Protection on/off
COMMANDS.add("force"); // Force start/end
COMMANDS.add("config"); // Reload config
COMMANDS.add("arena"); // Current arena
COMMANDS.add("setarena"); // Set current arena
COMMANDS.add("addarena"); // Add a new arena
COMMANDS.add("delarena"); // Delete current aren
COMMANDS.add("editarena"); // Editing
COMMANDS.add("setregion"); // Set a region point
COMMANDS.add("expandregion"); // Expand the region
COMMANDS.add("showregion"); // Show the region
COMMANDS.add("setlobbyregion"); // Set a region point
COMMANDS.add("expandlobbyregion"); // Expand the region
COMMANDS.add("setwarp"); // Set arena/lobby/spec
COMMANDS.add("spawnpoints"); // List spawnpoints
COMMANDS.add("addspawn"); // Add a spawnpoint
COMMANDS.add("delspawn"); // Delete a spawnpoint
COMMANDS.add("reset"); // Reset arena coordinates
COMMANDS.add("addclass"); // Add a new class
COMMANDS.add("delclass"); // Delete a class
COMMANDS.add("auto-generate"); // Auto-generate arena
COMMANDS.add("auto-degenerate"); // Restore cuboid
}
private boolean meanAdmins, showingRegion;
private Server server;
private MobArena plugin;
private ArenaMaster am;
public MACommands(MobArena plugin, ArenaMaster am)
{
this.plugin = plugin;
this.am = am;
server = Bukkit.getServer();
meanAdmins = (server.getPluginManager().getPlugin("Mean Admins") != null);
ALLOWED_COMMANDS = MAUtils.getAllowedCommands(plugin.getConfig());
}
/**
* Handles all command parsing.
* Unrecognized commands return false, giving the sender a list of
* valid commands (from plugin.yml).
*/
public boolean onCommand(CommandSender sender, Command command, String label, String[] args)
{
// Play nice with Mean Admins.
if (meanAdmins && !COMMANDS.contains(args[0].toLowerCase()))
{
server.getPluginManager().getPlugin("Mean Admins").onCommand(sender, command, label, args);
return true;
}
// Determine if the sender is a player (and an op), or the console.
boolean player = (sender instanceof Player);
boolean op = player && ((Player) sender).isOp();
boolean console = (sender instanceof ConsoleCommandSender);
// Cast the sender to Player if possible.
Player p = (player) ? (Player)sender : null;
if (args.length == 0)
return false;
// Grab the command base and any arguments.
String base = args[0].toLowerCase();
String arg1 = (args.length > 1) ? args[1].toLowerCase() : "";
String arg2 = (args.length > 2) ? args[2].toLowerCase() : "";
String arg3 = (args.length > 3) ? args[3].toLowerCase() : "";
/*////////////////////////////////////////////////////////////////
//
// Basics
//
////////////////////////////////////////////////////////////////*/
/*
* Player join
*/
if (base.equals("join") || base.equals("j"))
{
if (!player || !plugin.has(p, "mobarena.use.join"))
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
List<Arena> arenas = am.getEnabledArenas();
if (!am.enabled || arenas.size() < 1)
{
MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_NOT_ENABLED));
return true;
}
boolean error;
Arena arena;
if (!arg1.isEmpty())
arena = am.getArenaWithName(arg1);
else if (arenas.size() == 1)
arena = arenas.get(0);
else
arena = null;
if (arenas.size() > 1 && arg1.isEmpty())
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARG_NEEDED));
else if (arena == null)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
else if (am.arenaMap.containsKey(p) && (am.arenaMap.get(p).arenaPlayers.contains(p) || am.arenaMap.get(p).lobbyPlayers.contains(p)))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_IN_OTHER_ARENA));
else if (!arena.enabled)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_NOT_ENABLED));
else if (!arena.setup || arena.edit)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_NOT_SETUP));
else if (arena.running && (arena.notifyPlayers.contains(p) || arena.notifyPlayers.add(p)))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_IS_RUNNING));
else if (arena.arenaPlayers.contains(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ALREADY_PLAYING));
else if (!plugin.has(p, "mobarena.arenas." + arena.configName()))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_PERMISSION));
else if (arena.playerLimit > 0 && arena.lobbyPlayers.size() >= arena.playerLimit)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_PLAYER_LIMIT_REACHED));
else if (arena.joinDistance > 0 && !arena.inRegionRadius(p.getLocation(), arena.joinDistance))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_TOO_FAR));
else if (!arena.canAfford(p) || !arena.takeFee(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_FEE_REQUIRED, MAUtils.listToString(arena.entryFee, plugin)));
else if (arena.emptyInvJoin && !MAUtils.hasEmptyInventory(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_EMPTY_INV));
else if (!arena.emptyInvJoin && !MAUtils.storeInventory(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_STORE_INV_FAIL));
else error = false;
// If there was an error, don't join.
if (error)
{
if (arena != null)
arena.refund(p);
return true;
}
// If player is in a boat/minecart, eject!
if (p.isInsideVehicle())
p.leaveVehicle();
am.arenaMap.put(p,arena);
arena.playerJoin(p, p.getLocation());
MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_PLAYER_JOINED));
if (!arena.entryFee.isEmpty())
MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_FEE_PAID, MAUtils.listToString(arena.entryFee, plugin)));
return true;
}
/*
* Player leave
*/
if (base.equals("leave") || base.equals("l"))
{
if (!player || !plugin.has(p, "mobarena.use.leave"))
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!am.arenaMap.containsKey(p))
{
Arena arena = am.getArenaWithSpectator(p);
if (arena != null)
{
arena.playerLeave(p);
MAUtils.tellPlayer(p, MAMessages.get(Msg.LEAVE_PLAYER_LEFT));
return true;
}
MAUtils.tellPlayer(p, MAMessages.get(Msg.LEAVE_NOT_PLAYING));
return true;
}
Arena arena = am.arenaMap.remove(p);
arena.playerLeave(p);
MAUtils.tellPlayer(p, MAMessages.get(Msg.LEAVE_PLAYER_LEFT));
return true;
}
/*
* Player spectate
*/
if (base.equals("spectate") || base.equals("spec"))
{
if (!player || !plugin.has(p, "mobarena.use.spectate"))
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
List<Arena> arenas = am.getEnabledArenas();
if (!am.enabled || arenas.size() < 1)
{
MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_NOT_ENABLED));
return true;
}
boolean error;
Arena arena;
if (!arg1.isEmpty())
arena = am.getArenaWithName(arg1);
else if (arenas.size() == 1)
arena = arenas.get(0);
else
arena = null;
if (arenas.size() > 1 && arg1.isEmpty())
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARG_NEEDED));
else if (arena == null)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
//else if (am.arenaMap.containsKey(p) && am.arenaMap.get(p).livePlayers.contains(p))
else if (am.arenaMap.containsKey(p) && (am.arenaMap.get(p).arenaPlayers.contains(p) || am.arenaMap.get(p).lobbyPlayers.contains(p)))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_IN_OTHER_ARENA));
else if (!arena.enabled)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_NOT_ENABLED));
else if (!arena.setup || arena.edit)
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_ARENA_NOT_SETUP));
//else if (arena.livePlayers.contains(p))
else if (arena.arenaPlayers.contains(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.SPEC_ALREADY_PLAYING));
else if (arena.emptyInvSpec && !MAUtils.hasEmptyInventory(p))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.SPEC_EMPTY_INV));
else if (arena.joinDistance > 0 && !arena.inRegionRadius(p.getLocation(), arena.joinDistance))
error = MAUtils.tellPlayer(p, MAMessages.get(Msg.JOIN_TOO_FAR));
else error = false;
// If there was an error, don't spec.
if (error)
return true;
// If player is in a boat/minecart, eject!
if (p.isInsideVehicle())
p.leaveVehicle();
am.arenaMap.put(p,arena);
arena.playerSpec(p, p.getLocation());
MAUtils.tellPlayer(p, MAMessages.get(Msg.SPEC_PLAYER_SPECTATE));
return true;
}
/*
* Prints a list of all arenas.
*/
if (base.equals("arenas"))
{
String list = MAUtils.listToString(am.arenas, plugin);
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_ARENAS, list));
return true;
}
/*
* Prints a list of all live players in all arenas, or live players in a specific arena.
*/
if (base.equals("players") || base.equals("list"))
{
if (!arg1.isEmpty())
{
Arena arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
String list = MAUtils.listToString(arena.getLivingPlayers(), plugin);
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, list));
}
else
{
StringBuffer buffy = new StringBuffer();
List<Player> players = new LinkedList<Player>();
for (Arena arena : am.arenas)
players.addAll(arena.getLivingPlayers());
buffy.append(MAUtils.listToString(players, plugin));
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, buffy.toString()));
}
return true;
}
/*
* Prints a list of all non-ready players in current arena, or non-ready players in a specific arena.
*/
if (base.equals("notready"))
{
Arena arena;
if (!arg1.isEmpty())
{
arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
}
else if (player)
{
arena = am.getArenaWithPlayer(p);
if (arena == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.LEAVE_NOT_PLAYING));
return true;
}
}
else
{
MAUtils.tellPlayer(sender, "Usage: /ma notready <arena name>");
return true;
}
String list = MAUtils.listToString(arena.getNonreadyPlayers(), plugin);
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_LIST_PLAYERS, list));
return true;
}
/*////////////////////////////////////////////////////////////////
//
// Setup & Reload
//
////////////////////////////////////////////////////////////////*/
/*
* Enable or disable arena(s)
*/
if ((base.equals("enable") || base.equals("disable")))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.enable")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!arg1.isEmpty())
{
Arena arena = am.getArenaWithName(arg1);
if (arena != null)
{
arena.enabled = base.equals("enable");
arena.serializeConfig();
MAUtils.tellPlayer(sender, "Arena '" + arena.configName() + "' " + ((arena.enabled) ? ChatColor.GREEN : ChatColor.RED) + base + "d");
}
else
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
}
}
else
{
am.enabled = base.equals("enable");
am.serializeSettings();
MAUtils.tellPlayer(sender, "All arenas " + ((am.enabled) ? ChatColor.GREEN : ChatColor.RED) + base + "d");
}
return true;
}
/*
* Kick player from whichever arena they are in.
*/
if (base.equals("kick"))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.kick")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma kick <player>");
return true;
}
Arena arena = am.getArenaWithPlayer(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "That player is not in an arena.");
return true;
}
else
{
Player pl = server.getPlayer(arg1);
am.arenaMap.remove(pl);
arena.playerLeave(pl);
MAUtils.tellPlayer(sender, "Player '" + arg1 + "' was kicked from arena '" + arena.configName() + "'.");
MAUtils.tellPlayer(pl, "You were kicked by " + ((player) ? p.getName() : "the server."));
return true;
}
}
/*
* Restore a player's inventory.
*/
if (base.equals("restore"))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.restore")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!arg1.isEmpty())
{
if (am.getArenaWithPlayer(arg1) != null)
{
MAUtils.tellPlayer(sender, "Player is currently in an arena.");
return true;
}
if (MAUtils.restoreInventory(Bukkit.getServer().getPlayer(arg1)));
MAUtils.tellPlayer(sender, "Restored " + arg1 + "'s inventory!");
return true;
}
}
/*
* Force start/end arenas.
*/
if (base.equals("force"))
{
if (arg1.equals("end"))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.force.end")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg2.isEmpty())
{
for (Arena arena : am.arenas)
arena.forceEnd();
am.arenaMap.clear();
return true;
}
Arena arena = am.getArenaWithName(arg2);
if (arena == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
//if (arena.livePlayers.isEmpty())
if (arena.arenaPlayers.isEmpty())
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.FORCE_END_EMPTY));
return true;
}
arena.forceEnd();
MAUtils.tellPlayer(sender, MAMessages.get(Msg.FORCE_END_ENDED));
return true;
}
else if (arg1.equals("start"))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.force.start")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg2.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma force start <arena name>");
return true;
}
Arena arena = am.getArenaWithName(arg2);
if (arena == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
if (arena.running)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.FORCE_START_RUNNING));
return true;
}
if (arena.readyPlayers.isEmpty())
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.FORCE_START_NOT_READY));
return true;
}
arena.forceStart();
MAUtils.tellPlayer(sender, MAMessages.get(Msg.FORCE_START_STARTED));
return true;
}
else
{
MAUtils.tellPlayer(sender, "Usage: /ma force [start|end] (<arena name>)");
return true;
}
}
/*
* Reload the config-file.
*/
if (base.equals("config"))
{
if (!console && !(player && plugin.has(p, "mobarena.admin.config.reload")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!arg1.equals("reload"))
{
MAUtils.tellPlayer(sender, "Usage: /ma config reload");
return true;
}
am.updateAll();
MAUtils.tellPlayer(sender, "Config reloaded.");
return true;
}
/*
* Get the current arena, and list all other arenas.
*/
if (base.equals("arena"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.arena")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
MAUtils.tellPlayer(sender, "Currently selected arena: " + ChatColor.GREEN + am.selectedArena.configName());
StringBuffer buffy = new StringBuffer();
if (am.arenas.size() > 1)
{
for (Arena arena : am.arenas)
if (!arena.equals(am.selectedArena))
buffy.append(arena.configName() + " ");
}
else buffy.append(MAMessages.get(Msg.MISC_NONE));
MAUtils.tellPlayer(sender, "Other arenas: " + buffy.toString());
return true;
}
/*
* Set the current arena
*/
if (base.equals("setarena"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.setarena")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma setarena <arena name>");
return true;
}
Arena arena = am.getArenaWithName(arg1);
if (arena != null)
{
am.selectedArena = arena;
MAUtils.tellPlayer(sender, "Currently selected arena: " + arena.configName());
}
else
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
}
return true;
}
/*
* Create a new arena, and set the current arena to this new arena.
*/
if (base.equals("addarena"))
{
if (!(player && plugin.has(p, "mobarena.setup.addarena")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma addarena <arena name>");
return true;
}
Arena arena = am.getArenaWithName(arg1);
if (arena != null)
{
MAUtils.tellPlayer(sender, "An arena with that name already exists.");
return true;
}
arena = am.createArenaNode(arg1, p.getWorld());
am.arenas.add(arena);
am.selectedArena = arena;
MAUtils.tellPlayer(sender, "New arena with name '" + arg1 + "' created!");
return true;
}
if (base.equals("delarena"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.delarena")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma delarena <arena name>");
return true;
}
if (am.arenas.size() < 2)
{
MAUtils.tellPlayer(sender, "At least one arena must exist.");
return true;
}
Arena arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "There is no arena with that name.");
return true;
}
am.removeArenaNode(arg1);
am.arenas.remove(arena);
am.selectedArena = (am.selectedArena.equals(arena)) ? am.arenas.get(0) : am.selectedArena;
MAUtils.tellPlayer(sender, "Arena '" + arena.configName() + "' deleted.");
return true;
}
/*
* Enable or disable protection
*/
if (base.equals("protect"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.protect")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
Arena arena;
// No arguments
if (arg1.isEmpty())
{
arena = am.selectedArena;
arena.protect = !arena.protect;
}
// One argument
else if (arg2.isEmpty())
{
// true/false
if (arg1.equals("true") || arg1.equals("false"))
{
arena = am.selectedArena;
arena.protect = arg1.equals("true");
}
// Arena name
else
{
arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "There is no arena with that name.");
MAUtils.tellPlayer(sender, "Usage: /ma protect ([true|false])");
MAUtils.tellPlayer(sender, " or /ma protect <arena name> ([true|false])");
return true;
}
arena.protect = !arena.protect;
}
}
// Two arguments
else
{
if (!(arg2.equals("true") || arg2.equals("false")))
{
MAUtils.tellPlayer(sender, "Usage: /ma protect ([true|false])");
MAUtils.tellPlayer(sender, " or /ma protect <arena name> ([true|false])");
return true;
}
arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "There is no arena with that name.");
MAUtils.tellPlayer(sender, "Usage: /ma protect ([true|false])");
MAUtils.tellPlayer(sender, " or /ma protect <arena name> ([true|false])");
return true;
}
arena.protect = arg2.equals("true");
}
arena.serializeConfig();
MAUtils.tellPlayer(sender, "Protection for arena '" + arena.configName() + "': " + ((arena.protect) ? ChatColor.GREEN + "on" : ChatColor.RED + "off"));
return true;
}
if (base.equals("editarena"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.editarena")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
Arena arena;
// No arguments.
if (arg1.isEmpty())
{
arena = am.selectedArena;
arena.edit = !arena.edit;
}
// One argument.
else if (arg2.isEmpty())
{
// Argument is [true|false]
if (arg1.equals("true") || arg1.equals("false"))
{
arena = am.selectedArena;
arena.edit = arg1.equals("true");
}
// Argument is <arena name>
else
{
arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "There is no arena with that name.");
MAUtils.tellPlayer(sender, "Usage: /ma editarena ([true|false])");
MAUtils.tellPlayer(sender, " or /ma editarena <arena name> ([true|false])");
return true;
}
arena.edit = !arena.edit;
}
}
// Two arguments
else
{
if (!(arg2.equals("true") || arg2.equals("false")))
{
MAUtils.tellPlayer(sender, "Usage: /ma editarena ([true|false])");
MAUtils.tellPlayer(sender, " or /ma editarena <arena name> ([true|false])");
return true;
}
arena = am.getArenaWithName(arg1);
if (arena == null)
{
MAUtils.tellPlayer(sender, "There is no arena with that name.");
MAUtils.tellPlayer(sender, "Usage: /ma editarena ([true|false])");
MAUtils.tellPlayer(sender, " or /ma editarena <arena name> ([true|false])");
return true;
}
arena.edit = arg2.equals("true");
}
MAUtils.tellPlayer(sender, "Edit mode for arena '" + arena.configName() + "': " + ((arena.edit) ? ChatColor.GREEN + "true" : ChatColor.RED + "false"));
if (arena.edit) MAUtils.tellPlayer(sender, "Remember to turn it back off after editing!");
return true;
}
/*
* Set region points [p1|p2] for the current arena.
*/
if (base.equals("setregion"))
{
if (!(player && plugin.has(p, "mobarena.setup.setregion")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!(arg1.equals("p1") || arg1.equals("p2")))
{
MAUtils.tellPlayer(sender, "Usage: /ma setregion [p1|p2]");
return true;
}
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
MAUtils.tellPlayer(sender, "Set region point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
return true;
}
/*
* Expand the region <amount> (arg1) [up|down|out]
*/
if (base.equals("expandregion"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.expandregion")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (args.length != 3 || !arg1.matches("(-)?[0-9]+"))
{
MAUtils.tellPlayer(sender, "Usage: /ma expandregion <amount> [up|down|out]");
return true;
}
if (am.selectedArena.p1 == null || am.selectedArena.p2 == null)
{
MAUtils.tellPlayer(sender, "You must first define p1 and p2");
return true;
}
if (arg2.equals("up"))
{
am.selectedArena.p2.setY(Math.min(127, am.selectedArena.p2.getY() + Integer.parseInt(arg1)));
}
else if (arg2.equals("down"))
{
am.selectedArena.p1.setY(Math.max(0, am.selectedArena.p1.getY() - Integer.parseInt(arg1)));
}
else if (arg2.equals("out"))
{
am.selectedArena.p1.setX(am.selectedArena.p1.getX() - Integer.parseInt(arg1));
am.selectedArena.p1.setZ(am.selectedArena.p1.getZ() - Integer.parseInt(arg1));
am.selectedArena.p2.setX(am.selectedArena.p2.getX() + Integer.parseInt(arg1));
am.selectedArena.p2.setZ(am.selectedArena.p2.getZ() + Integer.parseInt(arg1));
}
else
{
MAUtils.tellPlayer(sender, "Usage: /ma expandregion <amount> [up|down|out]");
return true;
}
// In case of a "negative" region, fix it!
MAUtils.fixRegion(plugin.getConfig(), am.selectedArena.world, am.selectedArena);
MAUtils.tellPlayer(sender, "Region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
am.selectedArena.serializeConfig();
am.selectedArena.load(plugin.getConfig());
return true;
}
if (base.equals("showregion"))
{
if (!(player && plugin.has(p, "mobarena.setup.showregion")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (am.selectedArena.p1 == null || am.selectedArena.p2 == null)
{
MAUtils.tellPlayer(sender, "The region is not defined for the selected arena.");
return true;
}
if (showingRegion || !am.selectedArena.edit)
{
MAUtils.tellPlayer(sender, "Must be in edit mode.");
return true;
}
Material mat = Material.WOOL;
byte color = (byte)0;
if (arg1.equals("glowstone"))
mat = Material.GLOWSTONE;
else if (arg1.equals("white") || arg1.equals("red") || arg1.equals("blue"))
color = DyeColor.valueOf(arg1.toUpperCase()).getData();
else if (arg1.equals("green")) // Dark green sucks
color = 0x5;
else
mat = Material.GLASS;
// Set the variable so we don't overwrite the region.
showingRegion = true;
// Show the frame.
final World world = am.selectedArena.world;
final Set<int[]> blocks = MAUtils.showRegion(world, am.selectedArena.p1, am.selectedArena.p2, mat.getId(), color);
// And hide the frame.
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin,
new Runnable()
{
public void run()
{
for (int[] buffer : blocks)
world.getBlockAt(buffer[0], buffer[1], buffer[2]).setTypeIdAndData(buffer[3], (byte) 0, false);
showingRegion = false;
}
}, 2*20);
return true;
}
if (base.equals("setlobbyregion"))
{
if (!(player && plugin.has(p, "mobarena.setup.setlobbyregion")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!(arg1.equals("l1") || arg1.equals("l2")))
{
MAUtils.tellPlayer(sender, "Usage: /ma setlobbyregion [l1|l2]");
return true;
}
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
MAUtils.tellPlayer(sender, "Set lobby point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
return true;
}
if (base.equals("expandlobbyregion"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.expandlobbyregion")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (args.length != 3 || !arg1.matches("[0-9]+"))
{
MAUtils.tellPlayer(sender, "Usage: /ma expandlobbyregion <amount> [up|down|out]");
return true;
}
if (am.selectedArena.l1 == null || am.selectedArena.l2 == null)
{
MAUtils.tellPlayer(sender, "You must first define l1 and l2");
return true;
}
if (arg2.equals("up"))
{
am.selectedArena.l2.setY(Math.min(127, am.selectedArena.l2.getY() + Integer.parseInt(arg1)));
}
else if (arg2.equals("down"))
{
am.selectedArena.l1.setY(Math.max(0, am.selectedArena.l1.getY() - Integer.parseInt(arg1)));
}
else if (arg2.equals("out"))
{
am.selectedArena.l1.setX(am.selectedArena.l1.getX() - Integer.parseInt(arg1));
am.selectedArena.l1.setZ(am.selectedArena.l1.getZ() - Integer.parseInt(arg1));
am.selectedArena.l2.setX(am.selectedArena.l2.getX() + Integer.parseInt(arg1));
am.selectedArena.l2.setZ(am.selectedArena.l2.getZ() + Integer.parseInt(arg1));
}
else
{
MAUtils.tellPlayer(sender, "Usage: /ma expandlobbyregion <amount> [up|down|out]");
return true;
}
MAUtils.tellPlayer(sender, "Lobby region for '" + am.selectedArena.configName() + "' expanded " + arg2 + " by " + arg1 + " blocks.");
am.selectedArena.serializeConfig();
am.selectedArena.load(plugin.getConfig());
return true;
}
/*
* Set warp points [arena|lobby|spectator] for the current arena.
*/
if (base.equals("setwarp"))
{
if (!(player && plugin.has(p, "mobarena.setup.setwarp")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (!(arg1.equals("arena") || arg1.equals("lobby") || arg1.equals("spectator")))
{
MAUtils.tellPlayer(sender, "Usage: /ma setwarp [arena|lobby|spectator]");
return true;
}
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, arg1, p.getLocation());
MAUtils.tellPlayer(sender, "Set warp point " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
return true;
}
/*
* List all the current spawnpoints for the current arena.
*/
if (base.equals("spawnpoints"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.spawnpoints")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
StringBuffer buffy = new StringBuffer();
List<String> spawnpoints = plugin.getConfig().getKeys("arenas." + am.selectedArena.configName() + ".coords.spawnpoints");
if (spawnpoints != null)
{
for (String s : spawnpoints)
{
buffy.append(s);
buffy.append(" ");
}
}
else
{
buffy.append(MAMessages.get(Msg.MISC_NONE));
}
MAUtils.tellPlayer(sender, "Spawnpoints for arena '" + am.selectedArena.configName() + "': " + buffy.toString());
return true;
}
/*
* Add a spawnpoint for the current arena.
*/
if (base.equals("addspawn"))
{
if (!(player && plugin.has(p, "mobarena.setup.addspawn")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1 == null || !arg1.matches("^[a-zA-Z][a-zA-Z0-9]*$"))
{
MAUtils.tellPlayer(sender, "Usage: /ma addspawn <spawn name>");
return true;
}
MAUtils.setArenaCoord(plugin.getConfig(), am.selectedArena, "spawnpoints." + arg1, p.getLocation());
MAUtils.tellPlayer(sender, "Added spawnpoint " + arg1 + " for arena \"" + am.selectedArena.configName() + "\"");
return true;
}
/*
* Delete a spawnpoint for the current arena.
*/
if (base.equals("delspawn"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.delspawn")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1 == null || !arg1.matches("^[a-zA-Z][a-zA-Z0-9]*$"))
{
MAUtils.tellPlayer(sender, "Usage: /ma delspawn <spawn name>");
return true;
}
if (MAUtils.delArenaCoord(plugin.getConfig(), am.selectedArena, "spawnpoints." + arg1))
MAUtils.tellPlayer(sender, "Deleted spawnpoint " + arg1 + " for arena '" + am.selectedArena.configName() + "'");
else
MAUtils.tellPlayer(sender, "Could not find the spawnpoint " + arg1 + "for the arena '" + am.selectedArena.configName() + "'");
return true;
}
if (base.equals("auto-generate"))
{
if (!(player && plugin.has(p, "mobarena.setup.autogenerate")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1 == null || !arg1.matches("^[a-zA-Z][a-zA-Z0-9]*$"))
{
MAUtils.tellPlayer(sender, "Usage: /ma autogenerate <arena name>");
return true;
}
if (am.getArenaWithName(arg1) != null)
{
MAUtils.tellPlayer(sender, "An arena with that name already exists.");
return true;
}
if (MAUtils.doooooItHippieMonster(p.getLocation(), 13, arg1, plugin))
MAUtils.tellPlayer(sender, "Arena with name '" + arg1 + "' generated.");
else
MAUtils.tellPlayer(sender, "Could not auto-generate arena.");
return true;
}
if (base.equals("auto-degenerate"))
{
if (!console && !(player && plugin.has(p, "mobarena.setup.autodegenerate")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (arg1.isEmpty())
{
MAUtils.tellPlayer(sender, "Usage: /ma auto-degenerate <arena name>");
return true;
}
if (am.arenas.size() < 2)
{
MAUtils.tellPlayer(sender, "At least one arena must exist!");
return true;
}
if (am.getArenaWithName(arg1) == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
if (MAUtils.undoItHippieMonster(arg1, plugin, true))
MAUtils.tellPlayer(sender, "Arena with name '" + arg1 + "' degenerated.");
else
MAUtils.tellPlayer(sender, "Could not degenerate arena.");
return true;
}
if (base.equals("dooooo") && arg1.equals("it") && arg2.equals("hippie") && arg3.equals("monster"))
{
if (!(player && plugin.has(p, "mobarena.setup.autogenerate")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
String name = "a0";
do name = name.substring(0,1) + (Integer.parseInt(name.substring(1,2)) + 1);
while (am.getArenaWithName(name) != null);
if (MAUtils.doooooItHippieMonster(p.getLocation(), 13, name, plugin))
MAUtils.tellPlayer(sender, "Arena with name '" + name + "' generated.");
else
MAUtils.tellPlayer(sender, "Could not auto-generate arena.");
return true;
}
if (base.equals("undo") && arg1.equals("it") && arg2.equals("hippie") && arg3.equals("monster"))
{
if (!(player && plugin.has(p, "mobarena.setup.autodegenerate")) && !op)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.MISC_NO_ACCESS));
return true;
}
if (am.arenas.size() < 2)
{
MAUtils.tellPlayer(sender, "At least one arena must exist!");
return true;
}
if (am.getArenaWithName("a1") == null)
{
MAUtils.tellPlayer(sender, MAMessages.get(Msg.ARENA_DOES_NOT_EXIST));
return true;
}
String name = "a1";
while (am.getArenaWithName(name) != null)
name = name.substring(0,1) + (Integer.parseInt(name.substring(1,2)) + 1);
name = name.substring(0,1) + (Integer.parseInt(name.substring(1,2)) - 1);
if (MAUtils.undoItHippieMonster(name, plugin, true))
MAUtils.tellPlayer(sender, "Arena with name '" + name + "' degenerated.");
else
MAUtils.tellPlayer(sender, "Could not degenerate arena.");
return true;
}
MAUtils.tellPlayer(sender, "Command not found.");
return true;
}
}