Руководства / Команды и данные
/attribute: базовое значение против модификаторов, и почему ваше значение постоянно сбрасывается
Установка базового значения необратима, а установка модификатора — нет, если только вы не выбрали неверную операцию. Три операции, порядок наложения и ловушка со слотами.
/attribute выглядит как одна команда с тремя подкомандами. На самом деле это две разные системы, которые просто носят одно имя, и их путаница — причина того, что значения постоянно откатываются.
base против modifier
/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 и вам нужен 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, — а не текущий итог, — поэтому два таких модификатора складываются аддитивно, а не дают сложный процент.
Id модификаторов теперь имеют пространство имён
В старых версиях использовался UUID. В современных версиях используется id с пространством имён:
/attribute @s minecraft:attack_damage modifier add my_pack:rage 5 add_value
Добавление второго модификатора с тем же id завершается ошибкой «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 возвращает только базу.
Соберите любую из этих команд — включая форму с компонентом предмета и заданным слотом — в Конструкторе команд для сущностей и боя.