package com.tommytony.war.command;
import java.util.logging.Level;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import com.tommytony.war.War;
/**
* Handles commands received by War
*
* @author Tim Düsterhus
* @package bukkit.tommytony.war
*/
public class WarCommandHandler {
/**
* Handles a command
*
* @param sender
* The sender of the command
* @param cmd
* The command
* @param args
* The arguments
* @return Success
*/
public boolean handle(CommandSender sender, Command cmd, String[] args) {
String command = cmd.getName();
String[] arguments = null;
// parse prefixed commands
if ((command.equals("war") || command.equals("War")) && args.length > 0) {
command = args[0];
arguments = new String[args.length - 1];
for (int i = 1; i <= arguments.length; i++) {
arguments[i - 1] = args[i];
}
if (arguments.length == 1 && (arguments[0].equals("help") || arguments[0].equals("h"))) {
// show /war help
War.war.badMsg(sender, cmd.getUsage());
return true;
}
} else if (command.equals("war") || command.equals("War")) {
// show /war help
War.war.msg(sender, cmd.getUsage());
return true;
} else {
arguments = args;
}
AbstractWarCommand commandObj = null;
try {
if (command.equals("warhub")) {
commandObj = new WarhubCommand(this, sender, arguments);
} else if (command.equals("zones") || command.equals("warzones")) {
commandObj = new WarzonesCommand(this, sender, arguments);
} else if (command.equals("zone") || command.equals("warzone")) {
commandObj = new WarzoneCommand(this, sender, arguments);
} else if (command.equals("teams")) {
commandObj = new TeamsCommand(this, sender, arguments);
} else if (command.equals("join")) {
commandObj = new JoinCommand(this, sender, arguments);
} else if (command.equals("leave")) {
commandObj = new LeaveCommand(this, sender, arguments);
} else if (command.equals("team")) {
commandObj = new TeamCommand(this, sender, arguments);
} else if (command.equals("setzone")) {
commandObj = new SetZoneCommand(this, sender, arguments);
} else if (command.equals("deletezone")) {
commandObj = new DeleteZoneCommand(this, sender, arguments);
} else if (command.equals("setzonelobby")) {
commandObj = new SetZoneLobbyCommand(this, sender, arguments);
} else if (command.equals("savezone")) {
commandObj = new SaveZoneCommand(this, sender, arguments);
} else if (command.equals("resetzone")) {
commandObj = new ResetZoneCommand(this, sender, arguments);
} else if (command.equals("nextbattle")) {
commandObj = new NextBattleCommand(this, sender, arguments);
} else if (command.equals("renamezone")) {
commandObj = new RenameZoneCommand(this, sender, arguments);
} else if (command.equals("setteam")) {
commandObj = new SetTeamCommand(this, sender, arguments);
} else if (command.equals("deleteteam")) {
commandObj = new DeleteTeamCommand(this, sender, arguments);
} else if (command.equals("setteamflag")) {
commandObj = new SetTeamFlagCommand(this, sender, arguments);
} else if (command.equals("deleteteamflag")) {
commandObj = new DeleteTeamFlagCommand(this, sender, arguments);
} else if (command.equals("setmonument")) {
commandObj = new SetMonumentCommand(this, sender, arguments);
} else if (command.equals("deletemonument")) {
commandObj = new DeleteMonumentCommand(this, sender, arguments);
} else if (command.equals("setbomb")) {
commandObj = new SetBombCommand(this, sender, arguments);
} else if (command.equals("deletebomb")) {
commandObj = new DeleteBombCommand(this, sender, arguments);
} else if (command.equals("setcake")) {
commandObj = new SetCakeCommand(this, sender, arguments);
} else if (command.equals("deletecake")) {
commandObj = new DeleteCakeCommand(this, sender, arguments);
}else if (command.equals("setteamconfig") || command.equals("teamcfg")) {
commandObj = new SetTeamConfigCommand(this, sender, arguments);
} else if (command.equals("setzoneconfig") || command.equals("zonecfg")) {
commandObj = new SetZoneConfigCommand(this, sender, arguments);
} else if (command.equals("setwarhub")) {
commandObj = new SetWarHubCommand(this, sender, arguments);
} else if (command.equals("deletewarhub")) {
commandObj = new DeleteWarhubCommand(this, sender, arguments);
} else if (command.equals("loadwar")) {
commandObj = new LoadWarCommand(this, sender, arguments);
} else if (command.equals("unloadwar")) {
commandObj = new UnloadWarCommand(this, sender, arguments);
} else if (command.equals("setwarconfig") || command.equals("warcfg")) {
commandObj = new SetWarConfigCommand(this, sender, arguments);
} else if (command.equals("zonemaker") || command.equals("zm")) {
commandObj = new ZoneMakerCommand(this, sender, arguments);
}
// we are not responsible for any other command
} catch (NotWarAdminException e) {
War.war.badMsg(sender, "war.notadmin");
} catch (NotZoneMakerException e) {
War.war.badMsg(sender, "war.notzm");
} catch (Exception e) {
War.war.log("An error occured while handling command " + cmd.getName() + ". Exception:" + e.getClass().toString() + " " + e.getMessage(), Level.WARNING);
e.printStackTrace();
}
if(commandObj != null) {
boolean handled = commandObj.handle();
if(!handled) {
War.war.badMsg(sender, cmd.getUsage());
}
}
return true;
}
}