package net.bitjump.bukkit.bitlib.commands;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public abstract class Subcommand
{
protected CommandSender sender;
protected Player player;
protected String args[];
protected String name;
protected String description;
protected String permission;
protected boolean needsPlayer;
protected List<String> requiredArgs = new ArrayList<String>();
protected List<String> optionalArgs = new ArrayList<String>();
protected List<String> aliases = new ArrayList<String>();
protected abstract void perform();
public void execute(CommandSender sender, String[] args)
{
this.sender = sender;
this.args = args;
if(sender instanceof Player)
this.player = (Player) sender;
if(needsPlayer && !isPlayer())
{
return;
}
if(args.length < requiredArgs.size())
{
return;
}
if(!hasPermission())
{
return;
}
try
{
perform();
}
catch(Throwable e)
{
}
}
public String getUsageTemplate(boolean displayHelp)
{
StringBuilder ret = new StringBuilder();
ret.append(name + " ");
for (String s : requiredArgs)
ret.append(String.format("<%s> ", s));
for (String s : optionalArgs)
ret.append(String.format("[%s] ", s));
if (displayHelp)
ret.append(" - " + description);
return ret.toString();
}
public CommandSender getSender()
{
return sender;
}
public Player getPlayer()
{
return player;
}
public String[] getArgs()
{
return args;
}
public String getName()
{
return name;
}
public String getDescription()
{
return description;
}
public String getPermission()
{
return permission;
}
public List<String> getRequiredArgs()
{
return requiredArgs;
}
public List<String> getOptionalArgs()
{
return optionalArgs;
}
public List<String> getAliases()
{
return aliases;
}
public boolean hasPermission()
{
return sender.hasPermission(permission);
}
public boolean isPlayer()
{
return player != null;
}
}