package me.desht.chesscraft.commands; import me.desht.chesscraft.ChessCraft; import me.desht.chesscraft.Messages; import me.desht.chesscraft.chess.BoardView; import me.desht.chesscraft.chess.BoardViewManager; import me.desht.chesscraft.chess.ChessGame; import me.desht.chesscraft.chess.ChessGameManager; import me.desht.chesscraft.exceptions.ChessException; import me.desht.dhutils.MessagePager; import me.desht.dhutils.MiscUtil; import me.desht.dhutils.PermissionUtils; import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; public class TeleportCommand extends ChessAbstractCommand { public TeleportCommand() { super("chess tp", 0, 2); addAlias("chess teleport"); setPermissionNode("chesscraft.commands.teleport"); setUsage(new String[] { "/chess tp [<game-name>]", "/chess tp -b <board-name>", "/chess tp -set [<board-name>]", "/chess tp -clear [<board-name>]", "/chess tp -list" }); setOptions("b", "set", "clear", "list"); } @Override public boolean execute(Plugin plugin, CommandSender sender, String[] args) throws ChessException { if (getBooleanOption("list")) { showTeleportDests(sender); return true; } notFromConsole(sender); if (!ChessCraft.getInstance().getConfig().getBoolean("teleporting")) { throw new ChessException(Messages.getString("ChessCommandExecutor.noTeleporting")); } Player player = (Player)sender; if (getBooleanOption("set")) { PermissionUtils.requirePerms(sender, "chesscraft.commands.teleport.set"); if (args.length == 0) { // set global teleport-out location BoardViewManager.getManager().setGlobalTeleportOutDest(player.getLocation()); MiscUtil.statusMessage(player, Messages.getString("ChessCommandExecutor.globalTeleportSet")); } else { // set per-board teleport-out location BoardView bv = BoardViewManager.getManager().getBoardView(args[0]); bv.setTeleportDestination(player.getLocation()); MiscUtil.statusMessage(player, Messages.getString("ChessCommandExecutor.boardTeleportSet", bv.getName())); } } else if (getBooleanOption("clear")) { PermissionUtils.requirePerms(sender, "chesscraft.commands.teleport.set"); if (args.length == 0) { // clear global teleport-out location BoardViewManager.getManager().setGlobalTeleportOutDest(null); MiscUtil.statusMessage(player, Messages.getString("ChessCommandExecutor.globalTeleportCleared")); } else { // clear per-board teleport-out location BoardView bv = BoardViewManager.getManager().getBoardView(args[0]); bv.setTeleportDestination(null); MiscUtil.statusMessage(player, Messages.getString("ChessCommandExecutor.boardTeleportCleared", bv.getName())); } } else if (getBooleanOption("b") && args.length > 0) { // teleport to board PermissionUtils.requirePerms(sender, "checkers.commands.teleport.board"); BoardView bv = BoardViewManager.getManager().getBoardView(args[0]); if (bv != null) { bv.summonPlayer(player); } } else if (args.length == 0) { // teleport out of (or back to) current game BoardViewManager.getManager().teleportOut(player); } else { // teleport to game, or maybe board BoardView bv; if (ChessGameManager.getManager().checkGame(args[0])) { ChessGame game = ChessGameManager.getManager().getGame(args[0]); bv = BoardViewManager.getManager().findBoardForGame(game); } else { PermissionUtils.requirePerms(player, "chesscraft.commands.teleport.board"); bv = BoardViewManager.getManager().getBoardView(args[0]); } if (bv != null) { bv.summonPlayer(player); } } return true; } private void showTeleportDests(CommandSender sender) { String bullet = MessagePager.BULLET + ChatColor.DARK_PURPLE; MessagePager pager = MessagePager.getPager(sender).clear(); Location loc = BoardViewManager.getManager().getGlobalTeleportOutDest(); if (loc != null) { pager.add(bullet + ChatColor.YELLOW + "[GLOBAL]" + ChatColor.WHITE + ": " + MiscUtil.formatLocation(loc)); } for (BoardView bv : BoardViewManager.getManager().listBoardViewsSorted()) { if (bv.hasTeleportDestination()) { loc = bv.getTeleportDestination(); pager.add(bullet + ChatColor.YELLOW + bv.getName() + ChatColor.WHITE + ": " + MiscUtil.formatLocation(loc)); } } pager.showPage(); } }