Перейти к основному содержимому

Создание боссов

webapp_banner.jpg

Создание пользовательских боссов

Перед началом

Куда помещаются файлы боссов?

Файлы боссов помещаются в папку конфигурации ~/plugins/EliteMobs/custombosses.

Можно создавать подпапки, например ~/plugins/EliteMobs/custombosses/mybosses. Это рекомендуется для поддержания порядка.

Один файл описывает одного босса, однако одного и того же босса можно призывать несколько раз и даже задать несколько точек появления для одного файла босса.

Для быстрого и простого создания пользовательских боссов и не только можно воспользоваться веб-приложением.

Минимально возможная конфигурация

Минимально возможный файл конфигурации пользовательского босса выглядит так:

Обратите внимание: это просто пустой файл. Он всё равно создаст пользовательского босса-зомби с пользовательским именем, поскольку таковы значения по умолчанию. Всё на этой странице необязательно!

Пример босса

Давайте посмотрим на пример того, как выглядит файл босса.

Пример
isEnabled: true
entityType: ZOMBIE
name: '&eTest boss'
level: dynamic
timeout: 10
isPersistent: false
healthMultiplier: 2.0
damageMultiplier: 0.5
helmet: GOLDEN_HELMET
chestplate: IRON_CHESTPLATE
leggings: LEATHER_LEGGINGS
boots: CHAINMAIL_BOOTS
mainHand: GOLDEN_AXE
offHand: SHIELD
isBaby: false
powers:
- invulnerability_knockback.lua
spawnMessage: A test boss has been spawned!
deathMessage: A test boss has been slain by $players!
escapeMessage: A test boss entity has escaped!
locationMessage: 'Test entity: $location'
uniqueLootList:
- magmaguys_toothpick.yml:1
dropsEliteMobsLoot: true
dropsVanillaLoot: true
trails:
- BARRIER
onDamageMessages:
- "I've hit you!"
onDamagedMessages:
- "I've been hit!"

Основные настройки

isEnabled

Определяет, включён ли босс.

КлючЗначенияПо умолчанию
isEnabledtrue / falsetrue
Пример
isEnabled: true

entityType

Задаёт тип сущности босса.

КлючЗначенияПо умолчанию
entityTypeВыберите отсюда.
Значение также должно присутствовать в папке ~plugins/EliteMobs/mobproperties.
ZOMBIE
Магмовые кубы и слизни

Поскольку эти типы сущностей не атакуют игроков напрямую, а наносят урон при контакте, это может приводить к большим всплескам урона за короткое время. Поэтому мы, как правило, не рекомендуем часто использовать их в качестве элитных мобов. Однако, если вы всё же хотите их использовать, мы советуем задать damageMultiplier примерно равным 0.1.

Мы также рекомендуем использовать следующий EliteScript, чтобы магмовые кубы и слизни не удерживали игроков в непрерывном оглушении:

eliteScript:
NerfDamage:
Events:
- ZoneEnterEvent
- ZoneLeaveEvent
Zone:
shape: SPHERE
radius: 1
Target:
targetType: SELF
Actions:
- action: SET_MOB_AI
Target:
targetType: SELF
bValue: false
duration: 10
Пример
entityType: ZOMBIE

name

Задаёт имя босса.

КлючЗначенияПо умолчанию
nameString, принимает color codes и перечисленные ниже плейсхолдеры"Default Name"
Пример
name: "$normalLevel &cCool boss!"

create_boss_name_pic_no_level.jpg

Если вы хотите включить уровень босса в поле имени, просто используйте один из следующих плейсхолдеров.

ПлейсхолдерОписаниеПримерРезультат (для босса 10 уровня)
$levelЗаменяется на уровень"$level Cool boss"10 Cool boss
$normalLevelЗаменяется на уровень, оформленный для обычных мобов"$normalLevel Cool boss"[10] Cool boss
$minibossLevelЗаменяется на уровень, оформленный для минибоссов"$minibossLevel Cool boss"〖10〗 Cool boss
$bossLevelЗаменяется на уровень, оформленный для боссов"$bossLevel Cool boss"『10』 Cool boss
$reinforcementLevelЗаменяется на уровень, оформленный для подкреплений"$reinforcementLevel Cool boss"〔10〕 Cool Boss
$eventBossLevelЗаменяется на уровень, оформленный для боссов событий"$eventBossLevel Cool boss"「10」 Cool boss
Пример
name: "$normalLevel &cCool boss!"

create_boss_name_pic.jpg


level

Задаёт уровень босса.

КлючЗначенияПо умолчанию
levelПоложительные Integer числа или dynamicdynamic

dynamic используется для событий и подстраивается под уровень находящихся рядом игроков в момент появления босса. Не рекомендуется для региональных боссов.

Пример
level: 1

scale

Задаёт масштаб (размер) босса.

КлючЗначенияПо умолчанию
scaleMultiplier1.0

При масштабировании 1.0 соответствует размеру по умолчанию. Чтобы сделать сущность крупнее, увеличьте значение (например, 1.2). Чтобы сделать сущность меньше, уменьшите значение (например, 0.8).

Пример
scale: 1.2

bossType

Задаёт тип босса. Используется для отображения полос здоровья босса и других возможностей.

КлючЗначенияПо умолчанию
bossTypeNORMAL, MINIBOSS, BOSS, REINFORCEMENT, EVENTNORMAL

При значениях MINIBOSS, BOSS, EVENT плагин будет отображать полосы здоровья, когда игроки сражаются с боссами этих типов.

