หน้าจอไดอะล็อก: สร้างเมนูจริงโดยไม่ต้องใช้ม็อด
ไดอะล็อกจากดาต้าแพ็กช่วยให้คุณมีหน้าต่างจริงพร้อมช่องกรอกข้อมูลและปุ่มกด นี่คือรูปแบบ JSON วิธีที่ปุ่มรันคำสั่ง และวิธีเทียบกับการแฮ็กเมนูด้วยหนังสือ
เมนูบนเซิร์ฟเวอร์แต่ก่อนเขียนด้วยหนังสือที่มีหน้าคลิกได้ หรือใช้ GUI หีบที่ปลอมขึ้นมาจากกรอบรูป ไดอะล็อกเข้ามาแทนที่ทั้งสองแบบด้วยหน้าจอจริง ๆ
ไดอะล็อกคืออะไร
ไฟล์ JSON ในดาต้าแพ็กที่อธิบายหน้าต่าง:
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" } }
}
จากนั้น /dialog show @p my_pack:welcome
ประเภทต่าง ๆ
| ประเภท | รูปร่าง |
|---|---|
notice | ข้อความพร้อมปุ่มปิดหนึ่งปุ่ม |
confirmation | ใช่ / ไม่ใช่ แต่ละปุ่มมีแอ็กชันของตัวเอง |
multi_action | ตารางปุ่ม |
server_links | รายการลิงก์ที่มีมาให้ในตัว |
dialog_list | เมนูที่เปิดไดอะล็อกอื่น |
multi_action คือตัวหลักที่ใช้งานจริง — มันคือตัวเลือกคลาส ร้านค้า รายการวาร์ป
ปุ่มรันคำสั่ง
{ "label": { "text": "Warp to spawn" },
"action": { "type": "minecraft:run_command", "command": "/spawn" } }
เหมือนกับ clickEvent ในแชท อันนี้รัน ในนามของผู้เล่นที่คลิก ที่ระดับสิทธิ์ของพวกเขา ปุ่มที่เรียกคำสั่งสำหรับ op เท่านั้นจะไม่ทำอะไรให้ผู้เล่นธรรมดา วิธีแก้แบบมาตรฐานคือใช้ objective trigger: ปุ่มรัน /trigger warp set 1 และฟังก์ชันที่ทำงานทุกติ๊กทำส่วนที่ต้องใช้สิทธิ์พิเศษ
ช่องกรอกข้อมูล
"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" } } ] }
]
ค่าต่าง ๆ ส่งถึงคำสั่งผ่านปุ่มที่มีแอ็กชันเป็น minecraft:dynamic/run_command: template ของมันรับ $(key) สำหรับแต่ละช่องกรอก ปุ่ม run_command ธรรมดาจะไม่ได้รับอะไรเลย
"action": {
"type": "minecraft:dynamic/run_command",
"template": "function my_pack:join {name:'$(name)',class:'$(class)'}"
}
ฟังก์ชันที่มันเรียกก็จะเป็นแมโคร:
$say Welcome $(name), you chose $(class)
คำนำหน้า $ ที่ต้นบรรทัด และ $(key) สำหรับการแทนค่า ที่ทั้งสองฝั่ง นั่นคือกลไกการผูกทั้งหมด และเป็นสิ่งที่ทำให้ไดอะล็อกมีประโยชน์จริง ๆ ไม่ใช่แค่ของประดับ
ทำไมถึงดีกว่าการแฮ็กด้วยหนังสือ
- มันเป็น หน้าจอ จึงหยุดการรับอินพุตแทนที่จะไปนั่งอยู่ในประวัติแชท
- ช่องกรอกข้อมูลมีอยู่จริง หนังสือทำได้แค่ลิงก์
- ไม่ต้องใช้ไอเท็ม ไม่มีอะไรให้ทำหาย ทิ้ง หรือก็อปปี้
- มันปิดได้เรียบร้อยและเลื่อนย้อนกลับไปไม่ได้
สิ่งเดียวที่หนังสือยังทำได้ดีกว่าคือการอ่านยาว ๆ — เนื้อหาไดอะล็อกไม่ใช่ที่เหมาะสำหรับตำนานสามหน้า
สไตล์เวย์พอยต์
เครื่องมือเดียวกันนี้ครอบคลุมเวย์พอยต์บนแถบระบุตำแหน่ง ซึ่งสไตล์ของมันเป็นแอสเซ็ตของรีซอร์สแพ็ก (assets/<namespace>/waypoint_style/) ที่ควบคุมสไปรต์และระยะการจางหายของ ผู้เล่น หรือตำแหน่งที่ติดตามอยู่ ส่วนสีตั้งแยกต่างหากด้วย /waypoint modify <target> color มีประโยชน์สำหรับมาร์กเกอร์ทีมที่บอสบาร์จะรบกวนสายตาเกินไป
สร้างหน้าจอไดอะล็อกพร้อมช่องกรอกข้อมูลและปุ่มกด และปรับแต่งสไตล์เวย์พอยต์ได้ที่ Dialog Input & Waypoint Style Builder