Layar dialog: membangun menu sungguhan tanpa mod
Dialog datapack memberi Anda jendela sungguhan dengan input dan tombol. Berikut bentuk JSON-nya, cara tombol menjalankan perintah, dan perbandingannya dengan trik menu buku.
Menu server dulu ditulis sebagai buku dengan halaman yang bisa diklik, atau GUI peti yang dipalsukan dengan item frame. Dialog menggantikan keduanya dengan layar sungguhan.
Apa itu dialog
Sebuah file JSON di dalam datapack yang mendeskripsikan sebuah jendela:
data/<namespace>/dialog/welcome.json
{
"type": "minecraft:notice",
"title": { "text": "Welcome" },
"body": [{ "type": "minecraft:plain_message",
"contents": { "text": "Pick a class to begin." } }],
"action": { "label": { "text": "Continue" } }
}
Lalu /dialog show @p my_pack:welcome.
Jenis-jenisnya
| Jenis | Bentuk |
|---|---|
notice | teks plus satu tombol tutup |
confirmation | ya / tidak, masing-masing dengan aksinya sendiri |
multi_action | kisi tombol |
server_links | daftar tautan bawaan |
dialog_list | menu yang membuka dialog lain |
multi_action adalah andalannya — ia adalah pemilih kelas, toko, daftar warp.
Tombol menjalankan perintah
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
Seperti clickEvent di chat, ini berjalan sebagai Pemain yang mengklik, pada tingkat izinnya. Tombol yang memanggil perintah khusus op tidak melakukan apa pun bagi Pemain biasa. Solusi standarnya adalah objective trigger: tombol menjalankan /trigger warp set 1 dan sebuah fungsi yang berjalan tiap tick melakukan bagian yang butuh hak istimewa.
Input
"inputs": [
{ "type": "minecraft:text", "key": "name", "label": { "text": "Your name" }, "max_length": 16 },
{ "type": "minecraft:boolean", "key": "pvp", "label": { "text": "Enable PvP" } },
{ "type": "minecraft:single_option", "key": "class", "label": { "text": "Class" }, "options": [
{ "id": "mage", "display": { "text": "Mage" } },
{ "id": "rogue", "display": { "text": "Rogue" } } ] }
]
Nilai mencapai perintah melalui tombol yang aksinya adalah minecraft:dynamic/run_command: template-nya mengambil $(key) untuk setiap input. Tombol run_command biasa tidak menerima apa pun.
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
Fungsi yang dipanggilnya kemudian menjadi makro:
$say Welcome $(name), you chose $(class)
Awalan $ pada baris dan $(key) untuk substitusi, di kedua ujungnya. Itulah keseluruhan mekanisme pengikatannya, dan itulah yang membuat dialog benar-benar berguna, bukan sekadar hiasan.
Mengapa ini lebih baik daripada trik buku
- Ini adalah layar, jadi ia menghentikan input alih-alih duduk di riwayat chat.
- Input benar-benar ada. Buku hanya bisa menawarkan tautan.
- Tidak butuh item. Tidak ada yang bisa hilang, terjatuh, atau terduplikasi.
- Ia tertutup dengan rapi dan tidak bisa di-scroll kembali.
Satu hal yang masih lebih baik dilakukan buku adalah bacaan panjang — badan dialog bukan tempat yang baik untuk tiga halaman lore.
Gaya waypoint
Alat yang sama mencakup waypoint locator-bar, yang gayanya adalah aset resource pack (assets/<namespace>/waypoint_style/) yang mengatur sprite dan jarak fade dari Pemain atau posisi yang dilacak; warnanya diatur terpisah dengan /waypoint modify <target> color. Berguna untuk penanda tim di mana bossbar akan terlalu mengganggu.
Bangun layar dialog dengan input dan tombol, serta kustomisasi gaya waypoint, di Dialog Input & Waypoint Style Builder.