/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 початкового базового значення, а не поточного результату — саме тому два з них додаються, а не множаться.
Ідентифікатори модифікаторів тепер мають простори імен
Старі версії використовували UUID. Сучасні версії використовують ідентифікатор із простором імен:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Додавання другого модифікатора з тим самим id замінює перший замість складання. Це передбачений спосіб оновити підсилення — вам не потрібно спочатку видаляти його.
Модифікатори спорядження зберігаються в предметі, а не в сутності
Бонус до шкоди зачарованого меча — це attribute_modifiers компонент предмета, і він застосовується лише тоді, коли предмет у правильному слоті:
/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.
Створюйте будь-що з цього (включно з формою компонента предмета із заданим слотом) у Конструктор команд сутностей і бою.