Düşük Seviye Komut API’sı

CommandCallable ve Dispatcher arayüzlerinin komutlarını tanımlamak için kullanılabilir. Arayüzler, özel komut API’leri için bir temel olarak kullanılabilir.

Basit komut tanımları için Command Builder API yı kullanmanız önerilir.

Bir komut yazma

İlk adım, komut için bir sınıf oluşturmaktır. Sınıf, “CommandCallable” arayüzünü uygulamak zorundadır:

import org.spongepowered.api.Sponge;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.command.CommandCallable;
import org.spongepowered.api.command.CommandException;
import org.spongepowered.api.command.CommandResult;
import org.spongepowered.api.command.CommandSource;

import java.util.Collections;
import java.util.List;
import java.util.Optional;

public class MyBroadcastCommand implements CommandCallable {

    private final Optional<Text> desc = Optional.of(Text.of("Displays a message to all players"));
    private final Optional<Text> help = Optional.of(Text.of("Displays a message to all players. It has no color support!"));
    private final Text usage = Text.of("<message>");

    public CommandResult process(CommandSource source, String arguments) throws CommandException {
        Sponge.getServer().getBroadcastChannel().send(Text.of(arguments));
        return CommandResult.success();
    }

    public boolean testPermission(CommandSource source) {
        return source.hasPermission("myplugin.broadcast");
    }

    public Optional<Text> getShortDescription(CommandSource source) {
        return desc;
    }

    public Optional<Text> getHelp(CommandSource source) {
        return help;
    }

    public Text getUsage(CommandSource source) {
        return usage;
    }

    public List<String> getSuggestions(CommandSource source, String arguments) throws CommandException {
        return Collections.emptyList();
    }
}

Tüyo

Bu örnekteki her yöntemin kullanımı için JavaDoc için CommandCallable a bakın.

Komutun kaydedilmesi

Şimdi CommandManager içindeki class’ı kaydedebiliriz. CommandManager, chat’e hangi komutların girildiğini kontrol edip onları doğru command handler’lara yönlendiren bir yönetim mekanizmasıdır. Komutunuzu kaydetmek için CommandManager#register(Object, CommandCallable, String…) metodunu kullanın, eklentinizi okutun, komutunuzun ve gerekli alternatif adlarının parametre olarak bir instance’ını oluşturun.

import org.spongepowered.api.command.CommandManager;

CommandManager cmdService = Sponge.getCommandManager();
cmdService.register(plugin, new MyBroadcastCommand(), "message", "broadcast");

Not

Komutunuzun yeni örneğinden sonraki değişkenler komuta kaydolmak için takma adlardır. İstediğiniz kadar metinler ekleyebilirsiniz. Başka bir komut tarafından kullanılmayan ilk takma ad birincil takma ad olur. Bu, başka bir komut tarafından kullanılan takma adların yok sayıldığı anlamına gelir.

Komut Dağıtımcıları

Komut dağıtıcıları, hiyerarşik komut yapıları (alt komutlar) oluşturmak için kullanılabilir.

Dispatcher arayüzünün varsayılan uygulaması :javadoc:`SimpleDispatcher`sınıfıdır.

Bir Dispatcher ayrıca bir CommandCallable, bu yüzden herhangi bir diğer komut gibi kaydedilebilir.

import org.spongepowered.api.command.dispatcher.SimpleDispatcher;

CommandCallable subCommand1 = ...;
CommandCallable subCommand2 = ...;

SimpleDispatcher rootCommand = new SimpleDispatcher();

rootCommand.register(subCommand1, "subcommand1", "sub1");
rootCommand.register(subCommand2, "subcommand2", "sub2");

Sponge.getCommandManager().register(this, rootCommand, "root");