Примечание: REINFORCEMENT обычно назначается автоматически призванным мобам-подкреплениям, но при необходимости может быть задан вручную.

Пример
bossType: MINIBOSS

silent

Определяет, должны ли звуки босса быть отключены.

КлючЗначенияПо умолчанию
silentBooleanfalse

При значении true эта опция отключает все стандартные звуки мобов Minecraft, из-за чего босс вообще не издаёт звуков.

Пример
silent: true

healthMultiplier

Задаёт здоровье босса. Значение этой настройки также определяет тип полосы здоровья, отображаемой во время боя. Более высокие значения показывают полосу здоровья минибосса или полноценного босса.

КлючЗначенияПо умолчанию
healthMultiplierMultiplier1.0
Boss health is hard-capped, boss damage is not

Итоговое здоровье равно baseHealth × healthMultiplier, и это произведение ограничивается серверным значением settings.attribute.maxHealth.max из spigot.yml. EliteMobs при запуске поднимает это значение до 2048, если оно ниже, но никогда не поднимает выше, поэтому на сервере с настройками по умолчанию 2048 — фактический потолок.

Базовое здоровье подчиняется формуле 2.1875 × 2^(level / 5), то есть удваивается каждые 5 уровней. В сочетании с этим ограничением у каждого healthMultiplier есть уровень, после которого босс полностью перестаёт получать здоровье, тогда как его урон продолжает расти:

healthMultiplierЗдоровье перестаёт расти на уровне
1.050
2.045
5.038
7.036
10.033
20.028
40.023

Выше этого уровня босс становится всё более хрупким относительно собственного урона, чем сильнее вы его задираете: игрок убивает его за то же число ударов, но умирает быстрее. Когда срабатывает ограничение, EliteMobs выводит в лог предупреждение с именем босса, его уровнем и множителем — следите за консолью при настройке высокоуровневых боссов.

Если вам действительно нужно больше 2048 HP, поднимите settings.attribute.maxHealth.max в spigot.yml самостоятельно; ограничение читает актуальное значение сервера, а не жёстко заданную константу.

Пример
healthMultiplier: 1.5

damageMultiplier

Задаёт множитель урона босса.

КлючЗначенияПо умолчанию
damageMultiplierMultiplier1.0
Пример
damageMultiplier: 1.5

isBaby

Определяет, использует ли босс детёныша (baby-вариант) моба. Применимо только к мобам, у которых есть baby-вариант. Если вы хотите замаскировать босса, но при этом сохранить его детёнышем и под маскировкой (убедитесь, что сущность маскировки тоже поддерживает baby-вариант), вы можете использовать эту настройку:

disguise: HOGLIN:baby
КлючЗначенияПо умолчанию
isBabytrue / falsefalse
Пример
isBaby: true

helmet/chestplate/leggings/boots/mainhand/offhand

Задаёт броню босса. Не все модели Minecraft способны отображать броню. Броня босса носит чисто косметический характер и не влияет на геймплей.

КлючЗначенияПо умолчанию
helmetMaterial, UUIDнет
chestplateMaterialнет
leggingsMaterialнет
bootsMaterialнет
mainHandMaterialнет
offHandMaterialнет

Примечание: Это поле также позволяет задавать пользовательские модели предметов. Чтобы указать ID пользовательской модели, добавьте ID после типа материала в следующем формате: ITEM_MATERIAL:ID. Пример: DIAMOND_SWORD:1 заставит босса носить алмазный меч с пользовательской моделью №1 из вашего ресурспака.

Примечание 2: Это поле также позволяет задавать пользовательские цвета кожаной брони в формате ITEM_MATERIAL:CODE, где код — шестнадцатеричное представление цвета. Пример: LEATHER_LEGGINGS:ffa500 создаст оранжевые поножи. Можно использовать hex-коды, просто уберите из них символ #. Hex-коды можно взять здесь.

Примечание 3: Поле helmet также позволяет надевать на мобов головы игроков. Просто получите UUID нужной головы игрока и впишите его в поле helmet. Для этого игрок должен быть онлайн, иначе голова станет обычной головой MineCraft. UUID игроков можно получить здесь.

Пример
helmet: 198c4123-cafc-45df-ba79-02a421eb8ce7
chestplate: DIAMOND_CHESTPLATE:1
leggings: LEATHER_LEGGINGS:ffa500
boots: NETHERITE_BOOTS
mainHand: DIAMOND_SWORD
offHand: SHIELD

create_boss_armor.jpg


powers

Задаёт способности, которыми обладает босс.

КлючЗначенияПо умолчанию
powersСм. список ниженет
Пример
powers:
- hyper_loot.lua
- attack_arrow.lua
- mycoolpower.lua

Примечание: Вы можете заглянуть на эту страницу, если хотите увидеть список готовых способностей, которые можно использовать.

Примечание: Способности могут быть файлами .yml (EliteScript) или .lua (Lua-скрипты). Оба типа поддерживаются и могут свободно смешиваться в списке powers. Почти все готовые способности теперь имеют формат .lua.

Old .yml power names still work

Если существует способность .lua с тем же базовым именем, EliteMobs автоматически перенаправит запрос .yml на неё. Конфигурации боссов, написанные до перехода на Lua, продолжают работать без правок — attack_arrow.yml прозрачно загружает attack_arrow.lua. В новых конфигурациях следует указывать файл .lua напрямую.


Промежуточная конфигурация — призыв подкреплений

Подкрепления также относятся к категории powers и используют следующие настройки:

Примечание: Подкрепления настраиваются внутри секции powers файла конфигурации босса, а не в отдельной секции.

