package com.jcwhatever.nucleus.internal.managed.commands;
import com.jcwhatever.nucleus.internal.managed.commands.CommandCollection.ICommandContainerFactory;
import com.jcwhatever.nucleus.managed.commands.CommandInfo;
import com.jcwhatever.nucleus.managed.commands.ICommand;
import com.jcwhatever.nucleus.managed.commands.arguments.ICommandArguments;
import com.jcwhatever.nucleus.managed.commands.exceptions.CommandException;
import com.jcwhatever.nucleus.utils.ArrayUtils;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.Plugin;
import java.lang.annotation.Annotation;
public class DummyRegisteredCommand extends RegisteredCommand {
private DummyCommandExecutable _executable;
private RegisteredCommandInfo _info;
/**
* Constructor.
*/
public DummyRegisteredCommand(Plugin plugin, ICommand command, ICommandContainerFactory commandFactory) {
super(plugin, command, commandFactory);
}
public void setExecutable(DummyCommandExecutable executable) {
_executable = executable;
}
@Override
public void execute(CommandSender sender, Arguments args)
throws CommandException {
if (_executable != null)
_executable.execute(sender, args);
}
public interface DummyCommandExecutable {
void execute(CommandSender sender, ICommandArguments args)
throws CommandException;
}
@Override
public RegisteredCommandInfo getInfo() {
if (_info == null && getDispatcher() != null) {
_info = new RegisteredCommandInfo(this, null);
_info.setCurrentAlias("root");
}
return _info;
}
public void setInfo(CommandInfo commandInfo) {
_info = new RegisteredCommandInfo(this, null, commandInfo);
}
public static CommandInfo createInfoAnnotation(final String parent,
final String name,
final String[] staticParams,
final String[] floatingParams,
final String[] flags,
final String[] paramDescriptions,
final String usage,
final String description,
final String longDescription,
final boolean isHelpVisible,
final PermissionDefault permissionDefault) {
return new CommandInfo() {
@Override
public Class<? extends Annotation> annotationType() {
return CommandInfo.class;
}
@Override
public String parent() {
return parent;
}
@Override
public String[] command() {
return new String[] { name };
}
@Override
public String[] staticParams() {
return staticParams;
}
@Override
public String[] floatingParams() {
return floatingParams;
}
@Override
public String[] flags() {
return flags;
}
@Override
public String[] paramDescriptions() {
return paramDescriptions;
}
@Override
public String usage() {
return usage;
}
@Override
public String description() {
return description;
}
@Override
public String longDescription() {
return longDescription;
}
@Override
public boolean isHelpVisible() {
return isHelpVisible;
}
@Override
public PermissionDefault permissionDefault() {
return permissionDefault;
}
};
}
public static class CommandInfoBuilder {
final String name;
String parent = "";
String[] staticParams = ArrayUtils.EMPTY_STRING_ARRAY;
String[] floatingParams = ArrayUtils.EMPTY_STRING_ARRAY;
String[] flags = ArrayUtils.EMPTY_STRING_ARRAY;
String[] paramDescriptions = ArrayUtils.EMPTY_STRING_ARRAY;
String usage = "";
String description = "";
String longDescription = "";
boolean isHelpVisible = true;
PermissionDefault permissionDefault = PermissionDefault.OP;
public CommandInfoBuilder(String commandName) {
name = commandName;
}
public CommandInfoBuilder parent(String name) {
parent = name;
return this;
}
public CommandInfoBuilder staticParams(String... params) {
staticParams = params;
return this;
}
public CommandInfoBuilder floatingParams(String... params) {
floatingParams = params;
return this;
}
public CommandInfoBuilder flags(String... names) {
flags = names;
return this;
}
public CommandInfoBuilder paramDescriptions(String... descriptions) {
paramDescriptions = descriptions;
return this;
}
public CommandInfoBuilder usage(String usage) {
this.usage = usage;
return this;
}
public CommandInfoBuilder description(String description) {
this.description = description;
return this;
}
public CommandInfoBuilder longDescription(String description) {
this.longDescription = description;
return this;
}
public CommandInfoBuilder helpVisible(boolean isHelpVisible) {
this.isHelpVisible = isHelpVisible;
return this;
}
public CommandInfoBuilder permissionDefault(PermissionDefault permissionDefault) {
this.permissionDefault = permissionDefault;
return this;
}
public CommandInfo build() {
return createInfoAnnotation(parent,
name,
staticParams,
floatingParams,
flags,
paramDescriptions,
usage,
description,
longDescription,
isHelpVisible,
permissionDefault);
}
}
}