Rehberler / Komutlar ve Veriler
Diyalog ekranları: mod olmadan gerçek menüler oluşturmak
Veri paketi diyalogları size girdiler ve düğmeler içeren düzgün bir pencere sunar. İşte JSON yapısı, bir düğmenin komutu nasıl çalıştırdığı ve kitap menüsü hilesiyle karşılaştırması.
Sunucu menüleri eskiden tıklanabilir sayfaları olan yazılı kitaplar ya da eşya çerçeveleriyle taklit edilen bir Sandık arayüzüyle yapılırdı. Diyaloglar her ikisinin yerini gerçek bir ekranla doldurdu.
Diyalog nedir
Bir veri paketinde pencereyi tanımlayan bir JSON dosyası:
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" } }
}
Ardından /dialog show @p my_pack:welcome.
Türler
| Tür | Biçim |
|---|---|
notice | metin ve tek bir kapatma düğmesi |
confirmation | evet / hayır, her biri kendi eylemiyle |
multi_action | düğmelerden oluşan bir ızgara |
server_links | yerleşik bağlantı listesi |
dialog_list | başka diyaloglar açan bir menü |
multi_action işin belkemiğidir — sınıf seçici, mağaza, ışınlanma listesi odur.
Düğmeler komut çalıştırır
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
Sohbetteki clickEvent gibi bu da tıklayan Oyuncu olarak, onun izin seviyesinde çalışır. Yalnızca operatörlere açık bir komutu çağıran düğme, normal bir Oyuncu için hiçbir şey yapmaz. Standart çözüm bir trigger hedefidir: düğme /trigger warp set 1 çalıştırır ve her tikte çalışan bir fonksiyon ayrıcalıklı kısmı halleder.
Girdiler
"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" } } ] }
]
Değerler bir komuta, eylemi minecraft:dynamic/run_command olan bir düğme üzerinden ulaşır: bu düğmenin template kısmı her girdi için $(key) alır. Düz bir run_command düğmesi hiçbir şey almaz.
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
Çağırdığı fonksiyon da bir makro olur:
$say Welcome $(name), you chose $(class)
Satırdaki $ ön eki ve değiştirme için $(key), her iki uçta da. Bağlama mekanizmasının tamamı budur ve diyalogları süs olmaktan çıkarıp gerçekten kullanışlı yapan da budur.
Bu neden kitap hilesinden iyi
- Bir ekrandır, yani sohbet geçmişinde durmak yerine girdiyi duraklatır.
- Girdiler gerçekten var. Bir kitap yalnızca bağlantı sunabiliyordu.
- Eşya gerekmez. Kaybedilecek, düşürülecek ya da çoğaltılacak bir şey yok.
- Temiz kapanır ve geri kaydırılarak ona dönülemez.
Kitapların hâlâ daha iyi yaptığı tek şey uzun metin okumak — bir diyalog gövdesi üç sayfalık lore için iyi bir yer değildir.
İşaret noktası stilleri
Aynı araç, konum çubuğu işaret noktalarını da kapsar; stilleri, izlenen bir Oyuncunun ya da konumun sprite'larını ve solma mesafelerini denetleyen kaynak paketi varlıklarıdır (assets/<namespace>/waypoint_style/); renk ayrıca /waypoint modify <target> color ile ayarlanır. Bir bossbar'ın fazla müdahaleci olacağı takım işaretleri için kullanışlıdır.
Girdiler ve düğmeler içeren diyalog ekranları oluşturun, işaret noktası stillerini özelleştirin: Dialog Input & Waypoint Style Builder.