Настройки подкреплений
КлючОписаниеЗначенияПо умолчанию
summonTypeЧто вызывает появление подкрепления. Обязательно.См. список ниженет
filenameИмя файла босса, призываемого в качестве подкрепления. Обязательно.Stringнет
chanceШанс появления подкрепления. Необязательно.Double1.0
amountЗадаёт количество призываемых подкреплений. Необязательно.Integer1
inheritAggroЗаставляет подкрепление унаследовать агро от босса. Необязательно.true / falsefalse
spawnNearbyЗаставляет подкрепления появляться в радиусе 30 блоков от босса. Необязательно.true / falsefalse
inheritLevelЗаставляет подкрепление унаследовать уровень босса. Необязательноtrue / falsefalse
customSpawnЗаставляет подкрепление появляться через систему пользовательского появления. Используется только с summonType: GLOBALИмя файла Custom Spawnнет
locationМесто появления. Необязательно.world_name,x,y,z или x,y,z для позиции относительно босса. Для региональных боссов смещение отсчитывается от точки появления. Также можно использовать same_as_boss, чтобы подкрепления появлялись в том же мире, что и босс.нет
lightningRodСпециальная настройка для summonType: ON_COMBAT_ENTER_PLACE_CRYSTAL. Заставляет кристаллы Края призывать вокруг себя молнии. Необязательно.true / falseнет

Типы призыва задают условия появления подкреплений. Ниже приведён список допустимых типов призыва:

Типы призыва
ЗначениеОписание
ONCEПризывает подкрепления только один раз, при первом получении боссом урона.
ON_HITПризывает подкрепления при попадании.
ON_COMBAT_ENTERПризывает подкрепления, когда босс вступает в бой.
ON_DEATHПризывает подкрепления при смерти босса.
GLOBALПризывает по одному подкреплению для каждого игрока онлайн. Требует, чтобы в ключе customSpawn было задано корректное пользовательское появление.
ON_COMBAT_ENTER_PLACE_CRYSTALРазмещает кристаллы Края в качестве подкреплений при вступлении в бой; предназначено только для пользовательских боёв с драконом.

Обратите внимание, что подкрепления также можно призывать через Elite Scripts, поэтому существуют и более гибкие способы призыва подкреплений.

Пример
powers:
- summonType: ON_COMBAT_ENTER
filename: test_boss.yml
chance: 0.5
amount: 5
inheritAggro: true
spawnNearby: true
inheritLevel: true
location: same_as_boss,10,20,30
lightningRod: false

Экспертная конфигурация — создание собственных способностей

Вы можете создавать собственные способности — либо прямо в файле босса, либо в виде нового файла конфигурации в папке powers. Подробнее об этом можно узнать здесь.

Примечание: Вы также можете задавать поведение босса прямо в файле конфигурации босса с помощью поля eliteScript. Полную документацию по использованию Elite Scripts смотрите в руководстве по способностям.

В качестве альтернативы EliteScript способности также можно писать на Lua. Lua-способности размещаются в папке powers с расширением .lua и указываются по имени файла в списке powers. Подробнее смотрите в руководстве Начало работы с Lua.

Ограничение способностей в зависимости от сложности инстанс-подземелья

У инстанс-подземелий могут быть настройки сложности, и можно сделать так, чтобы конкретная способность была включена только для определённых сложностей.

Параметры ограничения способностей
КлючОписаниеЗначенияПо умолчанию
filenameИмя файла способности.Stringнет
difficultyIDНазвание сложности, совпадающее с названием сложности в пакете подземелья.Stringнет

Это применяется только к инстанс-подземельям.

Пример
powers:
- filename: movement_speed.lua
difficultyID:
- myDifficultyName1
- myDifficultyName2
- myDifficultyName3

spawnMessage

Задаёт сообщение, отправляемое при появлении босса. Требует настройки announcementPriority.

КлючЗначенияПо умолчанию
spawnMessageStrings и color codesнет
Пример
announcementPriority: 3
spawnMessage: I rise once more!

create_boss_spawn_message.jpg


deathMessages

Задаёт список сообщений, отправляемых при смерти босса. Требует настройки announcementPriority.

КлючЗначенияПо умолчанию
deathMessagesStrings, color codes и перечисленные ниже плейсхолдерынет
Пример
announcementPriority: 3
deathMessages:
- '&e&l---------------------------------------------'
- '&4The Test Boss has been killed!'
- '&c&l 1st Damager: $damager1name &cwith $damager1damage damage!'
- '&6&l 2nd Damager: $damager2name &6with $damager2damage damage!'
- '&e&l 3rd Damager: $damager3name &ewith $damager3damage damage!'
- '&4Slayers: $players'
- '&e&l---------------------------------------------'

create_boss_death_message.jpg

Сообщения о смерти используют следующие плейсхолдеры:

Плейсхолдеры
ЗначениеОписание
$damager1nameИмя игрока, нанёсшего наибольший урон
$damager2nameИмя игрока, нанёсшего второй по величине урон
$damager3nameИмя игрока, нанёсшего третий по величине урон
$damager1damageВеличина урона игрока с наибольшим уроном
$damager2damageВеличина урона игрока со вторым по величине уроном
$damager3damageВеличина урона игрока с третьим по величине уроном
$playersОтображает список всех, кто наносил урон

deathMessage

Задаёт одно сообщение, отправляемое при смерти босса. Это альтернатива deathMessages для случаев, когда нужно всего одно сообщение о смерти вместо списка. Требует настройки announcementPriority.

