Class Command


  • public abstract class Command
    extends Object
    Represent a Plugin class that can execute. Just like we use the terminal, we could use it to executing some commands. This is an important way to interact with FocessQQ Bot. You should declare CommandType to this class ,or you should register it with your plugin manually.
    • Constructor Detail

      • Command

        public Command​(@NotNull
                       @NotNull String name,
                       @NotNull
                       @NotNull String... aliases)
        Instance a Command Class with special name and aliases.
        Parameters:
        name - the name of the command
        aliases - the aliases of the command
        Throws:
        CommandLoadException - if there is any exception thrown in the initializing process
      • Command

        protected Command()
        Provide a constructor to help CommandType design. Never instance it!Command will be instanced when this class is loaded automatically.
    • Method Detail

      • unregister

        public static void unregister​(Plugin plugin)
        Unregister all commands in the plugin
        Parameters:
        plugin - the plugin that the commands that need to be unregistered belongs to
      • unregisterAll

        public static boolean unregisterAll()
        Unregister all commands
        Returns:
        true if there are some commands not belonging to MainPlugin not been unregistered, false otherwise
      • getCommands

        @NotNull
        public static @NotNull @UnmodifiableView List<Command> getCommands()
        Get all commands
        Returns:
        All commands as a list
      • register

        public static void register​(@NotNull
                                    @NotNull Plugin plugin,
                                    @NotNull
                                    @NotNull Command command)
        Register the command
        Parameters:
        plugin - the plugin the command belongs to
        command - the command that need to be registered
        Throws:
        top.focess.command.CommandDuplicateException - if the command name already exists in the registered commands
        IllegalStateException - if the command is not initialized
      • isRegistered

        public boolean isRegistered()
      • getPlugin

        @NotNull
        public @NotNull Plugin getPlugin()
      • unregister

        public void unregister()
        Unregister this command
      • getName

        @NotNull
        public @NotNull String getName()
      • getAliases

        @NotNull
        public @NotNull @UnmodifiableView List<String> getAliases()
      • getExecutorPermission

        public java.util.function.Predicate<CommandSender> getExecutorPermission()
      • setExecutorPermission

        public void setExecutorPermission​(@NotNull
                                          @NotNull java.util.function.Predicate<CommandSender> executorPermission)
      • addExecutor

        @NotNull
        public final top.focess.command.Command.Executor addExecutor​(@NotNull
                                                                     @NotNull CommandExecutor executor,
                                                                     @NotNull
                                                                     @NotNull top.focess.command.CommandArgument<?>... commandArguments)
        Add default executor to define how to execute this command. for example : this.addExecutor(... ,CommandArgument.ofString("example"),CommandArgument.ofString()); which means that it runs when you execute the command with "example" "xxx". this.addExecutor(...); which means that it runs when you just execute the command without anything.
        Parameters:
        executor - the executor to define this command
        commandArguments - the defined arguments for this executor
        Returns:
        the Executor to define other proprieties
      • execute

        public final top.focess.command.CommandResult execute​(@NotNull
                                                              @NotNull CommandSender sender,
                                                              @NotNull
                                                              @NotNull String[] args,
                                                              @NotNull
                                                              @NotNull IOHandler ioHandler,
                                                              int id,
                                                              String rawCommand)
                                                       throws Exception
        Execute the command with special arguments
        Parameters:
        sender - the executor
        args - the arguments that command spilt by spaces
        ioHandler - the receiver
        Returns:
        the command result
        Throws:
        Exception - the exception that occurred when executing the command
        See Also:
        CommandLine.exec(CommandSender, String, IOHandler)
      • getPermission

        @NotNull
        public @NotNull top.focess.command.CommandPermission getPermission()
      • setPermission

        public void setPermission​(top.focess.command.CommandPermission permission)
        Set the default permission
        Parameters:
        permission - the target permission the command need
      • init

        public abstract void init()
        Used to initialize the command (the primary goal is to define the default executors)
      • usage

        @NotNull
        public abstract @NotNull List<String> usage​(CommandSender sender)
        Used to get help information when execute this command with wrong arguments or the executor returns CommandResult.ARGS
        Parameters:
        sender - the executor which need to get help information
        Returns:
        the help information