Bir Komut Kurmak
İlk adım, yeni bir :javadoc: CommandSpec oluşturucu elde etmektir. Oluşturucu, komut yardım iletilerini, komut bağımsız değişkenlerini ve komut mantığını değiştirme yöntemleri sağlar. Bu yöntemler zincirlenebilir.
Sonunda komutu oluşturmak için, :javadoc: CommandSpec.Builder # build () yöntemini çağırmak isteyeceksiniz.
Ondan sonra, komutu kaydettirmelisin.
Örnek: Basit Bir Komut Kurmak
import org.spongepowered.api.Sponge;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.command.spec.CommandSpec;
CommandSpec myCommandSpec = CommandSpec.builder()
.description(Text.of("Hello World Command"))
.permission("myplugin.command.helloworld")
.executor(new HelloWorldCommand())
.build();
Sponge.getCommandManager().register(plugin, myCommandSpec, "helloworld", "hello", "test");
CommandSpec yapıcı yöntemlerine genel bakış
Yöntem |
Açıklama |
---|---|
‘’ executor’’ |
Komut mantığını tanımlar (See Writing a Command Executor). ** Hiçbir alt komut ayarlanmadıysa yürütmenin ayarlanması gereklidir **. |
“argümanlar” |
Bu komut için argüman belirtimini ayarlar (Bkz :doc: arguments). |
‘’ izin ‘’ |
Bu komutu kullanmadan önce kontrol edilecek izni ayarlayın. |
“açıklama” |
Bu komutun amacına ilişkin kısa, bir satırlık bir açıklama, yardım sistemi tarafından görüntülenir. |
“genişletilmişAçıklama” |
Daha uzun yardım listelerinde kullanılacak genişletilmiş bir açıklama ayarlar. Kısa açıklama eklenecektir. |
‘’ çocuk ‘’ |
Bu komutu, takma adlarıyla ekler (Bkz :doc: `childcommands ‘). |
‘’ çocuklar ‘’ |
Bu komutun alt komutlarını takma adlarıyla ayarlar (Bkz :doc: `childcommands ‘). |
‘’ inputTokenizer’’ |
Bağımsız değişkenlerin nasıl ayrıştırılacağını tanımlar. Varsayılan olarak, ayrıştırıcı komut girdisini boşluklarla böler. Teklifler tek bir argüman olarak sayılır. Örnek: `` / tpworld Çentik “Benim Dünyam” `` iki terimle sonuçlanacaktır: “Çentik” ve “Benim Dünyam”. |
“kurmak” |
Komutu kurar. Ondan sonra, komutu kaydettirmelisin. |
Komutanlığa Mektup Yazma
Basit bir komut oluşturmak için gereken tek bileşen komutun mantığını içeren komut yürütücü sınıfıdır.
Sınıf, :javadoc: CommandExecutor #execute (CommandSource, CommandContext) yöntemini tanımlayan :javadoc: CommandExecutor arayüzünü uygulamak zorundadır. Yöntem, komut yürütme üzerinde çağırılır ve iki bağımsız değişkeni vardır:
Komut çağrısının kaynağı (örneğin, konsol, komut bloğu veya bir oyuncu)
Ayrıştırılmış argümanları içeren komut bağlam nesnesi (Bkz :doc: argümanlar)
Örnek: Basit Komut Yürütücüsü
import org.spongepowered.api.command.CommandException;
import org.spongepowered.api.command.CommandResult;
import org.spongepowered.api.command.CommandSource;
import org.spongepowered.api.command.args.CommandContext;
import org.spongepowered.api.command.spec.CommandExecutor;
public class HelloWorldCommand implements CommandExecutor {
@Override
public CommandResult execute(CommandSource src, CommandContext args) throws CommandException {
src.sendMessage(Text.of("Hello World!"));
return CommandResult.success();
}
}
Tüyo
Komut yürütücüsünü komut oluşturma sürecinde tanımlamak için anonim sınıflar <https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html> _ kullanabilirsiniz (Bkz. Örnek :doc: argümanlar sayfası).
Yalnızca Oynatıcılara Yönelik Komutlar
Bazen sadece oyuncuların bir komutu yerine getirebilmesi gerekir (örn. “/ Intihar” komutu).
Perform an instanceof
check to determine the type of the CommandSource:
import org.spongepowered.api.entity.living.player.Player;
import org.spongepowered.api.command.source.CommandBlockSource;
import org.spongepowered.api.command.source.ConsoleSource;
if(src instanceof Player) {
Player player = (Player) src;
player.sendMessage(Text.of("Hello " + player.getName() + "!"));
}
else if(src instanceof ConsoleSource) {
src.sendMessage(Text.of("Hello GLaDOS!"));
// The Cake Is a Lie
}
else if(src instanceof CommandBlockSource) {
src.sendMessage(Text.of("Hello Companion Cube!"));
// <3
}
Not
Komutu ** konsola uyumlu ** yapmak için isteğe bağlı bir `` [player] `` argümanı eklemenizi öneririz (örneğin `` / inticide [player] ``).
Bunun en kolay yolu, bir `` playerOrSource`` komut elemanı eklemektir (Bkz :doc: arguments).
Komuta Sonuçları
`` CommandExecutor # execute () `` yöntemi her zaman bir :javadoc: CommandResult döndürmelidir. Çoğu durumda, geri dönmek yeterlidir :javadoc: CommandResult # success () komutu başarılıysa veya :javadoc: CommandResult # empty () olmamışsa. Daha fazla bilginin iletilmesi gereken durumlarda, bir :javadoc: CommandResult # builder () kullanılmalıdır. Oluşturucu, bir tamsayıyı kabul eden ve aynı adın özniteliğini ayarlayacak çeşitli çeşitli yöntemler sağlar. Oluşturucu tarafından ayarlanmamış tüm özellikler boş kalacaktır.
Komut blokları, bu değerleri, birden fazla komut bloğundan oluşan detaylı yapılar için kullanılabilir olan puan tablosu istatistiklerini değiştirmek için kullanabilir. Verilere nasıl erişildiğine dair bir eğitim materyali burada bulunabilir: <https://minecraft.gamepedia.com/Tutorials/Command_stats> `.
Örnek: Bir Komut Sonrası Oluşturma
CommandResult result = CommandResult.builder()
.affectedEntities(42)
.successCount(1)
.build();
Bu örnek, 42 varlıktan etkilenen ve başarılı olan bir komut için bir `` CommandResult` ‘oluşturmak için bir oluşturucu kullanır.
Hata işleme
`` Execute () `` yöntemi, komutu çalıştırmaya çalışırken bir hatanın oluştuğunu bildiren bir :javadoc: CommandException da atabilir. Böyle bir İstisna atılırsa, mesajı hata olarak biçimlendirilmiş komut kaynağı için görüntülenir. Ayrıca, komutlar kullanım mesajı görüntülenecektir. Bir :javadoc: ArgumentParseException,` CommandException` alt kategorisi, komut argümanları ayrıştırılamazsa otomatik olarak atılır.