Создание NPC
Поместите определения в plugins/EliteMobs/npcs/, используя уникальные имена файлов с .yml. Сохраните файл и выполните /em reload перед размещением нового NPC. Игрок с правом elitemobs.place.npc может выполнить /em place npc <npcfilename.yml> в нужной позиции и с нужным направлением взгляда. Один файл поддерживает несколько размещений.
Повторное использование другого файла NPC
Файл NPC может взять за основу другой файл NPC с помощью extends и изменить только то, что отличается:
extends: my_base_npc.yml
name: "&aSecond Guard"
spawnLocations:
- my_world,20,64,20,90,0
Файл наследует все значения базового файла и переопределяет ключи, которые задаёт сам. Вложенные разделы, например patrol, объединяются по отдельным ключам; список, например dialog, целиком заменяет список базового файла. Указывайте базовый файл только по имени, без пути к папке. Это должен быть другой файл в npcs, включая её подпапки, и он сам может расширять ещё один базовый файл.
isEnabled, spawnLocation и spawnLocations никогда не наследуются, поэтому у каждого файла остаются собственные размещения. Базовый файл с isEnabled: false может служить шаблоном: расширяющие его файлы всё равно загружаются. EliteMobs не записывает значения по умолчанию в файл, использующий extends. Отсутствующий базовый файл, путь в extends или замкнутый круг ссылок extends отключают файл с предупреждением в консоли. Редактор патрулей использует extends, когда выносит одно размещение из файла с несколькими размещениями.
Настройки конфигурации
isEnabled
Включает определение при загрузке конфигураций. После изменения перезагрузите их. Для появления SCROLL_APPLIER также нужна глобальная настройка useEliteItemScrolls.
| Ключ | Значения | По умолчанию |
|---|---|---|
isEnabled | Логическое значение | true |
Пример
isEnabled: true
name
Задаёт отображаемое имя с поддержкой цветовых кодов. EliteMobs регистрирует исходный текст в CSV переводов и использует перевод выбранного языка, если он есть.
| Ключ | Значения | По умолчанию |
|---|---|---|
name | Строка | пустая строка |
Пример
name: "&aEnn Peecee"

Расположение подписей
Имя и роль имеют фиксированное расположение. Настроек nameplateScale или nameplateLineGap для отдельного NPC нет. Подписи обычных и замаскированных NPC следуют высоте тела или маскировки. Совместимые модели FreeMinecraftModels управляют своими подписями; ModelEngine сохраняет собственное имя, а EliteMobs показывает роль. Личные отметки заданий размещаются выше подписей.
При включённых азартных играх особый NPC gambling_den_owner.yml добавляет доход заведения в ту же группу подписей, обновляя её примерно раз в секунду.
scale
Задаёт масштаб базового жителя через атрибут размера Minecraft. Модель или маскировка может управлять своим видимым размером отдельно; этот параметр не гарантирует изменение её внешнего вида вместе с жителем.
| Ключ | Значения | По умолчанию |
|---|---|---|
scale | Множитель | 1.0 |
При масштабировании 1.0 представляет размер по умолчанию. Чтобы сделать сущность больше, увеличьте значение (например, 1.2). Чтобы сделать сущность меньше, уменьшите значение (например, 0.8).
Пример
scale: 1.2
role
Задаёт подпись роли под именем. Она влияет только на отображение, поддерживает цветовые коды и регистрируется в CSV переводов.
| Ключ | Значения | По умолчанию |
|---|---|---|
role | Строка | пустая строка |
Пример
role: "&c<Red Fellow>"

profession
Задаёт профессию базового жителя и его внешний вид, когда нет ни маскировки, ни собственной модели.
| Ключ | Значения | По умолчанию |
|---|---|---|
profession | Профессия | NITWIT |
Пример
profession: NITWIT

