Membangun sebuah perintah

Langkah pertama adalah mendapatkan yang baru :javadoc: Pembangun`Spesifikasi Perintah`Pembangun menyediakan metode untuk memodifikasi pesan bantuan perintah, perintah argumen dan logika perintah. Metode ini bisa dirantai.

Untuk akhirnya membangun perintah, Anda pasti ingin memanggil :javadoc: Pembangun`Spesifikasi Perintah`#membangun()`metode.

Setelah itu, Anda harus mendaftarkan perintah itu.

Contoh: Membangun sebuah perintah yang sederhana

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

PluginContainer plugin = ...;

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

Ikhtisar dari metode pembangun spesifikasi perintah

Metode

Deskripsi

`` pelaksana``

Mendefinisikan logika perintah (Lihat Menulis perintah Pelaksana).

Pengaturan pelaksana diperlukan jika tidak ada perintah anak yang ditetapkan.

argumen

Menetapkan spesifikasi argumen untuk perintah ini (Lihat: :doc: argumen).

izin

Tetapkan izin yang akan diperiksa sebelum menggunakan perintah ini.

deskripsi

Deskripsi singkat, satu baris dari perintah ini tujuan yang akan ditampilkan oleh sistem bantuan.

Deskripsi diperpanjang

Menetapkan deskripsi yang panjang untuk digunakan dalam daftar bantuan yang lebih panjang. Akan ditambahkan ke deskripsi singkat.

anak

Menambahkan perintah anak ke perintah ini dengan alias (Lihat perintah anak).

anak-anak

Menetapkan perintah anak dari perintah ini dengan mereka alias (Lihat :doc: perintah anak).

memasukkan Tokenizer

Mendefinisikan bagaimana argumen akan diuraikan. Secara default, parser membagi masukan perintah dengan spasi. Kutipan dihitung sebagai argumen tunggal.

Contoh: / tpworld Takik "Dunia saya" akan menghasilkan dua argumen: ``Takik``dan``Dunia saya.

membangun

Membangun perintah Setelah itu, anda harus mendaftarkan perintahnya.

Menulis perintah pelaksana

Satu-satunya komponen yang dibutuhkan untuk membangun sebuah perintah yang sederhana adalah kelas pelaksana perintah, yang berisi logika perintah.

Kelas harus menerapkan :javadoc: perintah pelaksana antarmuka, yang mendefinisikan :javadoc: `perintah pelaksana#pelaksana(Sumber pelaksana, metode perintah konteks). Metode ini dipanggil pada eksekusi perintah dan memiliki dua argumen:

  • Sumber perintah panggilan (misalnya konsol, blok perintah atau pemutar)

  • Objek konteks perintah, yang berisi argumen diurai (Lihat :doc: argumen)

Contoh: Pelaksana perintah sederhana

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

Tip

Anda bisa menggunakan kelas anonim <https://docs.oracle.com/javase/tutorial/java/javaOO/anonymousclasses.html> `_untuk menentukan perintah pelaksana dalam proses membangun perintah (Lihat contoh di halaman :doc: `argumen).

Perintah pemutar saja

Sometimes it is necessary that only players can execute a command (e.g. a /suicide command).

Lakukan sebuah``contoh`` periksa untuk menentukan jenis dari :javadoc: Sumber perintah`:

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
}

Catatan

Kami menyarankan anda menambahkan pilihan [player] argumen untuk membuat perintah konsol-ramah (misalnya /bunuh diri [player]).

Solusi termudah untuk ini adalah menambahkan sebuah``pemain atau sumber`` perintah elemen (Lihat argumen).

Hasil perintah

Metode CommandExecutor#execute() harus selalu mengembalikan pernyataan CommandResult. Dalam kebanyakan kasus ini cukup untuk mengembalikan pernyataan CommandResult#success() jika perintah telah berhasil atau pernyataan CommandResult#empty() jika tidak berhasil. Dalam kasus dimana informasi yang lebih banyak harus dinyatakan, CommandResult#builder() harus digunakan. Pembangun menyediakan beberapa metode-metode yang menerima integer dan akan mengatur atribut dari nama yang sama. Semua atribut yang tidak diatur oleh pembangun akan kosong.

Blok perintah dapat menggunakan nilai tersebut untuk memodifikasi statistik papan skor, yang kemudian dapat digunakan untuk konstruksi yang rumit yang terdiri dari beberapa blok perintah. Tutorial bagaimana data diakses bisa ditemukan `disini <https://minecraft.gamepedia.com/Tutorials/Command_stats> `_.

Contoh: Membangun sebuah hasil perintah

CommandResult result = CommandResult.builder()
    .affectedEntities(42)
    .successCount(1)
    .build();

Contoh ini menggunakan pembangun untuk membuat sebuah Hasil perintah untuk sebuah perintah yang mempengaruhi 42 entitas dan berhasil.

Penanganan Kesalahan

The execute() method may also throw a CommandException, signaling that an error occurred while trying to execute the command. If such an Exception is thrown, its message will be displayed to the command source, formatted as an error. Also, the commands usage message will be displayed. An ArgumentParseException, a subtype of CommandException is automatically thrown if the commands arguments could not be parsed.