مكوّنات نص /tellraw: click_event وhover_event ولماذا لا تظهر رسالتك
قوس واحد في غير موضعه يعني أن tellraw لا يرسل شيئًا إلى أهدافه. إليك شكل المكوّن، وإجراءات النقر والتحويم التي تعمل فعلًا في الدردشة، وقاعدة التهريب التي يغفل عنها الناس.
/tellraw يأخذ مكوّن نص، وطريقة فشله غير مفيدة: المكوّن المشوّه يُنتج لا رسالة لأي من أهدافه — الخطأ الوحيد يذهب إلى من نفّذ الأمر، أو إلى مخرجات كتلة الأوامر، حيث لا ينظر أحد. كل ما يلي يدور حول ضبط الشكل الصحيح من المرة الأولى.
الأشكال الصالحة الثلاثة
"plain string"
{"text":"one component"}
["joined ",{"text":"list","color":"gold"}]
صيغة القائمة هي التي تُستخدم لأي شيء مثير للاهتمام، لأن كل عنصر يمكنه حمل تنسيقه الخاص. تنسيق العنصر الأول يورَّث للبقية ما لم يتجاوزوه — ولهذا يحصل الناس على رسالة كاملة ذهبية دون قصد. ابدأ القائمة بسلسلة فارغة لتجنّب ذلك:
/tellraw @a ["",{"text":"Warning: ","color":"red"},{"text":"low health"}]
إجراءات النقر
click_event يأخذ إجراءً بالإضافة إلى حقل ذلك الإجراء الخاص — لا يوجد value مشترك:
| الإجراء | الحقل | ملاحظة |
|---|---|---|
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. إعادة التسمية هذه تفسّر الكثير من تلميحات التحويم الميتة المنسوخة من الشروحات.
التهريب هو حيث ينكسر كل شيء
المكوّن بأكمله هو وسيط أمر واحد، لذا يجب أن تنجو علامات الاقتباس الداخلية من محلّل الأوامر. في كتلة الأوامر، اكتبه مباشرة. في ملف دالة، لا حاجة لتهريب الشرطة المائلة العكسية. في كتاب مكتوب /give، الصفحات هي أيضًا مكوّنات نص، مكتوبة بصيغة SNBT — لا تهريب لسلسلة داخل سلسلة منذ 1.21.5، والصفحة التي لا تزال مكتوبة كسلسلة JSON مهرَّبة تظهر الآن كنص حرفي مع علامات اقتباسها.
قاعدة عامة: إذا كنت تُضمّن مكوّنات نص داخل مكوّن عنصر، ابنِه بأداة بدلًا من يدويًا.
المحدِّدات داخل النص
{"selector":"@p","separator":{"text":", "}}
يُحلّ إلى أسماء اللاعبين وقت الإرسال. {"score":{"name":"@s","objective":"Kills"}} يسحب قيمة من لوحة النتائج. كلاهما أفضل من محاولة دمج القيم بنفسك.
مفاتيح الترجمة تعبر اللغات
{"translate":"block.minecraft.crafting_table"}
يُعرض بلغة كل لاعب الخاصة — 제작대 لعميل كوري، و作業台 لعميل ياباني. لخادم متعدد اللغات هذا أفضل بكل تأكيد من كتابة الإنجليزية بشكل ثابت.
ابنِ وعاين أوامر النص والعرض في منشئ أوامر النص والعرض.