package org.mcteam.ancientgates.commands; import java.util.ArrayList; import java.util.List; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; import org.mcteam.ancientgates.Gate; import org.mcteam.ancientgates.Plugin; import org.mcteam.ancientgates.Conf; import org.mcteam.ancientgates.util.TextUtil; public class BaseCommand { public List aliases; public List requiredParameters; public List optionalParameters; public String helpDescription; public CommandSender sender; public boolean senderMustBePlayer; public boolean hasGateParam; public Player player; public Gate gate; public List parameters; public BaseCommand() { aliases = new ArrayList(); requiredParameters = new ArrayList(); optionalParameters = new ArrayList(); senderMustBePlayer = true; hasGateParam = true; helpDescription = "no description"; } public List getAliases() { return aliases; } public void execute(CommandSender sender, List parameters) { this.sender = sender; this.parameters = parameters; if ( ! validateCall()) { return; } if (this.senderMustBePlayer) { this.player = (Player)sender; } perform(); } public void perform() { } public void sendMessage(String message) { sender.sendMessage(Conf.colorSystem+message); } public void sendMessage(List messages) { for(String message : messages) { this.sendMessage(message); } } public boolean validateCall() { // validate player if ( this.senderMustBePlayer && ! (sender instanceof Player)) { sendMessage("This command can only be used by ingame players."); return false; } // validate permission if( ! hasPermission(sender)) { sendMessage("You lack the permissions to "+this.helpDescription.toLowerCase()+"."); return false; } // valide parameter count if (parameters.size() < requiredParameters.size()) { sendMessage("Usage: "+this.getUseageTemplate(true)); return false; } // validate gate parameter if (this.hasGateParam) { String id = parameters.get(0); if ( ! Gate.exists(id)) { sendMessage("There exists no gate with id "+id); return false; } gate = Gate.get(id); } return true; } public boolean hasPermission(CommandSender sender) { return Plugin.hasPermManage(sender); } // -------------------------------------------- // // Help and usage description // -------------------------------------------- // public String getUsageTemplate(boolean withColor, boolean withDescription) { String ret = ""; if (withColor) { ret += Conf.colorCommand; } ret += "/" + Plugin.instance.getBaseCommand()+ " " +TextUtil.implode(this.getAliases(), ",")+" "; List parts = new ArrayList(); for (String requiredParameter : this.requiredParameters) { parts.add("["+requiredParameter+"]"); } for (String optionalParameter : this.optionalParameters) { parts.add("*["+optionalParameter+"]"); } if (withColor) { ret += Conf.colorParameter; } ret += TextUtil.implode(parts, " "); if (withDescription) { ret += " "+Conf.colorSystem + this.helpDescription; } return ret; } public String getUseageTemplate(boolean withColor) { return getUsageTemplate(withColor, false); } public String getUseageTemplate() { return getUseageTemplate(true); } }