/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.
Три операции и порядок их применения
| Операция | Что делает | Применяется |
|---|---|---|
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 всегда умножает исходную базу, а не текущую сумму — поэтому две такие операции складываются аддитивно, а не умножаются.
Идентификаторы модификаторов теперь имеют пространства имен
В старых версиях использовался UUID. Современные версии используют идентификатор с пространством имен:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Добавление второго модификатора с тем же идентификатором заменяет первый, а не складывается с ним. Это предполагаемый способ обновления баффа — вам не нужно сначала его удалять.
Модификаторы снаряжения находятся на предмете, а не на сущности
Бонус к урону зачарованного меча — это компонент предмета attribute_modifiers, и он применяется только тогда, когда предмет находится в правильном слоте:
/give @s diamond_sword[attribute_modifiers=[{type:"attack_damage",amount:5,
operation:"add_value",slot:"mainhand",id:"my:bonus"}]]
slot является обязательным и является обычной ошибкой. Опустите его, и модификатор будет применяться в каждом слоте, так что меч в вашем инвентаре будет баффать вас, пока он там лежит.
Допустимые слоты: mainhand, offhand, head, chest, legs, feet, armor, body, any.
Чтение значения обратно
/attribute @s minecraft:max_health get
возвращает базовое значение, а не эффективную сумму. Чтобы получить сумму, включая модификаторы, используйте execute store result на табло и прочитайте его.
Создайте любой из этих вариантов — включая форму компонента предмета с установленным слотом — в Конструкторе команд для сущностей и боя.