/attribute: مقدار پایه در مقابل اصلاحکنندهها، و دلیل بازنشانی مداوم آن
تنظیم مقدار پایه دائمی است و تنظیم اصلاحکننده دائمی نیست — مگر اینکه عملیات اشتباهی را انتخاب کنید. سه عملیات، ترتیب انباشتگی، و تله اسلات.
/attribute looks like one command with three subcommands. It is really two different systems that happen to share a name, and mixing them up is why values keep snapping back.
پایه در مقابل اصلاحکننده
/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یک تنظیم موقت روی آن قرار میدهد. دارای یک id است و میتواند
با آن id حذف شود.
اگر تغییر شما پس از ورود مجدد ناپدید میشود، از یک اصلاحکننده استفاده کردهاید و چیزی آن را پاک کرده است. اگر تغییر شما از بین نمیرود، از base set and need base reset.
سه عملیات، و ترتیب اعمال آنها
| عملیات | عملکرد | اعمالشده |
|---|---|---|
add_value | value + n | اول |
add_multiplied_base | value + (base × n) | دوم |
add_multiplied_total | running total × (1 + n) | آخر |
ترتیب ثابت است و اهمیت دارد. شروع از پایه 20، سپس add_value 10 and add_multiplied_total 0.5:
20 → 30 → 45 not 20 → 30 → 30 + 10 = 40
add_multiplied_base always multiplies the اصلی پایه، نه مجموع جاری — به همین دلیل دو تای آنها به صورت جمعی روی هم انباشته میشوند نه ترکیبی.
شناسههای اصلاحکننده اکنون namespaced هستند
نسخههای قدیمیتر از یک UUID استفاده میکردند. نسخههای مدرن از یک namespaced id:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
افزودن یک اصلاحکننده دوم با همان id جایگزین میکند اولی را به جای انباشته شدن. این روش در نظر گرفته شده برای تازهسازی باف است — نیازی نیست ابتدا آن را حذف کنید.
اصلاحکنندههای تجهیزات روی آیتم قرار دارند، نه روی انتیتی
پاداش آسیب یک شمشیر انچنتشده یک attribute_modifiers item componentاست، و تنها زمانی اعمال میشود که آیتم در اسلات مناسب باشد:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot is required and is the usual mistake. آن را حذف کنید و اصلاحکننده در هر اسلاتی اعمال میشود، بنابراین یک شمشیر در اینونتوری شما در حالی که آنجا قرار دارد به شما باف میدهد.
اسلاتهای معتبر: mainhand, offhand, head, chest, legs, feet, armor, body, any.
خواندن مجدد یک مقدار
/attribute @s minecraft:max_health get
مقدار پایهرا برمیگرداند، نه مجموع نهایی را. برای دریافت کل شامل اصلاحکنندهها، از execute store result on a scoreboard and read that.
هر یک از این موارد را — از جمله فرم item-component با اسلات تنظیمشده — بسازید در سازنده دستورات انتیتی و مبارزه.