package pro.marvin.minecraft.mcmurder;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.List;
public class CommandManager implements CommandExecutor {
private Murder plugin;
public CommandManager(Murder dta) {
plugin = dta;
}
@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
if (cmd.getName().equalsIgnoreCase("mcm")) {
// No further arguments
if (args.length == 0) {
// Send list of available commands for OPs and normal Players
sender.sendMessage(Texts.COMMANDS_HEAD);
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_COMMANDS);
sender.sendMessage("§6 - mcm join [arena]");
sender.sendMessage("§6 - mcm leave");
if (sender.isOp()) {
sender.sendMessage("§6 - mcm [enable/disable] [arena]");
sender.sendMessage("§6 - mcm setLobby");
sender.sendMessage("§6 - mcm setSpawn [arena] [spawn]");
sender.sendMessage("§6 - mcm reload");
}
sender.sendMessage(Texts.COPYRIGHT);
return true;
}
// One additional argument
if (args.length == 1) {
// Teleport player to lobby if he/she is not in-game
if (args[0].equalsIgnoreCase("lobby")) {
Player player = (Player) sender;
if (plugin.getPlayerInGame(player)) return true;
player.teleport(plugin.mcmSpawn());
return true;
}
// Player leaves arena
if (args[0].equalsIgnoreCase("leave")) {
Player player = (Player) sender;
plugin.playerLeave(player);
return true;
}
// Set lobby-spawn [OP only]
if (args[0].equalsIgnoreCase("setLobby")) {
if (sender.isOp()) {
Player player = (Player) sender;
List<Double> listPosition = Arrays.asList(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ());
plugin.getConfig().set("lobbyWorld", player.getWorld().getName());
plugin.getConfig().set("lobbySpawn", listPosition);
plugin.saveConfig();
plugin.loadConfig();
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_EXECUTED);
} else {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_OP_ONLY);
}
return true;
}
// Reload config [OP only]
if (args[0].equalsIgnoreCase("reload")) {
if (!sender.isOp()) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_OP_ONLY);
return true;
}
plugin.loadConfig();
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_EXECUTED);
return true;
}
}
// Two additional arguments
if (args.length == 2) {
// Player joins arena
if (args[0].equalsIgnoreCase("join") && sender instanceof Player) {
Player p = (Player) sender;
int map;
try {
map = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_ARENA);
return true;
}
if (map > 100 || map < 0 || !plugin.arenaConfig.get(map)) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INACTIVE_ARENA);
return true;
}
if (plugin.getGameStarted(map)) {
p.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_GAME_RUNNING);
return true;
}
plugin.playerJoinedArena(p, map);
return true;
}
// Enabled an arena [OP only]
if (args[0].equalsIgnoreCase("enable")) {
if (!sender.isOp()) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_OP_ONLY);
return true;
}
int map;
try {
map = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_NUMBER);
return true;
}
if (map < 1 || map > 100) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_NUMBER);
return true;
}
plugin.getConfig().set("maps." + map + ".enabled", true);
plugin.saveConfig();
plugin.loadConfig();
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_EXECUTED);
return true;
}
// Disables an arena [OP only]
if (args[0].equalsIgnoreCase("disable")) {
if (!sender.isOp()) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_OP_ONLY);
return true;
}
int map;
try {
map = Integer.parseInt(args[1]);
} catch (NumberFormatException e) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_NUMBER);
return true;
}
if (map < 1 || map > 100) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_NUMBER);
return true;
}
plugin.getConfig().set("maps." + map + ".enabled", false);
plugin.saveConfig();
plugin.loadConfig();
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_EXECUTED);
plugin.stopGame(map, false);
return true;
}
return true;
}
// Three additional arguments
if (args.length == 3) {
// Set one spawn in a map [OP only]
if (args[0].equalsIgnoreCase("setSpawn")) {
if (!(sender instanceof Player)) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_PLAYER_ONLY);
return true;
}
if (!sender.isOp()) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_OP_ONLY);
return true;
}
int arg1;
int arg2;
try {
arg1 = Integer.parseInt(args[1]);
arg2 = Integer.parseInt(args[2]);
} catch (NumberFormatException e) {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_NUMBER);
return true;
}
if (arg1 < 100 && arg1 > 0 && arg2 < 9 && arg2 > 0) {
Player player = (Player) sender;
List<Double> listPosition = Arrays.asList(player.getLocation().getX(), player.getLocation().getY(), player.getLocation().getZ());
plugin.getConfig().set("maps." + arg1 + "." + arg2, listPosition);
plugin.saveConfig();
plugin.loadConfig();
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_EXECUTED);
return true;
} else {
sender.sendMessage(Texts.PRE_TEXT + Texts.COMMANDS_INVALID_SPAWNS);
return true;
}
}
}
}
return false;
}
}