Perintah Anak

The CommandSpec builder pendukung struktur perintah hierarki seperti ini:

  • ''/Mail'' (perintah induk)

    • /mail send (perintah kecil)

    • /mail read (perintah kecil)

Setiap perintah kecil yang memisahkan ''CommandSpec'' dan dapat dibuat dalam cara yang sama seperti perintah reguler.

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();

Alih-alih mendaftarkan mereka untuk perintah service, perintah kecil yang telah terdaftar pada perintah induk yang mereka gunakan :javadoc:'CommandSpec.Builder#child(CommandCallable String,...) metode'. Mereka telah terdaftar dengan daftar alias. Alias yang pertama yang disediakan adalah salah satu yang utama dan akan muncul dalam pesan penggunaan.

import org.spongepowered.api.Sponge;

PluginContainer plugin = ...;

CommandSpec mailCommandSpec = CommandSpec.builder()
    .permission("myplugin.mail.base")
    .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");

Tingkah laku

Jika sebuah perintah-perintah kecil, sebuah :javadoc:'CommandExecutor', diatur melalui :javadoc:'CommandSpec.Builder#pelaksana(CommandExecutor)' dan dikaitkan :javadoc:'CommandSpec.Builder#argumen(CommandElement)' adalah opsional. Perilaku kesalahan dalam pemilihan dan penguraian argumen perintah kecil tergantung pada apakah ada pelaksana induk.

Jika induk pelaksana belum diatur, kemudian jika perintah kecil yang diminta tidak dapat ditemukan atau argumen tidak dapat diurai, kemudian sebuah :javadoc:'ArgumentParseException' akan dibuang.

Jika induk pelaksana telah diatur untuk perintah induk, ianya dapat digunakan sebagai fallback jika argumen pertama tidak cocok dengan salah satu perintah. Jika sebuah perintah kecil dipilih tetapi argumen tidak dapat menguraikan, salah satu dari yang berikut ini akan terjadi berdasarkan apa :javadoc:'CommandSpec.Builder#childArgumentParseExceptionFallback(boolean)' diatur ke:

  • Jika 'benar' (default), :javadoc:'ArgumentParseException' diabaikan dan argumen dari perintah induk diurai. Jika mereka gagal, pengecualian untuk perintah induk akan ditampilkan. Ini adalah perilaku yang sama seperti API sebelumnya, di mana perintah kecil merevisi argumen perintah pengecualian penguraian yang tidak akan ditampilkan.

  • Jika 'palsu', pelaksana induk tidak dieksekusi dan :javadoc: 'ArgumentParseException' dibuang, kembali kepengecualian dari argumen perintah kecil yang gagal untuk diurai, tetapi dapat mencegah beberapa kombinasi dari perintah induk dan argumen yang dieksekusi (jika argumen pertama mundur bisa sama seperti perintah kecil).

In all cases, if the arguments parse successfully but the child executor throws an exception, the fallback executor (if any) is not executed and the error message from the child executor is displayed.