greetings
Приветствия, которые NPC пытается произнести, когда проверка впервые обнаруживает игрока внутри activationRadius. Случайная запись показывается над NPC в облачке, видимом только этому игроку около 5 секунд. Список регистрируется в CSV переводов. Для речи нужны canTalk и завершённая общая задержка диалога.
| Ключ | Значения | По умолчанию |
|---|---|---|
greetings | Список строк | нет |
Попытка происходит только при обнаруженном входе. Если общая задержка её блокирует, пребывание внутри радиуса не повторяет приветствие.
Пример
greetings:
- Hi there!
- Good day.

dialog
Задаёт реплики в облачках над NPC. Каждый раз выбирается случайная запись, а не следующая по порядку. Список регистрируется в CSV переводов.
Когда это срабатывает, зависит от interactionType:
CHATпытается произнести реплику при взаимодействии, обычно правом клике. FreeMinecraftModels также передаёт левые клики по модели обработчику взаимодействий.- Другие типы пытаются говорить при последующих проверках, пока игрок остаётся внутри
activationRadius; первая проверка пытается показать приветствие.
Буквальные символы \n делят облачко на несколько строк. Сохраните их одинарными кавычками YAML либо запишите \\n внутри двойных кавычек. Это относится и к приветствиям, и к прощаниям.
| Ключ | Значения | По умолчанию |
|---|---|---|
dialog | Список строк | нет |
Пример
dialog:
- I like apples!
- Sure is hot.

farewell
Задаёт случайно выбираемые прощания в облачках над NPC. Список регистрируется в CSV переводов.
| Ключ | Значения | По умолчанию |
|---|---|---|
farewell | Список строк | нет |
Закрытие любого окна инвентаря с непустым заголовком запускает попытки прощания у ближайших NPC. Поиск охватывает 5 блоков вдоль каждой оси вокруг игрока и не ограничен владельцем открытого меню. Говорить могут несколько NPC. Выход из activationRadius прощание не вызывает.
Пример
farewell:
- Until next time!
- Bye!

canTalk
Управляет встроенными облачками речи. false подавляет greetings, dialog и farewell, но не отключает меню, команды, Lua, диалоги заданий, обнаружение близости и отметки заданий.
| Ключ | Значения | По умолчанию |
|---|---|---|
canTalk | Логическое значение | true |
Пример
canTalk: true
activationRadius
Задаёт радиус в блоках, в котором NPC может обнаружить приближающегося игрока.
| Ключ | Значения | По умолчанию |
|---|---|---|
activationRadius | Дробное число | 3.0 |
Проверка выполняется каждые 100 тиков, около 5 секунд, по трёхмерному расстоянию без проверки прямой видимости. Стоящий NPC может смотреть на игрока, приветствовать при обнаруженном входе и говорить при следующих проверках. 0 или меньше отключает эти взаимодействия, включая Lua-хуки близости. Личные отметки QUEST_GIVER и CUSTOM_QUEST_GIVER используют отдельный радиус 30 блоков и могут появляться при activationRadius: 0; они отражают доступные и готовые к сдаче задания игрока.
Проверки и облачка подавляются при движении патруля или его редактировании. patrol.pauseNearPlayersRadius и patrol.faceNearbyPlayers управляют остановкой и поворотом возле игроков; см. Патрули.
Пример
activationRadius: 3.0
scripts
Задаёт Lua-скрипты, привязанные к этому NPC. Файлы скриптов загружаются из plugins/EliteMobs/npc_scripts/. Расширение .lua необязательно — оно добавляется автоматически, если вы его пропустите.
| Ключ | Значения | По умолчанию |
|---|---|---|
scripts | Список строк | нет |
Общий Lua-движок MagmaCore поддерживает on_spawn, on_game_tick, on_remove, on_npc_interact, on_npc_proximity_enter, on_npc_proximity_leave, on_zone_enter и on_zone_leave. Тиковый хук NPC называется on_game_tick. У каждого NPC свои экземпляры скриптов; меньший приоритет выполняется первым. Скрипту только с тиковым хуком также нужен on_spawn, возможно пустой, для инициализации. API и примеры приведены в разделе Lua-скрипты NPC.
Имя без соответствующего загруженного определения скрипта пропускается с предупреждением; NPC всё равно появляется. Соблюдайте регистр имени файла и перезагружайте после изменений.
Диалог задания может обработать клик до on_npc_interact. Иначе хук выполняется перед настроенным взаимодействием и не отменяет его.
Пример
scripts:
- wave.lua
interactionType
Задаёт тип взаимодействия, которое будет выполнять NPC.
| Ключ | Значения | По умолчанию |
|---|---|---|
interactionType | Особое [1] | NONE |
Пример
interactionType: TELEPORT_BACK
noPreviousLocationMessage
Сообщение TELEPORT_BACK, когда нет сохранённой точки возврата. Это исходная позиция, сохранённая при телепортации EliteMobs из-за пределов мира EliteMobs, а не последняя позиция при ходьбе или место смерти. Возврат использует обычную телепортацию EliteMobs с настроенной задержкой и правилами отмены. Сообщение поддерживает цветовые коды и регистрируется в CSV переводов.
| Ключ | Значения | По умолчанию |
|---|---|---|
noPreviousLocationMessage | Строка | пустая строка |
Пример
noPreviousLocationMessage: '&8[EliteMobs] &cCouldn''t send you back to your previous location - no previous location found!'

