Comandos Hijos

El constructor CommandSpec soporta estructuras de comando jerárquicas como esta:

  • /mail (parent command)

    • /mail send (child command)

    • /mail read (child command)

Cada comando hijo es un CommandSpec separado y puede ser creado en la misma forma que un comando regular.

import org.spongepowered.api.text.Text;
import org.spongepowered.api.command.spec.CommandSpec;

// /mail read
CommandSpec readCmd = CommandSpec.builder()
    .permission("myplugin.mail.read")
    .description(Text.of("Read your inbox"))
    .executor(...)
    .build();

// /mail send
CommandSpec sendCmd = CommandSpec.builder()
    .permission("myplugin.mail.send")
    .description(Text.of("Send a mail"))
    .arguments(...)
    .executor(...)
    .build();

En lugar de registrarlos en el servicio de comando, los comandos secundarios se registran en su comando principal utilizando el método CommandSpec.Builder#child(CommandCallable, String…). Están registrados con una lista de alias. El primer alias proporcionado es el principal y aparecerá en el mensaje de uso.

import org.spongepowered.api.Sponge;

CommandSpec mailCommandSpec = CommandSpec.builder()
    .permission("myplugin.mail")
    .description(Text.of("Send and receive mails"))
    .child(readCmd, "read", "r", "inbox")
    .child(sendCmd, "send", "s", "write")
    .build();

Sponge.getCommandManager().register(plugin, mailCommandSpec, "mail", "email");

Nota

Si un CommandExecutor fue establecido por el comando padre, es usado como alternativa si los argumentos no coinciden con uno de los alias de comando secundarios. No es necesario configurar un ejecutor.