متن JSON دستور /tellraw: رویدادهای clickEvent و hoverEvent و چرایی عدم نمایش پیام شما
تنها یک براکت اشتباه باعث میشود tellraw بدون هیچ خطایی اجرا نشود. در اینجا ساختار کامپوننت، اقدامات کلیک و هاور که واقعاً در چت کار میکنند و قانون فراردهی (escape) که نادیده گرفته میشود آورده شده است.
/tellraw takes a JSON text component, and the failure mode is unhelpful: a malformed component produces بدون پیام و بدون خطا. تمام موارد زیر برای درست چیدن ساختار در همان بار اول است.
سه ساختار معتبر
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
حالت فهرست همان ساختاری است که باید برای کارهای جالب استفاده شود، زیرا هر عنصر میتواند قالببندی خاص خود را داشته باشد. قالببندی عنصر اول به بقیه به ارث میرسد مگر اینکه آن را بازنویسی کنند — به همین دلیل است که کل پیام افراد بهطور غیرمنتظرهای طلایی میشود. برای جلوگیری از این موضوع، فهرست را با یک رشته خالی شروع کنید:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
اقدامات کلیک
clickEvent takes an action and a value:
| اقدام | مقدار | یادداشت |
|---|---|---|
run_command | /spawn | اجرا میکند بهعنوان بازیکن، در سطح دسترسی آنها |
suggest_command | /msg Steve | کادر چت را پر میکند، ارسال نمیکند |
open_url | https://… | قبل از باز کردن تأیید میگیرد |
copy_to_clipboard | هر متنی | مناسبترین مورد برای اشتراکگذاری مختصات |
change_page | شماره صفحه | فقط کتابها |
run_command is the one with a trap: it executes with بازیکن کلیککننده دسترسیها، نه دسترسیهای command block. منویی که فراخوانی میکند /gamemode creative does nothing for a normal player.
اقدامات هاور
"hoverEvent":{"action":"show_text","contents":["Click to teleport"]}
show_text, show_item and show_entity. Note contents — older guides use value, which was replaced and now fails silently. That single rename accounts for a lot of dead hover tooltips copied from tutorials.
فراردهی (Escaping) جایی است که کار خراب میشود
کل کامپوننت یک آرگومان فرمان است، بنابراین نقلقولهای داخل آن باید از تجزیهکننده فرمان عبور کنند. در یک command block، آن را مستقیماً تایپ کنید. در یک فایل function، فراردهی با بکاسلش لازم نیست. در یک /give written book, the JSON is a string inside a string and واقعاً به فراردهی نیاز دارد — این همان موردی است که دیوارهایی ناخوانا از موارد فراردهیشده ایجاد میکند \".
یک قاعده کلی: اگر کامپوننتهای متنی را درون کامپوننت آیتم قرار میدهید، به جای نوشتن دستی، آن را با یک ابزار بسازید.
سلکتورها درون متن
{"selector":"@p","separator":{"text":", "}}
در زمان ارسال به نام بازیکنان تبدیل میشود. {"score":{"name":"@s","objective":"Kills"}} pulls a scoreboard value. Both beat trying to concatenate values yourself.
کلیدهای Translate در زبانهای مختلف منتقل میشوند
{"translate":"block.minecraft.crafting_table"}
به زبان خود هر بازیکن نمایش داده میشود — 제작대 برای کلاینت کرهای، 作業台 برای کلاینت ژاپنی. برای یک سرور چندزبانه، این قطعاً بهتر از هاردکد کردن انگلیسی است.
کامپوننت را بهصورت بصری، با اقدامات کلیک و هاور در شکل فعلیشان بسازید، در سازنده فرمانهای متن و نمایش.