/tellraw text components: click_event, hover_event và lý do tin nhắn của bạn không hiển thị gì
Chỉ một dấu ngoặc sai là tellraw sẽ không gửi gì đến mục tiêu. Đây là cấu trúc component, các hành động click và hover thực sự hoạt động trong chat, cùng quy tắc thoát ký tự mà nhiều người bỏ sót.
/tellraw nhận một text component, và kiểu lỗi này chẳng hề hữu ích: một component sai định dạng sẽ không gửi tin nhắn nào cho bất kỳ ai mà nó nhắm tới — lỗi duy nhất chỉ hiện cho người chạy lệnh, hoặc chui vào output của khối lệnh, nơi chẳng ai nhìn đến. Toàn bộ phần dưới đây là về việc làm sao cho đúng cấu trúc ngay từ lần đầu.
Ba dạng hợp lệ
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
Dạng danh sách là dạng nên dùng cho mọi thứ thú vị, vì mỗi phần tử có thể mang định dạng riêng. Định dạng của phần tử đầu tiên sẽ được các phần tử còn lại kế thừa trừ khi chúng ghi đè — đó là lý do người ta bỗng thấy cả tin nhắn vàng óng ngoài ý muốn. Hãy bắt đầu danh sách bằng một chuỗi rỗng để tránh chuyện đó:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
Hành động click
click_event nhận một hành động cùng trường riêng của hành động đó — không có value dùng chung:
| Hành động | Trường | Ghi chú |
|---|---|---|
run_command | command: "/spawn" | Chạy dưới danh nghĩa người chơi, theo cấp quyền của họ |
suggest_command | command: "/msg Steve " | Điền vào ô chat, không gửi đi |
open_url | url: "https://…" | Hỏi xác nhận trước khi mở |
copy_to_clipboard | value: "any text" | Cái thân thiện nhất để chia sẻ tọa độ |
change_page | page: 2 | Chỉ dùng cho sách |
run_command là cái có bẫy: nó thực thi với quyền của người chơi đã click, chứ không phải của khối lệnh. Một menu gọi /gamemode creative sẽ chẳng làm gì với người chơi thường.
Hành động hover
"hover_event":{"action":"show_text","value":["Click to teleport"]}
show_text, show_item và show_entity. Để ý tên gọi — các hướng dẫn cũ dùng hoverEvent, clickEvent và contents, nhưng 1.21.5 đã thay bằng hover_event, click_event và, đối với show_text, là value. Việc đổi tên đó giải thích cho rất nhiều tooltip hover chết cứng được copy từ các bài hướng dẫn.
Thoát ký tự mới là chỗ vỡ
Toàn bộ component là một đối số của lệnh, nên dấu ngoặc kép bên trong phải sống sót qua bộ phân tích lệnh. Trong khối lệnh, cứ gõ trực tiếp. Trong tệp hàm, không cần thoát bằng dấu gạch chéo ngược. Trong một Sách được viết dạng /give, các trang cũng là text component, được viết dưới dạng SNBT — từ 1.21.5 không còn phải thoát chuỗi lồng trong chuỗi nữa, và một trang vẫn viết dưới dạng chuỗi JSON đã thoát giờ sẽ hiện ra thành văn bản thô kèm cả dấu ngoặc kép.
Quy tắc chung: nếu bạn đang lồng text component vào trong một item component, hãy dựng bằng công cụ thay vì làm thủ công.
Selector bên trong văn bản
{"selector":"@p","separator":{"text":", "}}
sẽ được phân giải thành tên người chơi vào lúc gửi. {"score":{"name":"@s","objective":"Kills"}} lấy giá trị bảng điểm. Cả hai đều hơn hẳn việc tự nối giá trị bằng tay.
Khóa dịch đi khắp các ngôn ngữ
{"translate":"block.minecraft.crafting_table"}
hiển thị theo ngôn ngữ riêng của từng người chơi — 제작대 với client tiếng Hàn, 作業台 với client tiếng Nhật. Với một server đa ngôn ngữ, cách này tốt hơn hẳn việc gắn cứng tiếng Anh.
Hãy dựng và xem trước các lệnh văn bản và hiển thị trong Text & Display Command Builder.