timeout
Минуты до удаления появившегося NPC. 0 или меньше отключает таймер. Размещение не удаляется, а определение не отключается: NPC может вернуться после перезагрузки, перезапуска или восстановления чанка.
Чтобы удалить размещение, включите /em remove, ударьте NPC и снова выполните /em remove для выхода из режима. Нужно право elitemobs.remove. Из списка удаляется соответствующая запись; старое определение с одной позицией отключается. При переходе на spawnLocations удалите старый ключ spawnLocation, иначе он может снова заработать после опустошения списка.
| Ключ | Значения | По умолчанию |
|---|---|---|
timeout | Дробное число | 0 (таймер выключен) |
Пример
timeout: 0
questFileName
Список имён файлов из plugins/EliteMobs/customquests/, включая .yml, для CUSTOM_QUEST_GIVER. Ключ в единственном числе принимает список. Меню предлагает подходящие задания и принимает сдачу заданий, назначенную этому имени файла NPC. У NPC только для сдачи список предложений может быть пуст. Все размещения одного файла имеют ту же идентичность для заданий. Права и условия отдельных заданий продолжают действовать.
| Ключ | Значения | По умолчанию |
|---|---|---|
questFileName | Список строк | нет |
Пример
questFileName:
- my_quest_one.yml
- my_quest_two.yml
disguise
Задаёт маскировку и требует LibsDisguises. Успешно загруженная собственная модель имеет приоритет.
| Ключ | Значения | По умолчанию |
|---|---|---|
disguise | Формат LibsDisguises | нет |
Пример
disguise: SKELETON

