/attribute: القيمة الأساسية مقابل المعدِّلات، ولماذا تعود قيمتك للتصفير باستمرار
تعيين قيمة أساسية أمر دائم بينما تعيين معدِّل ليس كذلك — إلا إذا اخترت العملية الخاطئة. العمليات الثلاث، وترتيب التكديس، وفخ الخانة.
يبدو /attribute وكأنه أمر واحد بثلاث أوامر فرعية. لكنه في الحقيقة نظامان مختلفان يتصادف أنهما يحملان الاسم نفسه، والخلط بينهما هو سبب ارتداد القيم باستمرار.
القيمة الأساسية مقابل المعدِّل
/attribute @s minecraft:max_health base set 40
/attribute @s minecraft:max_health modifier add my_buff 20 add_value
base setيعيد كتابة قيمة الكيان نفسه. وهو يدوم عبر عمليات إعادة التحميل ولا يزيله أي شيء سوىbase setآخر.modifier addيضيف تعديلاً مسمّى فوق القيمة. ويُحفظ مع الكيان تماماً مثل القيمة الأساسية، وله معرّف، ويمكن إزالته بذلك المعرّف.
إذا لم يختفِ تغييرك، فإما أنك استخدمت base set وتحتاج إلى base reset، أو أضفت معدِّلاً يحتاج إلى modifier remove <id>.
العمليات الثلاث، وترتيب تطبيقها
| العملية | ما تفعله | تُطبَّق |
|---|---|---|
add_value | القيمة + n | أولاً |
add_multiplied_base | القيمة + (الأساس × n) | ثانياً |
add_multiplied_total | المجموع الجاري × (1 + n) | أخيراً |
الترتيب ثابت ومهم. بدءاً من الأساس 20، ثم add_value 10 وadd_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base يضرب الأساس بعد إضافة معدِّلات add_value — وليس المجموع الجاري — ولهذا يتكدّس اثنان منهما جمعياً بدلاً من أن يتراكبا ضربياً.
معرّفات المعدِّلات أصبحت ذات نطاق أسماء الآن
الإصدارات الأقدم استخدمت UUID. أما الإصدارات الحديثة فتستخدم معرّفاً ذا نطاق أسماء:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
إضافة معدِّل ثانٍ بالمعرّف نفسه تفشل برسالة "Modifier … is already present" بدلاً من أن تتكدّس أو تستبدله. لتجديد تأثير مؤقت، أزله أولاً باستخدام modifier remove.
معدِّلات العتاد تقيم على العنصر، لا على الكيان
مكافأة ضرر السيف هي مكوّن عنصر attribute_modifiers، ولا تُطبَّق إلا عندما يكون العنصر في الخانة الصحيحة:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
إغفال slot هو الخطأ المعتاد. فهو يتخذ any كقيمة افتراضية، لذا يُطبَّق المعدِّل في كل خانة عتاد — فيمنحك السيف مكافأة من يدك الثانوية، أو من خانة درع، وليس من يدك الرئيسية فقط.
الخانات الصالحة: mainhand، offhand، hand، head، chest، legs، feet، armor، body، saddle، any.
قراءة القيمة مرة أخرى
/attribute @s minecraft:max_health get
يُرجع المجموع الفعلي، بما في ذلك المعدِّلات. أما /attribute @s minecraft:max_health base get فيُرجع القيمة الأساسية فقط.
أنشئ أيّاً من هذه — بما في ذلك صيغة مكوّن العنصر مع تعيين الخانة — في Entity & Combat Command Builder.