Случайные видео
Silent Hill, Black Mesa и макдак [L4D2 Stream]
Запись стрима Left4Dead2 / Dark Wood от 20.04.2018
Пластинки в качестве ключа 1.5+ [Уроки по Minecraft]
Использование обычной пластинки в качестве секретного механического ...
Сортировочная центрифуга 1.5+ [Уроки по Minecraft]
Демонстрация метода создания сортировщика для предметов
Как убрать спам из комментариев Google+ на YouTube
Хотите избавиться от спама и мусора в комментариях на вашем канале? Спросите ...
Блиц-новости 18 августа 2014 [Minecraft Special]
Настала пора просыпаться! Небольшой и довольно сумбурный выпуск блиц-новостей ...
Дополнительные атрибуты для игрока и мобов
Cтатья целиком
2
1
Атрибуты это система усилений и ослаблений, которая стала доступна в Minecraft начиная с версии 13w16a. По сути это скрытые свойства для игроков и некоторых мобов, позволяющие изменять их основные характеристики. Атрибуты так же имеют модификаторы, которые позволяют управлять силой их эффекта. Если применить атрибуты к предмету, то они тоже будут влиять на параметры если этот предмет одет или если его держат в руках. При этом атрибуты и модификаторы можно создавать напрямую в игре без использования сторонних программ редактирования NBT информации.
Каждый атрибут контролирует одно из свойств существа, на которого он применен. Атрибуты описываются их именем (Name), а так же всегда имеют базовое значение (Base). Помимо этого атрибуты могут иметь любое количество дополнительных модификаторов. У каждого атрибута так же существует значение по умолчанию, которое игра применяет к создаваемому существу если атрибут не задан явно, и минимум с максимумом, причем все это жестко задано в коде игры. Атрибуты будут изменяться всеми модификаторами, но если полученное значение выйдет за пределы максимума или минимума, то оно будет исправлено до ближайшего допустимого. Максимум и минимум всегда считается включая крайние значения, то есть, например, от 0 до 2048 включительно.
С общими принципами разобрались, теперь давайте посмотрим какие возможные значения у нас существуют. Начнем непосредственно с атрибутов. 
Атрибут Описание
generic.maxHealth Максимальный уровень здоровья для игрока или моба, то есть уровень здоровья, до которого существо может быть излечено в обычных условиях. Измеряется в половинках сердца (1).
Базовое значение: 20
Минимум: 0
Максимум: 2147483647
generic.followRange Максимальное расстояние в блоках с которого моб будет отслеживать игрока или следовать за другим мобом. Если цель выходит за пределы этого расстояния, то моб теряет её и прекращает преследование. Для большинства мобов значением по умолчанию будет 16, в то время как у зомби стандартное расстояние преследования равно 40.
Базовое значение: 32
Минимум: 0
Максимум: 2048
generic.knockbackResistance Сопротивление эффекту отбрасывания от атак, взрывов и попадания снарядов. Если значение данного атрибута равно 1.0, то это дает полный иммунитет к отбрасыванию.
Базовое значение: 0.0
Минимум: 0.0
Максимум: 1.0
generic.movementSpeed Скорость перемещения в неизвестных единицах. У стандартного моба скорость в 43 раза превышает значение этого атрибута если измерять её в блоках за секунду. При этом не следует забывать, что на скорость могут влиять различные эффекты состояния и окружающая обстановка.
Базовое значение: 0.7
Минимум: 0.0
Максимум:
generic.attackDamage Стандартное повреждение, наносимое существом в рукопашной атаке. Измеряется в половинках сердца (1).
Базовое значение: 1
Минимум: 0
Максимум:
horse.jumpStrength Высота прыжка лошади в неизвестных единицах. Применяется только к лошадям.
Базовое значение: 0.7
Минимум: 0.0
Максимум: 2.0
zombie.spawnReinforcements Шанс того, что атакованный зомби призовет еще одного зомби себе на помощь. Применяется только к зомби.
Базовое значение: 0.0
Минимум: 0.0
Максимум: 1.0
Следует отметить, что если игра встречает незнакомый атрибут, то по умолчанию его значение приравнивается к 0.0, минимальное значение так же определяется как 0.0, а максимальное считается не ограниченным.
Итак, с атрибутами мы более-менее разобрались, настало время присмотреться к модификаторам. Их несколько больше и с ними все сложнее. Если атрибуты напрямую задают конкретные значения для отдельных параметров, то модификаторы изменяют эти параметры по определенным формулам, увеличивая либо уменьшая их. При этом получившиеся значения в любом случае не могут выйти за пределы установленного в игре минимума и максимума. Как и у атрибутов, у модификаторов есть имя, однако оно не определяет поведение самого модификатора. Вместо этого поведение определяется выполняемой операцией. У модификаторов также существует их значение и их UUID.
Самым главным при работе с модификаторами будет операция, которая выполняется с указанными значениями. По сути именно она показывает как именно изменится атрибут, на который мы ссылаемся. Операций существует всего три, названия нумеруются числами от 0 до 2 и, по сути, являются операциями "+/- количество", "+/- количество процентов (сложение)" и "+/- количество процентов (умножение)". С математической точки зрения работают они следующим образом: 
Операция 0: Просуммировать X и значение.
Операция 1: Просуммировать Y и X*значение.
Операция 2: Просуммировать Y и Y*значение.
Данные операции всегда выполняются в порядке 0 » 1 » 2, а под X и Y подразумевается следующее. В начале расчетов переменной X присваивается текущее значение атрибута, а затем выполняются все операции типа 0. После этого полученный результат присваивается переменной Y и выполняются сначала операции типа 1, а затем операции типа 2.
Как уже было сказано выше, имя модификатора не влияет на его поведение, учитывается только операция и значение. Что касается системы UUID (уникальных идентификаторов), то здесь все несколько сложнее. Лично я не вдавался глубоко в тему, но грубо говоря все выглядит так. Определенные операции жестко вшиты в игру под четко заданными UUID. Соответственно когда мы выполняем добавление своего модификатора в игру, то этот идентификатор создается "на лету" и каждый раз меняется. Соответственно можно использовать в командах не UUID, как нам следует делать, если мы используем ванильные модификаторы, а нужно использовать конструкцию типа UUIDLeast:..., UUIDMost:... которая задаст базовые параметры идентификаторов для нашего нового модификатора. Объясняя на пальцах - если мы повторяем уже существующий в игре эффект, то можем сослаться на его UUID (который можно найти, например, на Wiki), а если делаем что-то свое, то просто разрешаем создать новый в определенном диапазоне.
Думается мне, что это все еще достаточно сложно понять с первого раза, поэтому систему модификаторов вам придется изучать методом проб и ошибок. Ну и в качестве неплохого старта для вас я приведу пример того, как в Minecraft создать алмазную мотыгу с уникальными свойствами. Команда для ее выдачи игроку будет выглядеть приблизительно следующим образом:
/give @p 293 1 0 {display:{Name:"Hoe of Destruction",Lore:["Legendary weapon"]},AttributeModifiers:[{AttributeName:"generic.attackDamage",Name:"generic.attackDamage",Amount:0.64,Operation:1,UUIDMost:1,UUIDLeast:10000000}]}
В таком виде строчка слишком сложна для вашего восприятия? Ну что же, давайте попытаемся разложить все по полочкам и разбить команду на отдельные блоки. Если вы еще вдруг не в курсе, то фигурные скобки определяют границы блоков данных, а квадратные скобки - массивы. Итак, вот что у нас получится:
/give @p 293 1 0 
​{
 display:
 {
  Name:"Hoe of Destruction",
  Lore:["Legendary weapon"]
 },
 AttributeModifiers:
 [
  {
  AttributeName:"generic.attackDamage",
  Name:"generic.attackDamage",
  Amount:0.64,
  Operation:1,
  UUIDMost:1,
  UUIDLeast:10000000
  }
 ]
}
Так стало намного нагляднее, верно? Однако при создании команд для игры их все равно придется вытянуть в строчку и убрать лишние пробелы. Посмотрим, что делает наша команда из примера. Ближайшему игроку (@p) при помощи команды give выдается алмазная мотыга (293) в количестве одной штуки (1), причем дополнительная информация для мотыги равна нулю (0), так как у мотыги нет вариантов в пределах одного ID. Далее первым делом мы вставляем блок display с параметрами Name и Lore, которые переименовывают нашу мотыгу в Мотыгу Разрушения, в строчке дополнительных параметров указывая, что это легендарное оружие. Эта часть нам не очень-то важна в рамках нашей сегодняшней задачи, но лучше все сразу делать хорошо. Теперь посмотрим непосредственно на нашу часть, которая создает модификатор. Чтобы не путаться, мы для изменения параметра generic.attackDamage (сила атаки) задаем такое же имя (которое, как вы помните, может быть любым). Далее мы указываем значение Amount как 0.64 и Operation устанавливаем в 1. Вспоминая то, о чем шла речь выше, станет понятным, что у нас операция добавления процентов, соответственно данная запись будет гласить "добавить 64% к урону". Ну и, наконец, мы указываем широкий диапазон UUID чтобы игра сама вставила наш новый модифицированный предмет куда ей будет удобнее.
Вы можете задаться очевидным вопросом можно ли использовать несколько модификаторов в пределах одного предмета и ответом будет - разумеется. Если вы повнимательнее присмотритесь к записи, то увидите, что AttributeModifiers представляет из себя массив, поскольку внутренности заключены в квадратные скобки. Соответственно мы можем перечислить в этом массиве несколько наших модификаторов, разделяя серии фигурных скобок запятыми так:
AttributeModifiers:[{параметры модиф.1},{параметры модиф.2},...,{параметры модиф.N}]
Надеюсь, что изучив данную статью и приведенный пример вы теперь и сами сможете окончательно разобраться с данной темой, которая многих в первый раз вводит в ступор. Удачного создания эпических предметов в Minecraft!
Наверх