customDisguiseData
Задаёт данные для кастомной маскировки LibsDisguises.
| Ключ | Значения | По умолчанию |
|---|---|---|
customDisguiseData | Формат LibsDisguises | нет |
Пример
disguise: custom:my_cool_disguise_name
customDisguiseData: player my_cool_disguise_name setskin {"id":"364acb6d-9050-46f7-b5fb-f8c3fd83a6fc","name":"Unknown","properties":[{"name":"textures","value":"ewogICJ0aW1lc3RhbXAiIDogMTYxMTk4ODA4Nzc1NSwKICAicHJvZmlsZUlkIiA6ICJkZGVkNTZlMWVmOGI0MGZlOGFkMTYyOTIwZjdhZWNkYSIsCiAgInByb2ZpbGVOYW1lIiA6ICJEaXNjb3JkQXBwIiwKICAic2lnbmF0dXJlUmVxdWlyZWQiIDogdHJ1ZSwKICAidGV4dHVyZXMiIDogewogICAgIlNLSU4iIDogewogICAgICAidXJsIiA6ICJodHRwOi8vdGV4dHVyZXMubWluZWNyYWZ0Lm5ldC90ZXh0dXJlLzliYmVkODQzNWY4YmYyNzhhZmUyNmU2NGZkOTI2YjhiMzc3MzJkODhlMzM0ODk3ZGJkNTI3ZDU2ZmY5MTk5MGUiCiAgICB9CiAgfQp9","signature":"ujLq1joYVktuQAp1xpFKlxQFUVinSePiDBiVCAxxix/mA5vP86i/eAOfb1mtGjaAZ6sO0l2olbzvycnGXNBtbAxgqprguROXY4tpWiePVTDmy3iD4GdOCxHAkYLoyMV5qTT4SNsldUFFuND8GSEgbNMltKDLmhNKwzm08iCigPfpeuYpwljgJPxu6ka54PKNaQu4doI0ZDZXKqq4hPhR3Bs2Sz9MI0SmdmQWwcCzUz3DFdVno27fmQ6LwqmT+eSoOv0EttVG/XMaTYQ5lhBY61mqf6WlJyYVUSfjJk1AbYsctu7dWM+sbY8jFq5ljvXJGGr5TyKi+fs8vHy06Z2go20QgTYOw+caFxFijAS6fgm3oY57VEO/+/9OLHdD+Z9BrWqQWcIIrVeIfxjue/yt4pyeVv9jX59hjNFjhcPEwotkxJ+vZ96WlTLWDG4BiqauDr2VeGyLlVaygO9ZU0wwsN65iSh91GI3tMIA5wbDR0Hts/9ABvt9eafHbowS+4SZXN0i9mYnKg7op1eiB8nMEAGsPJg3DwsmUrh3ACAapQ6eYHiJpo59RXDqKlRcXwo7wsEFp//5LgQWbPj0NP3nxnywdpozqSAeq6236qlhE9BT9eiyJ41V9sMelYFEWMlUAltR40NdbIrHB0J3nmfuLJz44/sTwWf6P1khOy//XX0="}],"legacy":false}