КлючЗначенияПо умолчанию
deathMessageString, color codes и те же плейсхолдеры, что и у deathMessagesнет
Пример
announcementPriority: 3
deathMessage: '&4The Test Boss has been killed by $players!'

onKillMessage

Задаёт сообщение, отправляемое, когда босс убивает игрока. Требует настройки announcementPriority.

КлючЗначенияПо умолчанию
onKillMessageStrings и color codesнет

Плейсхолдеры:

ЗначениеОписание
$playerОтображаемое имя убитого игрока
$playerNameНикнейм убитого игрока
Пример
announcementPriority: 3
onKillMessage: I win, you lose!

create_boss_spawn_message.jpg


slimeSize

Задаёт размер босса-слизня, но работает только для слизней и магмовых кубов.

КлючЗначенияПо умолчанию
slimeSizeInteger4
Пример
slimeSize: 5

neutral

Определяет, будет ли босс появляться нейтральным. Применимо только к типам сущностей, которые могут быть нейтральными, например к волкам или железным големам.

КлючЗначенияПо умолчанию
neutralBooleanfalse
Пример
neutral: true

Расширенные настройки

timeout

Задаёт время в минутах, по истечении которого пользовательский босс исчезает.

КлючЗначенияПо умолчанию
timeoutВремя (в минутах), Integer0
Пример
timeout: 20

Заставляет босса скрыться через 20 минут.


isPersistent

Определяет, может ли босс пережить выгрузку чанка. Рекомендуется только для боссов событий из-за возможного влияния на производительность, вызванного постоянной загрузкой чанков и отслеживанием сущностей между перезапусками сервера.

КлючЗначенияПо умолчанию
isPersistenttrue / falsefalse
Пример

Пример:

isPersistent: true

damageModifiers

Задаёт оружие, к которому боссы устойчивы или уязвимы.

КлючЗначенияПо умолчанию
damageModifiersMaterialнет
Пример
damageModifiers:
- material:DIAMOND_SWORD,multiplier:0.8
- material:TRIDENT,multiplier:2.0

В этом примере боссы будут получать от алмазных мечей только 80% урона (то есть на 20% меньше), но от трезубцев — 200% урона (то есть в 2 раза больше).


normalizedCombat

Изменяет урон и максимальное здоровье босса так, чтобы они соответствовали значениям нормализованной сущности в ~/plugins/EliteMobs/mobproperties. Это значение по умолчанию для региональных боссов, чтобы гарантировать плавную кривую сложности.

КлючЗначенияПо умолчанию
normalizedCombattrue / falsefalse
Пример

Пример:

normalizedCombat: true

scaledCombat

Определяет, использует ли босс систему масштабируемого боя. Когда она включена, босс имитирует тот же уровень, что и у сражающегося с ним игрока — урон, масштабирование здоровья и добыча подстраиваются под уровень прогресса игрока, а не под сохранённый уровень босса. Благодаря этому бой ощущается одинаково честным для всех игроков независимо от их прогресса.

Масштабируемый бой в первую очередь предназначен для боссов событий в обычном мире и пользовательских боссов, которые должны быть доступны игрокам любого уровня. Для контента подземелий с фиксированной задуманной сложностью используйте вместо этого normalizedCombat.

Если задано scaledCombat: true, эта настройка имеет приоритет, даже если босс в остальном использовал бы нормализованный бой. Естественно появляющиеся элитные мобы по умолчанию используют масштабируемый бой (управляется параметром useScaledCombatForNaturalElites в MobCombatSettings.yml).

Полное описание работы масштабируемого боя смотрите на странице Система урона.

КлючЗначенияПо умолчанию
scaledCombattrue / falsefalse
Пример
scaledCombat: true

escapeMessage

Задаёт сообщение, которое рассылается игрокам, когда босс скрывается по механике timeout. Требует настроенного announcementPriority.

КлючЗначенияПо умолчанию
escapeMessageStringнет
Пример
announcementPriority: 3
timeout: 60
escapeMessage: "Sayonara!"

create_boss_escape_message.jpg


locationMessage

Задаёт сообщение, отображаемое в полосе босса. Используется для отслеживания как здоровья пользовательского босса, так и его местоположения на сервере. Требует настроенного announcementPriority.

КлючЗначенияПо умолчанию
locationMessageString, Color codes и перечисленные ниже плейсхолдерынет

Плейсхолдеры:

ЗначениеОписание
$distanceЗаменяется на расстояние от игрока до пользовательского босса. Это предпочтительный вариант.
$locationЗаменяется на координаты x y z пользовательского босса
Пример
announcementPriority: 3
locationMessage: "&4Cool boss: At $location only $distance blocks away!"

create_boss_location_message.jpg

Это выведет что-то вроде Cool boss: At 414,55,347 only 10 blocks away!


uniqueLootList

Задаёт пользовательские предметы, выпадающие из босса.

КлючЗначенияПо умолчанию
uniqueLootListListнет

Записи добычи в Custom Loot следуют формату таблиц добычи. Информация об этом здесь! Учтите, что некоторые более старые файлы могут использовать устаревшие таблицы добычи, выглядящие иначе, чем в примере.

Пример
uniqueLootList:
- filename: magmaguys_toothpick.yml
chance: 0.02
- minecraft:type=DIAMOND:amount=1:chance=0.9
- magmaguys_toothpick.yml:0.5:elitemobs.*

dropsEliteMobsLoot

Определяет, будет ли из босса выпадать добыча EliteMobs, за исключением предметов из uniqueLootList. Включает монеты.

