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.pieces.PieceDesigner;
import me.desht.chesscraft.exceptions.ChessException;
import me.desht.dhutils.MiscUtil;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import java.util.Arrays;
import java.util.List;
public class DesignCommand extends ChessAbstractCommand {
public DesignCommand() {
super("chess design");
setPermissionNode("chesscraft.designer");
setUsage(new String[] {
"/chess design",
"/chess design start",
"/chess design clear",
"/chess design exit",
"/chess design save [<style-name>]",
"/chess design load [<style-name>]",
});
}
@Override
public boolean execute(Plugin plugin, CommandSender sender, String[] args) throws ChessException {
notFromConsole(sender);
Player player = (Player)sender;
BoardView bv = BoardViewManager.getManager().partOfChessBoard(player.getLocation());
if (bv == null) {
throw new ChessException(Messages.getString("Designer.notOnBoard"));
}
if (bv.getGame() != null) {
throw new ChessException(Messages.getString("Designer.gameRunning"));
}
PieceDesigner designer = bv.getChessBoard().getDesigner();
if (designer == null && args.length > 0) {
throw new ChessException(Messages.getString("Designer.mustBeInDesignMode"));
}
if (args.length == 0 || args[0].startsWith("st")) {
if (bv.isDesigning()) {
showUsage(sender);
return true;
} else {
// toggle into design mode
designer = new PieceDesigner(bv, bv.getPieceStyleName(), player.getUniqueId());
bv.getChessBoard().setDesigner(designer);
MiscUtil.statusMessage(sender, Messages.getString("Designer.inDesignMode", bv.getName()));
if (ChessCraft.getInstance().getConfig().getBoolean("designer.auto_load")) {
designer.load();
MiscUtil.statusMessage(sender, Messages.getString("Designer.styleLoaded", designer.getSetName()));
}
}
bv.paintAll();
} else if (args[0].startsWith("e")) { // exit
if (bv.isDesigning()) {
bv.getChessBoard().setDesigner(null);
MiscUtil.statusMessage(sender, Messages.getString("Designer.outOfDesignMode", bv.getName()));
bv.paintAll();
}
} else if (args[0].startsWith("c")) { // clear
designer.clear();
MiscUtil.statusMessage(sender, Messages.getString("Designer.cleared", designer.getSetName()));
} else if (args[0].startsWith("sa")) { // save
if (args.length >= 2) {
designer.setSetName(args[1]);
}
designer.scan();
designer.save();
MiscUtil.statusMessage(sender, Messages.getString("Designer.styleSaved", designer.getSetName()));
} else if (args[0].startsWith("l")) { // load
if (args.length >= 2) {
designer.setSetName(args[1]);
}
designer.load();
MiscUtil.statusMessage(sender, Messages.getString("Designer.styleLoaded", designer.getSetName()));
}
return true;
}
@Override
public List<String> onTabComplete(Plugin plugin, CommandSender sender, String[] args) {
if (args.length == 1) {
return filterPrefix(sender, Arrays.asList("start", "clear", "exit", "save", "load"), args[0]);
} else {
showUsage(sender);
return noCompletions(sender);
}
}
}