package me.desht.chesscraft.commands; import chesspresso.Chess; import me.desht.chesscraft.ChessValidate; import me.desht.chesscraft.Messages; import me.desht.chesscraft.chess.ChessGame; import me.desht.chesscraft.chess.ChessGameManager; import me.desht.chesscraft.exceptions.ChessException; import me.desht.chesscraft.util.ChessUtils; import me.desht.dhutils.MiscUtil; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import java.util.ArrayList; import java.util.List; public class JoinCommand extends ChessAbstractCommand { public JoinCommand() { super("chess join", 0, 1); setPermissionNode("chesscraft.commands.join"); setUsage("/chess join [<game-name>]"); } @Override public boolean execute(Plugin plugin, CommandSender sender, String[] args) throws ChessException { notFromConsole(sender); Player player = (Player) sender; ChessGameManager cMgr = ChessGameManager.getManager(); String gameName = null; int colour = Chess.NOBODY; if (args.length >= 1) { gameName = args[0]; colour = cMgr.getGame(gameName).addPlayer(player.getUniqueId().toString(), player.getDisplayName()); } else { // find a game (or games) with an invitation for us for (ChessGame game : cMgr.listGames()) { if (game.getInvitedId().equals(player.getUniqueId())) { colour = game.addPlayer(player.getUniqueId().toString(), player.getDisplayName()); gameName = game.getName(); } } ChessValidate.notNull(gameName, Messages.getString("ChessCommandExecutor.noPendingInvitation")); } ChessGame game = cMgr.getGame(gameName); cMgr.setCurrentGame(player, game); MiscUtil.statusMessage(sender, Messages.getString("ChessCommandExecutor.joinedGame", game.getName(), ChessUtils.getDisplayColour(colour))); // if (plugin.getConfig().getBoolean("auto_teleport_on_join")) { // game.getPlayer(colour).teleport(); // } else { // MiscUtil.statusMessage(sender, Messages.getString("ChessCommandExecutor.canTeleport", game.getName())); // } return true; } @Override public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) { if (args.length == 1 && sender instanceof Player) { return getInvitedGameCompletions((Player) sender, args[0]); } else { showUsage(sender); return noCompletions(sender); } } private List<String> getInvitedGameCompletions(Player player, String prefix) { List<String> res = new ArrayList<String>(); for (ChessGame game : ChessGameManager.getManager().listGames()) { if (game.getName().startsWith(prefix) && game.isOpenInvite() || player.getUniqueId().equals(game.getInvitedId())) { res.add(game.getName()); } } return getResult(res, player, true); } }