องค์ประกอบข้อความ /tellraw: click_event, hover_event และทำไมข้อความของคุณไม่แสดงอะไรเลย
วงเล็บผิดเพียงอันเดียวก็ทำให้ tellraw ไม่ส่งอะไรถึงเป้าหมายเลย นี่คือรูปร่างของคอมโพเนนต์ การกระทำคลิกและโฮเวอร์ที่ใช้ได้จริงในแชท และกฎการ escape ที่คนมักมองข้าม
/tellraw รับ text component และรูปแบบความล้มเหลวก็ไม่เป็นมิตรเอาเลย: คอมโพเนนต์ที่ผิดรูปแบบจะ ไม่ส่งข้อความถึงใครที่มันเล็งไว้เลย — ข้อผิดพลาดเดียวจะไปถึงคนที่รันคำสั่ง หรือไปอยู่ในเอาต์พุตของบล็อกคำสั่ง ที่ซึ่งไม่มีใครดูอยู่ ทุกอย่างด้านล่างนี้ว่าด้วยการทำรูปร่างให้ถูกตั้งแต่ครั้งแรก
สามรูปร่างที่ใช้ได้
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
รูปร่างแบบลิสต์คือแบบที่ควรใช้กับอะไรก็ตามที่น่าสนใจ เพราะแต่ละสมาชิกสามารถมีรูปแบบของตัวเองได้ รูปแบบของสมาชิกตัวแรกจะถูกสืบทอดไปยังตัวที่เหลือ เว้นแต่พวกมันจะเขียนทับ — ซึ่งเป็นเหตุผลที่คนมักได้ข้อความทั้งข้อความกลายเป็นสีทองโดยไม่ตั้งใจ เริ่มลิสต์ด้วยสตริงว่างเพื่อเลี่ยงปัญหานี้:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
การกระทำเมื่อคลิก
click_event รับ action บวกกับฟิลด์เฉพาะของ action นั้น — ไม่มี value ที่ใช้ร่วมกัน:
| Action | ฟิลด์ | หมายเหตุ |
|---|---|---|
run_command | command: "/spawn" | รัน ในฐานะผู้เล่น ที่ระดับสิทธิ์ของผู้เล่นคนนั้น |
suggest_command | command: "/msg Steve " | เติมข้อความลงช่องแชท ไม่ส่ง |
open_url | url: "https://…" | ถามยืนยันก่อนเปิด |
copy_to_clipboard | value: "any text" | เป็นมิตรที่สุดสำหรับการแชร์พิกัด |
change_page | page: 2 | ใช้ได้กับหนังสือเท่านั้น |
run_command คืออันที่มีกับดัก: มันทำงานด้วยสิทธิ์ของ ผู้เล่นที่คลิก ไม่ใช่ของบล็อกคำสั่ง เมนูที่เรียก /gamemode creative จะไม่ทำอะไรเลยสำหรับผู้เล่นทั่วไป
การกระทำเมื่อโฮเวอร์
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text, show_item และ show_entity สังเกตชื่อให้ดี — คู่มือเก่า ๆ ใช้ hoverEvent, clickEvent และ contents ซึ่ง 1.21.5 แทนที่ด้วย hover_event, click_event และสำหรับ show_text ก็ใช้ value การเปลี่ยนชื่อนี้ทำให้ทูลทิปโฮเวอร์ที่คัดลอกจากบทเรียนใช้ไม่ได้ไปเยอะ
การ escape คือจุดที่มันพัง
คอมโพเนนต์ทั้งหมดคืออาร์กิวเมนต์เดียวของคำสั่ง ดังนั้นเครื่องหมายคำพูดข้างในต้องรอดผ่านตัวแยกวิเคราะห์คำสั่งให้ได้ ในบล็อกคำสั่ง พิมพ์ตรง ๆ ได้เลย ใน ไฟล์ฟังก์ชัน ไม่จำเป็นต้อง escape ด้วยแบ็กสแลช ในหนังสือเขียนแล้วแบบ /give หน้าแต่ละหน้าก็เป็น text component เช่นกัน เขียนเป็น SNBT — ไม่ต้อง escape สตริงซ้อนสตริงตั้งแต่ 1.21.5 เป็นต้นมา และหน้าที่เขียนเป็นสตริง JSON ที่ escape ไว้จะแสดงเป็นข้อความธรรมดาพร้อมเครื่องหมายคำพูดของมันเอง
กฎง่าย ๆ: ถ้าคุณกำลังซ้อน text component ไว้ใน item component ให้สร้างด้วยเครื่องมือแทนที่จะทำมือ
ตัวเลือกภายในข้อความ
{"selector":"@p","separator":{"text":", "}}
จะแปลงเป็นชื่อผู้เล่นตอนส่ง {"score":{"name":"@s","objective":"Kills"}} ดึงค่าจาก scoreboard ทั้งสองวิธีดีกว่าการพยายามต่อค่าด้วยตัวเอง
คีย์แปลภาษาข้ามภาษาได้
{"translate":"block.minecraft.crafting_table"}
จะแสดงในภาษาของผู้เล่นแต่ละคน — 제작대 สำหรับไคลเอนต์เกาหลี, 作業台 สำหรับไคลเอนต์ญี่ปุ่น สำหรับเซิร์ฟเวอร์หลายภาษานี่ดีกว่าการฮาร์ดโค้ดภาษาอังกฤษอย่างชัดเจน
สร้างและดูตัวอย่างข้อความและคำสั่งแสดงผลได้ที่ Text & Display Command Builder