Alt komutlar

: Javadoc: CommandSpec oluşturucu şu şekilde hiyerarşik komut yapılarını desteklemektedir:

  • `` / mail`` (üst komut)

    • `` / mail`` (alt komut)

    • `` / mail read`` `(alt komut)

Her alt komut ayrı bir CommandSpec tir ve düzenli bir komutun olduğu gibi oluşturulabilir.

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

Komut hizmeti üzerine kaydedilmek yerine alt komutlar, :javadoc:`CommandSpec.Builder#child(CommandCallable, String…)`metodu kullanılarak ana komutları üzerinde kaydedilirler. Bir takma ad listesiyle kaydedilirler. Sunulan ilk takma ad, birincil olandır ve kullanım mesajında görünecektir.

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

Yedek Davranım

Eğer bir komutun alt komutları varsa, CommandSpec.Builder#executor(CommandExecutor) ve ilgili CommandSpec.Builder#arguments(CommandElement)’i üzerinden ayarlanan bir CommandExecutor opsiyoneldir. Seçilen hatanın davranışı ve alt komutları ayrıştırma değişkeni, bu ana işlem ögesinin var olup olmadığına bağlıdır.

Bir ana işlem ögesi ayarlanmadıysa ve çağırılan alt komut bulunamadıysa ya da değişkenler ayrıştırılamadılarsa, ArgumentParseException hatası verilecektir.

Ana komut için bir ana işlem ögesi ayarlandıysa, ilk değişkenin alt komutları takma adlarından biriyle eşleşmemesi durumunda o ana işlem ögesi son çare olarak kullanılır. Eğer bir alt komut seçildiyse ancak değişkenler ayrışmıyorlarsa, CommandSpec.Builder#childArgumentParseExceptionFallback(boolean)’ın nasıl ayarlandığına bağlı olarak şunlardan birisi gerçekleşecektir:

  • Değer true (varsayılan) ise, :javadoc:`ArgumentParseException`görmezden gelinir ve ana komutlardan değişkenler ayrıştırılır. Başarısız olunursa, ana komut için var olan istisna gösterilir. Bu, alt komut değişkeni ayrıştırması istisnalarının gösterilmediği önceki API revizyonlarıyla aynı davranıştır.

  • Değer false ise, ana işlem ögesi yürütülmez ve ArgumentParseException hatası verilir ve istisna, ayrıştırma hatası veren alt komuttan geri döndürülür ve bu durum, ana komutların ve değişken kombinasyonlarının bazılarının çalışmasını engelleyebilir (geri çekilmenin ilk değişkeni ana komut ile aynıysa).

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.