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;
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. |
|
Menetapkan spesifikasi argumen untuk perintah ini (Lihat: :doc: argumen). |
|
Tetapkan izin yang akan diperiksa sebelum menggunakan perintah ini. |
|
Deskripsi singkat, satu baris dari perintah ini tujuan yang akan ditampilkan oleh sistem bantuan. |
|
Menetapkan deskripsi yang panjang untuk digunakan dalam daftar bantuan yang lebih panjang. Akan ditambahkan ke deskripsi singkat. |
|
Menambahkan perintah anak ke perintah ini dengan alias (Lihat perintah anak). |
|
Menetapkan perintah anak dari perintah ini dengan mereka alias (Lihat :doc: perintah anak). |
|
Mendefinisikan bagaimana argumen akan diuraikan. Secara default, parser membagi masukan perintah dengan spasi. Kutipan dihitung sebagai argumen tunggal. Contoh: |
|
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
Terkadang hal ini perlu agar pemain saja yang bisa mengeksekusi sebuah perintah (misalnya perintah``/bunuh diri``).
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
Metode execute()
mungkin memberikan CommandException, sinyal bahwa sebuah galat terjadi ketika mencoba mengeksekusi perintahnya. Jika semacam pengecualian diberikan, pesannya akan ditampilkan ke sumber perintah, yang diformat sebagai suatu galat. Juga, pesan penggunaan perintah-perintah akan ditampilkan. Sebuah ArgumentParseException, sebuah subtipe dari CommandException
secara otomatis diberikan jika argumen perintah tidak dapat diuraikan.