КлючЗначенияПо умолчанию
dropsEliteMobsLoottrue / falsetrue

Для мобов-подкреплений рекомендуется устанавливать значение false.

Пример
dropsEliteMobsLoot: true

dropsVanillaLoot

Определяет, будет ли из пользовательского босса выпадать ванильная добыча, обычно связанная с его ванильным типом моба.

КлючЗначенияПо умолчанию
dropsVanillaLoottrue / falsetrue
Пример
dropsVanillaLoot: true

dropsRandomLoot

Определяет, будет ли из пользовательского босса выпадать процедурно сгенерированная добыча EliteMobs. Не включает элитные монеты.

КлючЗначенияПо умолчанию
dropsRandomLoottrue / falsetrue
Пример
dropsRandomLoot: true

dropsSkillXP

Определяет, выпадает ли из босса опыт навыков при убийстве. Опыт навыков используется системой бонусов владения оружием.

КлючЗначенияПо умолчанию
dropsSkillXPtrue / falsetrue

Рекомендуется устанавливать значение false для мобов-подкреплений или боссов, которые не должны влиять на прогресс навыков.

Пример
dropsSkillXP: false

trails

Задаёт след, который босс оставляет за собой при движении.

КлючЗначенияПо умолчанию
trailsЧастицы или материалы предметовнет

В качестве следов босса работают только частицы, не требующие дополнительных данных (то есть все «простые частицы» из списка допустимых частиц). Частицы вроде BLOCK, DUST, ITEM и т. п. молча пропускаются. Названия материалов вместо этого создают анимированный след из предметов.

Пример
trails:
- CLOUD

onDamageMessages

Задаёт сообщение, которое босс отображает, когда попадает по игроку. Это список, и используемое сообщение выбирается из него случайным образом.

КлючЗначенияПо умолчанию
onDamageMessagesListнет
Пример
onDamageMessages:
- "I hit you!"
- "Haha I hit you!"

create_boss_damage_message.jpg


onDamagedMessages

Задаёт сообщение, которое босс отображает, когда получает урон от игрока. Это список, и используемое сообщение выбирается из него случайным образом.

КлючЗначенияПо умолчанию
onDamagedMessagesListнет
Пример
onDamagedMessages:
- "You hit me!"
- "I've been hit!"

create_boss_damaged_message.jpg


mountedEntity

Задаёт сущность, на которую сядет верхом босс.

КлючЗначенияПо умолчанию
mountedEntityИмя файла босса, на которого нужно сесть верхом или тип сущностинет

Не пытайтесь заставить босса сесть верхом на самого себя.

Пример
mountedEntity: wild_wolf.yml

create_boss_mounted.jpg

Примечание: региональные боссы разделяют привязь с сущностью, на которой едут верхом, то есть оба будут возвращены к точке появления, если превысят допустимое привязью расстояние.


announcementPriority

Задаёт уровень приоритета объявлений. Низкие приоритеты означают, что объявления не делаются, а более высокие позволяют объявлять не только в чате, но и в Discord, если он настроен.

КлючЗначенияПо умолчанию
announcementPriorityInteger0

Ниже приведён список того, что делают приоритеты:

ЗначениеОписание
0Значение по умолчанию. Босс будет полностью безмолвным, без каких-либо сообщений-объявлений.
1Боссы могут отправлять сообщения в чат: при появлении, при смерти и при побеге. Здесь также включается отслеживание босса через меню /em, если задан locationMessage.
2Идентично 1 для пользовательских боссов — отдельной ветки кода для приоритета 2 не существует. (А вот пользовательские события обрабатывают 2 иначе; см. Система приоритета объявлений.)
3Вдобавок к возможностям 1 широковещательные сообщения будут дублироваться в Discord, если он настроен. Информация о настройке Discord здесь.

Вот пример босса, которого можно отслеживать и который умеет отправлять сообщения о появлении/смерти/побеге в чат и в Discord:

Пример
announcementPriority: 3

Примечание: Вам потребуется настроить spawnMessage, deathMessage/deathMessages, escapeMessage для объявлений в чате и Discord, а также locationMessage для функции отслеживания, если вы хотите использовать соответствующий уровень приоритета объявлений.

Примечание: Если задано любое содержимое объявлений (spawnMessage, deathMessage, deathMessages, escapeMessage и т. д.), announcementPriority автоматически принимает значение 1, если не задан явно.


followDistance

Задаёт расстояние, на котором боссы получают агро и вступают в бой. Измеряется от самого моба.

КлючЗначенияПо умолчанию
followDistanceInteger0

Примечание 1: У региональных боссов вне боя followDistance вдвое меньше. Это сделано для того, чтобы они не агрились со слишком большого расстояния, что может вызывать раздражающие проблемы в бою из-за ограничений привязи.

Примечание 2: Чем выше followDistance, тем сильнее босс нагружает процессор сервера. Используйте с осторожностью и ответственно!

Пример
followDistance: 30

Задаёт радиус в 30 блоков: если игрок окажется в пределах этого расстояния от босса, тот начнёт преследовать и атаковать игрока.


onDeathCommands

Задаёт список команд, выполняемых при смерти пользовательского босса.

КлючЗначенияПо умолчанию
onDeathCommandsListнет

Список поддерживает следующие плейсхолдеры:

ЗначениеОписание
$levelПлейсхолдер уровня босса.
$nameПлейсхолдер имени босса.
$chance=x$Задаёт команде шанс срабатывания.
$playersЗаставляет команду выполниться один раз для каждого игрока из списка нанёсших урон, подставляя каждый раз никнейм другого игрока из этого списка.
$locationXКоордината X босса в момент смерти.
$locationYКоордината Y босса в момент смерти.
$locationZКоордината Z босса в момент смерти.
$damager1nameНикнейм игрока, нанёсшего наибольший урон
$damager2nameНикнейм игрока, нанёсшего второй по величине урон
$damager3nameНикнейм игрока, нанёсшего третий по величине урон

Посмотрите на пример ниже, чтобы лучше понять, как это работает.

Пример
onDeathCommands:
- "say $players has killed $name! That was level $level!"
- "$chance=0.5$ say What a kill!"

create_boss_mounted.jpg

Если Player1, Player2 и Player3 наносили боссу урон перед тем, как убить его, вывод команды в консоли будет таким:

say Player1 has killed CustomBossName! That was level X!
say Player2 has killed CustomBossName! That was level X!
say Player3 has killed CustomBossName! That was level X!

Кроме того, с вероятностью 50% будет также выведено следующее:

say What a kill!

onSpawnCommands

Задаёт список команд, которые выполнятся при появлении босса.

КлючЗначенияПо умолчанию
onSpawnCommandsListнет

Здесь используются те же плейсхолдеры, что и в onDeathCommands! Плейсхолдеры нанёсших урон не применяются, так как на этот момент их ещё нет.

Пример
onSpawnCommands:
- say Boss has spawned!

create_boss_mounted.jpg


onCombatEnterCommands

Задаёт список команд, которые выполнятся, когда босс вступит в бой.

КлючЗначенияПо умолчанию
onCombatEnterCommandsListнет

Здесь используются те же плейсхолдеры, что и в onDeathCommands! Плейсхолдеры нанёсших урон не применяются, так как на этот момент их ещё нет.

Пример
onCombatEnterCommands:
- say Boss has entered combat!

create_boss_mounted.jpg


onCombatLeaveCommands

Задаёт список команд, выполняемых, когда босс выходит из боя.

КлючЗначенияПо умолчанию
onCombatLeaveCommandsListнет

Здесь используются те же плейсхолдеры, что и в onDeathCommands!

Пример
onCombatLeaveCommands:
- say Boss has left combat!

create_boss_mounted.jpg


disguise

Задаёт маскировку LibsDisguises, если этот плагин включён. Подробнее здесь.

КлючЗначенияПо умолчанию
disguiseStringнет
customDisguiseDataStringнет
Пример маскировки
disguise: CHICKEN

create_boss_mounted.jpg

Пример пользовательской маскировки
disguise: custom:the_beast_sanctuary_beast
customDisguiseData: player the_beast_sanctuary_beast setskin {"id":"44e6d42b-bd8d-4e48-873b-fae7afed36e4","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTY2NjcwNjYwODA1MCwKICAicHJvZmlsZUlkIiA6ICI3MmY5MTdjNWQyNDU0OTk0YjlmYzQ1YjVhM2YyMjIzMCIsCiAgInByb2ZpbGVOYW1lIiA6ICJUaGF0X0d1eV9Jc19NZSIsCiAgInNpZ25hdHVyZVJlcXVpcmVkIiA6IHRydWUsCiAgInRleHR1cmVzIiA6IHsKICAgICJTS0lOIiA6IHsKICAgICAgInVybCIgOiAiaHR0cDovL3RleHR1cmVzLm1pbmVjcmFmdC5uZXQvdGV4dHVyZS82YmYyMTY4NmM1MGQ1ODhmZmExMDZhZDdjNmViZTk1ZWZiMjE2NDU5ODRjZDFjZWYwODkzNDc4NzMzNmI2YTI3IiwKICAgICAgIm1ldGFkYXRhIiA6IHsKICAgICAgICAibW9kZWwiIDogInNsaW0iCiAgICAgIH0KICAgIH0KICB9Cn0=","signature":"jSsQvpUeWVtyqjtnydPadormkrZLVihetiX4dFQb3+BF/1x6wOgsNKRnnwj6J1mfu2im79LYEJbL+fQ9p1SJIW1uZ6hV7vPSAGUopyXGHNibNXorfV/dGjM77S0t86Jls50XWgJAnLn5RdhQcHahDAHHZ8to6K0HW5gvKKSalR5X/myaiV0E5ujJ+LUFWIiuDmtsmyxTX1zsohyYrVMo/4sD0DpBN+as95wO476gLb5fDTDV569QwExlDOt60W8qSzPw6ncYsOKJIiRE3EddspUm3/NrfDiKApUh8UbzVtwu1XlVAxWNgYN3PkqhWKuE4kvORQuoSJzOgSHkiqdXsQOED2HXfOKdfsnpZUwjepIU5A+/mu0gc3mPQPToKSss2bC1nXn//0bOZZSuQRgTS6PkKDHIQ1nClSZQZlJIsiLmaaN2k1tIHTIlDquKN6G1Ta9c3t6G5kugjqRo78ebbt7l3e0Z3BcdOkuO2WbvBjIg5Uiqyf+cYDZedJ+OEOqL/U6VVlsmbw0rd5deHrbnPn9cRzmWGjrXnxIlAszl+0Uqabj/BrkWcbBCwZJEPaV1hHpC4nJX1m5xvKZHB2Bw0AYWaQ3f3tRBbCA/xqwCS0Px1QohzV0nvtiMbjB38ziT1M5DgLtAVLcHPio7THZMxXAi4IjEIMac9ODbh5OxthA="}],"legacy":false}

create_boss_mounted.jpg