customModel
Задаёт модель FreeMinecraftModels или ModelEngine. Установите модель в выбранный плагин, прежде чем указывать её ID. Если доступны оба, предпочтение отдаётся FreeMinecraftModels; отсутствие модели FMM не переключает обработку на ModelEngine. Если модель не загрузилась, используется настроенная маскировка или обычный житель. См. Собственные модели.
| Ключ | Значения | По умолчанию |
|---|---|---|
customModel | Строка | нет |
Пример
customModel: MY_MODEL_ONE
Наставники классов и транспорт
Используйте interactionType: CLASS_TRAINER с classRoot для выбора ветви класса. Начните с включённых определений class_trainer_*.yml. Испытания и развитие описаны в Advanced Combat System.
Для interactionType: TRANSPORT поле transportRoutes содержит ID маршрутов без .yml; клик открывает выбор пункта назначения. См. Транспортные маршруты.
arena
Задаёт имя файла арены, для которой NPC откроет меню (требует interactionType ARENA_MASTER).
| Ключ | Значения | По умолчанию |
|---|---|---|
arena | Имя файла | нет |
Пример
arena: my_arena.yml
command
Команда для COMMAND. Выполняется на следующем тике от имени кликнувшего игрока и требует его обычных прав на команду. Опустите начальный /. Поле не подставляет автоматически переменные игрока и не использует формат консольных команд EliteMobs.
| Ключ | Значения | По умолчанию |
|---|---|---|
command | Строка | нет |
Пример
command: say Look at me running a command, how cool!
![]()
spawnLocation
Задаёт одно местоположение спавна NPC. Это устаревший ключ для одного местоположения: он читается только когда spawnLocations отсутствует или пуст. Новые местоположения, размещённые в игре, записываются в spawnLocations, поэтому предпочитайте этот ключ.
Рекомендуемый формат: world,x,y,z,yaw,pitch. Указанный мир должен быть загружен заранее; эта настройка его не загружает.
| Ключ | Значения | По умолчанию |
|---|---|---|
spawnLocation | Строка | нет |
Пример
spawnLocation: my_world,10,50,10,0,0
spawnLocations
Несколько размещений одного определения. /em place npc <npcfilename.yml> добавляет позицию и направление взгляда с округлением до двух знаков после запятой и задаёт isEnabled: true. Полностью совпадающая сериализованная позиция не добавляется повторно. NPC восстанавливаются, когда их чанки могут обрабатывать тики сущностей.
Формат каждой записи: world,x,y,z,yaw,pitch.
| Ключ | Значения | По умолчанию |
|---|---|---|
spawnLocations | Список строк | нет |
Пример
spawnLocations:
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0
instanced
Задаёт, должен ли NPC быть инстансовым (для использования в инстансовых подземельях). Когда установлено в true, NPC не спавнится в мире-шаблоне; вместо этого он регистрируется как шаблон и клонируется для каждого инстанса подземелья, и каждый клон существует в соответствующем мире инстанса.
| Ключ | Значения | По умолчанию |
|---|---|---|
instanced | Логическое значение | false |
Пример
instanced: false
syncMovement
Задаёт, должно ли движение кастомной модели NPC синхронизироваться со стоящей за ним сущностью. Это имеет эффект, только когда задан customModel и модель загружена — для обычных NPC и NPC на LibsDisguises игнорируется.
Корректно настроенный patrol включает синхронизацию даже во время паузы или при значении false. Параметр по-прежнему действует на модели без патруля.
| Ключ | Значения | По умолчанию |
|---|---|---|
syncMovement | Логическое значение | true |
Пример
syncMovement: true
patrol
Добавляет NPC встроенный маршрут с автоматическим поиском пути. Узлы являются смещениями от заданной точки появления этого NPC или, с patrol.relative: false, точными координатами в его мире. Длинные участки рассчитываются и делятся автоматически, а патрули не загружают чанки принудительно. patrol.startNodeWaitSeconds заставляет NPC отдыхать у первого узла один раз за круг, доступный только для NPC patrol.pauseNearPlayersRadius приостанавливает патруль рядом с игроками, а patrol.faceNearbyPlayers поворачивает NPC к ним во время паузы. Полная схема, редактор, поведение на длинных маршрутах и Lua-управление описаны в разделе Патрули NPC и боссов.
Пример конфигурации NPC
isEnabled: true
name: "&cRed Rubin"
role: "&a<Generic NPC>"
profession: NITWIT
greetings:
- Hiya!
- Hello!
dialog:
- Great conversation!
- Pleasure talking with you!
farewell:
- Goodbye!
- Laters!
canTalk: true
activationRadius: 4
interactionType: CHAT
timeout: 0
spawnLocations:
- my_world,584,55,127,90,10

