package me.desht.chesscraft.commands; import me.desht.chesscraft.DirectoryStructure; import me.desht.chesscraft.chess.*; import me.desht.chesscraft.chess.ai.AIFactory; import me.desht.chesscraft.chess.ai.AIFactory.AIDefinition; import me.desht.chesscraft.chess.pieces.ChessSet; import me.desht.chesscraft.chess.pieces.ChessSetFactory; import me.desht.chesscraft.exceptions.ChessException; import me.desht.dhutils.MiscUtil; import me.desht.dhutils.commands.AbstractCommand; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import java.io.File; import java.util.*; public abstract class ChessAbstractCommand extends AbstractCommand { public ChessAbstractCommand(String label, int minArgs, int maxArgs) { super(label, minArgs, maxArgs); } public ChessAbstractCommand(String label, int minArgs) { super(label, minArgs); } public ChessAbstractCommand(String label) { super(label); } protected List<String> getGameCompletions(Plugin plugin, CommandSender sender, String prefix) { List<String> res = new ArrayList<String>(); for (ChessGame game : ChessGameManager.getManager().listGames()) { if (game.getName().startsWith(prefix)) { res.add(game.getName()); } } return getResult(res, sender, true); } protected List<String> getPlayerInGameCompletions(Plugin plugin, CommandSender sender, String prefix) { if (sender instanceof Player) { Player player = (Player) sender; List<String> res = new ArrayList<String>(); for (ChessGame game : ChessGameManager.getManager().listGames()) { if (game.getName().startsWith(prefix) && game.getPlayer(player.getUniqueId().toString()) != null) { res.add(game.getName()); } } return getResult(res, sender, true); } else { return noCompletions(sender); } } protected List<String> getBoardCompletions(Plugin plugin, CommandSender sender, String prefix) { List<String> res = new ArrayList<String>(); for (BoardView bv : BoardViewManager.getManager().listBoardViews()) { if (bv.getName().startsWith(prefix)) { res.add(bv.getName()); } } return getResult(res, sender, true); } protected List<String> getBoardStyleCompletions(Plugin plugin, CommandSender sender, String prefix) { return filterPrefix(sender, getAllBoardStyleNames(), prefix); } protected List<String> getPieceStyleCompletions(Plugin plugin, CommandSender sender, String prefix) { return filterPrefix(sender, getAllPieceStyleNames(), prefix); } protected List<String> getPlayerCompletions(Plugin plugin, CommandSender sender, String prefix, boolean aiOnly) { List<String> res = new ArrayList<String>(); if (!aiOnly) { for (Player p : Bukkit.getOnlinePlayers()) { res.add(p.getName()); } } for (AIDefinition aiDef : AIFactory.getInstance().listAIDefinitions()) { if (!aiDef.isEnabled()) continue; res.add(aiDef.getName()); } return filterPrefix(sender, res, prefix); } protected List<ChessSet> getAllPieceStyles() { Map<String,ChessSet> res = new HashMap<String, ChessSet>(); for (String styleName : getAllPieceStyleNames()) { try { res.put(styleName, ChessSetFactory.getChessSet(styleName)); } catch (ChessException e) { // bad piece style? } } return MiscUtil.asSortedList(res.values()); } protected List<BoardStyle> getAllBoardStyles() { Map<String, BoardStyle> res = new HashMap<String, BoardStyle>(); for (String styleName : getAllBoardStyleNames()) { try { res.put(styleName, BoardStyle.loadStyle(styleName)); } catch (ChessException e) { // bad board style? } } return MiscUtil.asSortedList(res.values()); } protected List<String> getAllBoardStyleNames() { return getAllStyleNames(DirectoryStructure.getBoardStyleDirectory()); } protected List<String> getAllPieceStyleNames() { return getAllStyleNames(DirectoryStructure.getPieceStyleDirectory()); } private List<String> getAllStyleNames(File dir) { Set<String> res = new HashSet<String>(); for (File f : new File(dir, "custom").listFiles(DirectoryStructure.ymlFilter)) { String styleName = f.getName().replaceAll("\\.yml$", ""); res.add(styleName); } for (File f : dir.listFiles(DirectoryStructure.ymlFilter)) { String styleName = f.getName().replaceAll("\\.yml$", ""); res.add(styleName); } return MiscUtil.asSortedList(res); } @Override public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) { showUsage(sender); return noCompletions(sender); } }