Задаёт пользовательскую маскировку из skindex. Загляните на эту страницу, чтобы узнать, как правильно оформить эти данные.


customModel

Задаёт пользовательскую модель, если у вас есть такая модель и плагины FreeMinecraftModels или ModelEngine. Подробнее о создании и использовании пользовательских моделей здесь.

КлючЗначенияПо умолчанию
customModelStringнет
Пример
customModel: your_model

customModelMountPointID

Задаёт ID точки крепления для пользовательских моделей, когда босс садится верхом на другую сущность или когда на него садятся верхом.

КлючЗначенияПо умолчанию
customModelMountPointIDStringнет
Пример
customModelMountPointID: your_mount_point_id


frozen

Определяет, может ли босс перемещаться. Замороженные боссы всё ещё могут атаковать.
Примечание: на некоторых сущностях это может не работать.

КлючЗначенияПо умолчанию
frozentrue / falsefalse
Пример
frozen: true

ai

Определяет, включён ли у босса ИИ. При значении false босс не будет двигаться и атаковать самостоятельно. Это полезно для боссов, полностью управляемых через Elite Scripts.

КлючЗначенияПо умолчанию
aitrue / falsetrue
Пример
ai: false

alwaysShowName

Определяет, всегда ли босс показывает табличку с именем над головой. По умолчанию таблички с именами боссов показываются только во время боя. Эта настройка переопределяет такое поведение для конкретного босса, делая табличку с именем всегда видимой.

КлючЗначенияПо умолчанию
alwaysShowNametrue / falsefalse
Пример
alwaysShowName: true

reinforcement

Определяет, является ли босс подкреплением. Боссы-подкрепления не инициализируются как региональные боссы при запуске и предназначены только для призыва другими боссами в качестве подкреплений.

КлючЗначенияПо умолчанию
reinforcementtrue / falsefalse
Пример
reinforcement: true

song

Задаёт музыку, которую будет играть босс начиная с момента появления. Требует, чтобы файл .ogg с композицией находился в ресурспаке.

КлючЗначенияПо умолчанию
songStringнет

Примечание: настройка song требует, чтобы был задан followDistance, поскольку именно followDistance определяет дистанцию, на которой начинает играть музыка. Посмотрите пример, чтобы узнать, как задать длительность length (в миллисекундах) для song.

Пример

Настроить музыку можно двумя способами. Вот первый:

song: name=elitemobs:ice_queen.idle length=76370

Это проиграет композицию ice_queen.idle в течение 76370 миллисекунд, а затем зациклит её. Учтите, что расположение композиции определяется ресурспаком.

Вот второй способ настройки музыки:

song: name=elitemobs:ice_queen.end_transition length=14328->name=elitemobs:ice_queen.end_loop length=28657

Это проиграет композицию ice_queen.end_transition в течение 14328 миллисекунд, затем перейдёт к ice_queen.end_loop на 28657 миллисекунд и зациклит end_loop.

Это позволяет боссам иметь «вступительную» или «переходную» композицию, а затем основной зацикленный трек.


cullReinforcements

Определяет, будут ли подкрепления босса удалены при его смерти.

КлючЗначенияПо умолчанию
cullReinforcementstrue / falsetrue
Пример
cullReinforcements: true

movementSpeedAttribute

Задаёт скорость передвижения босса.
Примечание: значения выше 0.36 могут оказаться слишком быстрыми.

КлючЗначенияПо умолчанию
movementSpeedAttributeDoubleнет
Пример
movementSpeedAttribute: 0.3

Фазы боссов

У боссов могут быть фазы, которые сменяются, когда босс достигает определённого процента здоровья. При этом босс начинает использовать другой файл конфигурации, а значит, у босса может измениться всё что угодно, вплоть до типа сущности.
Чтобы узнать больше о фазах боссов, нажмите сюда.

КлючОписаниеЗначенияПо умолчанию
phasesЗадаёт фазы, которые будут у босса. ОбязательноListнет
phaseSpawnLocationЗадаёт, где появляется босс фазы. НеобязательноStringнет
Пример

Для этого примера мы покажем три разных файла конфигурации.

Первый файл конфигурации босса: phase_1_boss.yml

name: "Phase 1"
entityType: ZOMBIE
phases:
- phase_2_boss.yml:0.60
- phase_3_boss.yml:0.30

Второй файл конфигурации босса: phase_2_boss.yml

name: "Phase 2"
entityType: SKELETON

Третий файл конфигурации босса: phase_3_boss.yml

name: "Phase 3"
phaseSpawnLocation: same_as_boss,10,64,100,0,0
entityType: RAVAGER

Этот босс перейдёт к файлу конфигурации phase_2_boss.yml при 60% здоровья, а к файлу конфигурации phase_3_boss.yml — при 30% здоровья, в том же мире, что и фаза 2, и по координатам x=10, y=64 и z=100. Тип сущности и имя босса также изменятся.

Формат записи — filename:healthPercentage.

phaseSpawnLocation необязателен; если он не задан, босс сменит фазу там, где он стоит.

При проектировании босса с фазами важно знать следующее:

  • Файл конфигурации первой фазы задаёт все фазы босса.
  • Угроза / учтённый урон сохраняются между фазами для игроков.
  • Смена фаз основана на проценте потерянного здоровья, который сохраняется при переходе к другой фазе. Это значит, что увеличение или уменьшение healthMultiplier между фазами не вылечит и не ранит босса — переход всё равно произойдёт на том же проценте, просто в этой фазе у босса будет больше или меньше здоровья.
  • Боссы с фазами возвращаются к фазе 1, если выходят из боя.
  • Боссы с фазами, которые также являются региональными боссами, используют общий радиус привязи и механику таймаута для всех фаз и возрождаются как босс фазы 1 по истечении таймера.
  • Файл конфигурации последней фазы задаёт добычу с босса.
  • Фазы нельзя пропустить — избыточный урон всё равно заставит босса сменить фазу на заданном проценте.
  • Боссы с фазами, у которых есть ездовые животные, перестают быть верхом при смене фаз.

