package com.github.jamesnorris.ablockalypse; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandExecutor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import com.github.jamesnorris.ablockalypse.aspect.Game; import com.github.jamesnorris.ablockalypse.aspect.ZAPlayer; import com.github.jamesnorris.ablockalypse.event.GameCreateEvent; import com.github.jamesnorris.ablockalypse.event.PlayerLeaveGameEvent; import com.github.jamesnorris.ablockalypse.event.bukkit.PlayerInteract; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedBarrierCreation; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedGameObjectRemoval; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedMobSpawnerCreation; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedMysteryBoxCreation; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedPassageCreation; import com.github.jamesnorris.ablockalypse.queue.inherent.QueuedTeleporterCreation; import com.github.jamesnorris.ablockalypse.utility.CommandUtility; public class BaseCommand extends CommandUtility implements CommandExecutor { private DataContainer data = Ablockalypse.getData(); @Override public boolean onCommand(CommandSender sender, Command cmd, String inf, String[] args) { if (cmd.getName().equalsIgnoreCase("za")) { if (!sender.hasPermission(PermissionManager.BASE_COMMAND)) { sender.sendMessage(ChatColor.RED + "You don't have permission to use Ablockalypse commands!"); return true; } boolean args0Digit = args != null && args.length == 1 && Character.isDigit(args[0].charAt(0)); boolean args1Digit = args != null && args.length == 2 && Character.isDigit(args[1].charAt(0)); boolean args2Digit = args != null && args.length == 3 && Character.isDigit(args[2].charAt(0)); boolean helpCommand = args != null && (args.length == 1 || args.length == 2 && args1Digit) && args[0].equalsIgnoreCase("help"); if (args == null || args.length == 0 || helpCommand || args0Digit) { BASE_MENU.showPage(sender, args0Digit ? Integer.parseInt(args[0]) : helpCommand ? args1Digit ? Integer.parseInt(args[1]) : 1 : 1); return true; } else if (args[0].equalsIgnoreCase("list")) { if ((args.length == 2 || args.length == 3 && args2Digit) && args[1].equalsIgnoreCase("games")) { updateGameListMenu(); GAME_LIST.showPage(sender, args2Digit ? Integer.parseInt(args[2]) : 1); } else if ((args.length == 2 || args.length == 3 && args2Digit) && args[1].equalsIgnoreCase("signs")) { SIGN_LIST.showPage(sender, args2Digit ? Integer.parseInt(args[2]) : 1); } else if ((args.length == 2 || args.length == 3 && args2Digit) && args[1].equalsIgnoreCase("objects")) { OBJECT_LIST.showPage(sender, args2Digit ? Integer.parseInt(args[2]) : 1); } else { LIST_MENU.showPage(sender, args1Digit ? Integer.parseInt(args[1]) : 1); } return true; } else if (args[0].equalsIgnoreCase("join")) { if (!(sender instanceof Player)) { sender.sendMessage(requiresPlayer); return true; } if (args.length != 2) { sender.sendMessage(ChatColor.RED + "Incorrect syntax! You must provide the name of a game!"); return true; } if (!sender.hasPermission(PermissionManager.JOIN_GAMES)) { sender.sendMessage(ChatColor.RED + "You do not have permission to join games!"); return true; } String gameName = args[1]; if (!data.gameExists(gameName)) { sender.sendMessage(ChatColor.RED + "This game does not exist! Use /za game create <game> to create one."); return true; } Player player = (Player) sender; if (data.isZAPlayer(player)) { sender.sendMessage(ChatColor.RED + "You are already in a game!"); return true; } ZAPlayer zap = data.getZAPlayer(player, gameName, true); zap.loadPlayerToGame(gameName, true); return true; } else if (args[0].equalsIgnoreCase("quit")) { if (!(sender instanceof Player)) { sender.sendMessage(requiresPlayer); return true; } Player player = (Player) sender; if (!data.isZAPlayer(player)) { sender.sendMessage(ChatColor.RED + "You must be in a game to do that!"); return true; } ZAPlayer zap = data.getZAPlayer(player); Game zag = zap.getGame(); PlayerLeaveGameEvent GPLE = new PlayerLeaveGameEvent(zap, zag); Bukkit.getPluginManager().callEvent(GPLE); if (!GPLE.isCancelled()) { sender.sendMessage(ChatColor.AQUA + "Successfully quit the Ablockalypse game: " + ChatColor.GOLD + zag.getName()); zag.removePlayer(player); return true; } return true; } else if (args[0].equalsIgnoreCase("game")) { if (!sender.hasPermission(PermissionManager.CREATE_GAMES)) { sender.sendMessage(noMaintainPerms); return true; } if (args.length == 3) { String gameName = args[2]; if (args[1].equalsIgnoreCase("create")) { if (data.gameExists(gameName)) { sender.sendMessage(ChatColor.RED + "That game already exists!"); return true; } if (!sender.hasPermission(PermissionManager.CREATE_GAMES)) { sender.sendMessage(noMaintainPerms); return true; } Game zag = new Game(gameName); GameCreateEvent gce = new GameCreateEvent(zag, sender, null); Bukkit.getServer().getPluginManager().callEvent(gce); if (!gce.isCancelled()) { sender.sendMessage(ChatColor.GRAY + "You have created a new ZA game called " + gameName); } else { zag.remove(true); } return true; } else if (args[1].equalsIgnoreCase("remove")) { if (!data.gameExists(gameName)) { sender.sendMessage(ChatColor.RED + "This game does not exist! Use /za game create <game> to create one."); return true; } Game zag = data.getGame(gameName, true); zag.remove(true); sender.sendMessage(ChatColor.GRAY + "You have removed the game " + gameName); return true; } } else if (args.length == 4 && args[1].equalsIgnoreCase("mapdata")) { if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You must be a player to save/load mapdata! (A location on the map is needed)"); return true; } String gameName = args[2]; Player player = (Player) sender; if (args[3].equalsIgnoreCase("load")) { PlayerInteract.mapDataLoadPlayers.put(player.getName(), gameName); sender.sendMessage(ChatColor.GRAY + "Please click a block to load the mapdata at. The block must be the bottom-left corner (low X, Y, and Z) of the data you want loaded."); return true; } else if (args[3].equalsIgnoreCase("save")) { PlayerInteract.mapDataSavePlayers.put(player.getName(), gameName); sender.sendMessage(ChatColor.GRAY + "Please click a corner of the map to begin."); return true; } else { sender.sendMessage(ChatColor.RED + "You must provide the argument 'load/save'!"); return true; } } GAME_MENU.showPage(sender, args1Digit ? Integer.parseInt(args[1]) : 1); return true; } else if (args[0].equalsIgnoreCase("object")) { if (!sender.hasPermission(PermissionManager.CREATE_GAMES)) { sender.sendMessage(noMaintainPerms); return true; } if (!(sender instanceof Player)) { sender.sendMessage(ChatColor.RED + "You must be a player to use selection!"); return true; } Player player = (Player) sender; if (args.length == 4 && args[1].equalsIgnoreCase("create")) { String gameName = args[3]; if (!data.gameExists(gameName)) { sender.sendMessage(ChatColor.RED + "This game does not exist! Use /za game create <game> to create one."); return true; } if (args[2].equalsIgnoreCase("barrier")) { PlayerInteract.queue.add(new QueuedBarrierCreation(player.getName(), gameName)); } else if (args[2].equalsIgnoreCase("mainframe")) { PlayerInteract.queue.add(new QueuedTeleporterCreation(player.getName(), gameName, true)); } else if (args[2].equalsIgnoreCase("teleporter")) { PlayerInteract.queue.add(new QueuedTeleporterCreation(player.getName(), gameName, false)); } else if (args[2].equalsIgnoreCase("mobspawner")) { PlayerInteract.queue.add(new QueuedMobSpawnerCreation(player.getName(), gameName)); } else if (args[2].equalsIgnoreCase("passage")) { PlayerInteract.queue.add(new QueuedPassageCreation(player.getName(), gameName)); } else if (args[2].equalsIgnoreCase("mysterybox") || args[2].equalsIgnoreCase("mysterychest")) { // accepts mysterychest, just in case they don't know about the switch in v1.2.9.2 PlayerInteract.queue.add(new QueuedMysteryBoxCreation(player.getName(), gameName)); } else { sender.sendMessage(ChatColor.RED + "That is not a valid object! Please try \'/za list objects\'."); } return true; } else if (args.length == 2 && args[1].equalsIgnoreCase("remove")) { PlayerInteract.queue.add(new QueuedGameObjectRemoval(player.getName())); return true; } OBJECT_MENU.showPage(sender, args1Digit ? Integer.parseInt(args[1]) : 1); return true; } BASE_MENU.showPage(sender, args0Digit ? Integer.parseInt(args[0]) : helpCommand ? args1Digit ? Integer.parseInt(args[1]) : 1 : 1); return true; } return true; } }