Особое [1]
Ниже приведён список допустимых типов взаимодействия NPC:
| Тип | Описание |
|---|---|
GUILD_GREETER | Открывает бонусы оружейных навыков. Нужно elitemobs.skill.npc. |
CLASS_TRAINER | Открывает ветвь из classRoot. Нужно elitemobs.command. |
TRANSPORT | Открывает пункты назначения из transportRoutes. |
CHAT | Пытается произнести случайную реплику dialog при взаимодействии. |
CUSTOM_SHOP | Открывает собственный магазин. Нужно elitemobs.shop.custom.npc. |
PROCEDURALLY_GENERATED_SHOP | Открывает генерируемый магазин. Нужно elitemobs.shop.dynamic.npc. |
BAR | Не реализовано. Сообщает игроку, что функция скоро появится. |
ARENA | Ничего не делает. Используйте ARENA_MASTER вместо этого. |
QUEST_GIVER | Открывает генерируемые задания. Нужно elitemobs.quest.npc. |
CUSTOM_QUEST_GIVER | Предлагает подходящие задания из questFileName и принимает назначенную сдачу. |
NONE | Нет встроенного действия; скрипты, близость и диалоги заданий продолжают работать. |
SELL | Открывает продажу. Нужно elitemobs.shop.sell.npc. |
TELEPORT_BACK | Использует сохранённую точку возврата EliteMobs. Нужно elitemobs.back.npc. |
SCRAPPER | Открывает утилизацию. Нужно elitemobs.scrap.npc. |
REPAIRMAN | Открывает ремонт. Нужно elitemobs.repair.npc. |
ENCHANTER | Открывает зачарование. Нужно elitemobs.enchant.npc. |
REFINER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
SMELTER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
ENHANCER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
UNBINDER | Открывает снятие привязки. Нужно elitemobs.unbind.npc. |
ARENA_MASTER | Открывает меню арены для арены, заданной в arena |
COMMAND | Выполняет команду, заданную в command |
SCROLL_APPLIER | Открывает элитные свитки предметов. Нужно elitemobs.scroll.npc; не появляется при отключённом useEliteItemScrolls. |
ARROW_SHOP | Открывает магазин стрел. Нужно elitemobs.shop.arrow.npc. |
GAMBLING_BLACKJACK | Открывает блэкджек. Нужно elitemobs.gambling.npc. |
GAMBLING_COINFLIP | Открывает подбрасывание монеты. Нужно elitemobs.gambling.npc. |
GAMBLING_SLOTS | Открывает слоты. Нужно elitemobs.gambling.npc. |
GAMBLING_HIGHERLOWER | Открывает «больше/меньше». Нужно elitemobs.gambling.npc. |
Подробнее о том, что делают SCRAPPER и похожие типы взаимодействия, нажмите здесь.
Примечания о поведении NPC
Встроенное поведение также включает:
- Движение: обычно NPC стоят и смотрят на ближайших игроков. Патрули и скрипты могут их перемещать. Патруль задаёт маршрут вместо обычного поведения жителя.
- Порядок взаимодействий: диалог задания может обработать клик до Lua и встроенного действия. Иначе сначала выполняется Lua, затем действие и его проверки прав. Защита на один тик предотвращает повторные взаимодействия одного игрока с разными NPC. Редактирование патруля блокирует взаимодействия, обычное движение патруля — нет.
- Защита: тела NPC не сталкиваются обычным образом. EliteMobs отменяет урон, превращения жителей и открытие обычного торгового инвентаря.
- Подписи: имя и роль используют описанную выше фиксированную схему. Обычные и замаскированные NPC учитывают текущую высоту тела, поэтому масштаб может менять положение подписей. Совместимые модели FMM управляют именем и ролью вместе.
- Bedrock: отображение зависит от активной интеграции моделей и подписей. Текущий механизм подписей NPC не использует сохранённый ключ
bedrockNPCRoleYOffset. - Задержка диалога: каждый NPC делит 3 секунды ожидания между всеми игроками. Приветствие одного может помешать приветствию другого в этот период. Личные облачка исчезают примерно через 5 секунд.
- Невидимость: NPC под эффектом зелья невидимости не будет показывать пузыри чата.
- Чанки: NPC исчезают при выгрузке и восстанавливаются, когда чанк снова обрабатывает тики сущностей. Сущности NPC не сохраняются в мире; размещения берутся из конфигураций.
- Переименование: обычный правый клик по базовому жителю с биркой в основной руке отменяется с сообщением. Модели используют собственные обработчики; FreeMinecraftModels передаёт и левые, и правые клики обработчику NPC.