Региональные боссы

Региональные боссы — это особый тип пользовательских боссов, которые появляются в конкретном заданном месте и способны возрождаться там же после задержки. Кроме того, у них могут быть привязи, удерживающие их в определённой зоне, и другие возможности.

Они используются во всём контенте подземелий. Чтобы узнать больше о региональных боссах, нажмите сюда.

КлючОписаниеЗначенияПо умолчанию
isRegionalBossОпределяет, является ли босс региональным. Должно быть true, если вам нужен региональный босс.true / falsefalse
spawnLocationsЗадаёт места появления босса.Добавляйте их с помощью команды /em place boss [filename.yml]!нет
spawnCooldownЗадаёт задержку возрождения босса в минутах.Integer0
leashRadiusЗадаёт расстояние, на которое босс может отойти от точки появления, прежде чем его притянет обратно. Измеряется от точки появления.Doubleнет
onSpawnBlockStatesЗадаёт блоки, которые босс изменит при появлении.См. команды ниженет
onRemoveBlockStatesЗадаёт блоки, которые босс изменит при исчезновении.См. команды ниженет

Как указано выше, у региональных боссов могут быть onSpawnBlockStates и onRemoveBlockStates.

Это очень полезная возможность для изменения боевых арен во время боя, особенно в сочетании со сменой фаз, поскольку она позволяет открывать и закрывать боевые арены за счёт изменения состояний блоков.

Формат для них слишком сложен, чтобы писать его вручную, поэтому существует несколько команд, помогающих их настроить:

КомандаОписание
/em transitiveBlocks register [regional_boss_file.yml] [on_spawn/on_remove]Начинает регистрацию ручного выделения блоков для состояний при появлении или при удалении.
/em transitiveBlocks edit [regional_boss_file.yml] [on_spawn/on_remove]Редактирует состояния блоков при появлении или при удалении.
/em transitiveBlocks registerArea [regional_boss_file.yml] [on_spawn/on_remove]Позволяет администраторам выделять крупные области блоков для сохранения в качестве состояний.
/em transitiveBlocks editArea [regional_boss_file.yml] [on_spawn/on_remove]Позволяет администраторам редактировать крупные области блоков для сохранения в качестве состояний.
Пример использования:

Допустим, вы хотите сделать бой, в котором босс появляется на арене с открытой дверью, и хотите, чтобы дверь закрывалась в начале боя и снова открывалась по его завершении.

Для этого вам понадобятся две фазы босса и регистрация трёх разных наборов состояний блоков. В этом примере я назову эти фазы phase_1_boss.yml и phase_2_boss.yml соответственно.

  1. Используйте /em transitiveBlocks register phase_1_boss.yml on_spawn или /em transitiveBlocks edit phase_1_boss.yml on_spawn, чтобы зарегистрировать блоки двери в открытом состоянии.

Это означает регистрацию блоков воздуха. Здесь рекомендуется выделение области.

Это нужно, чтобы дверь была открыта в момент появления босса и у игроков гарантированно был путь внутрь.

  1. Используйте /em transitiveBlocks register phase_2_boss.yml on_spawn или /em transitiveBlocks edit phase_2_boss.yml on_spawn, чтобы зарегистрировать блоки двери в закрытом состоянии.

Это означает регистрацию сплошных блоков двери, которые не дадут игроку выйти.

Это нужно, чтобы дверь стала сплошной, когда босс переходит во вторую фазу, не позволяя игрокам уйти.

  1. Используйте /em transitiveBlocks register phase_2_boss.yml on_remove или /em transitiveBlocks edit phase_2_boss.yml on_remove, чтобы зарегистрировать блоки двери в открытом состоянии.

Это означает повторную регистрацию тех же блоков, что и на первом шаге (блоков воздуха).

Это нужно, чтобы дверь открылась при смерти босса, позволив игрокам покинуть арену.


alert

Определяет, находится ли босс в состоянии готовности. По умолчанию региональные боссы замедлены и имеют меньшую дистанцию агро, когда находятся вне боя. Эта настройка не даёт региональным боссам замедляться и терять дистанцию агро вне боя, поэтому они всегда ведут себя одинаково — и в бою, и вне его.

КлючЗначенияПо умолчанию
alertBooleanfalse
Пример
alert: true

removeAfterDeath

Определяет, будет ли региональный босс безвозвратно удалён после убийства. Именно это использует BetterStructures для святилищ, где региональный босс задуман для одного-единственного боя, после которого он больше никогда не появляется в этом месте.

КлючЗначенияПо умолчанию
removeAfterDeathBooleanfalse
Пример
removeAfterDeath: true

Инстанс-боссы

Инстанс-боссы — это подтип региональных боссов, используемый в инстанс-подземельях.

КлючОписаниеЗначенияПо умолчанию
instancedДелает пользовательского босса инстансовым. Обязательно.true / falsefalse

Установка боссов как инстансовых обязательна для корректной работы инстанс-подземелий. Мы также рекомендуем убирать привязи у любых инстанс-боссов.

Пример
instanced: true