Создание NPC
Настройки конфигурации
isEnabled
Задаёт, включён ли NPC.
| Key | Values | Default |
|---|---|---|
isEnabled | Boolean | true |
Пример
isEnabled: true
name
Задаёт отображаемое имя NPC. Поддерживает Цветовые коды и ключи перевода для многоязычных серверов.
| Key | Values | Default |
|---|---|---|
name | String | none |
Пример
name: "&aEnn Peecee"

scale
Задаёт масштаб (размер) NPC. Это применяется через ванильный атрибут generic_scale на стоящей за NPC сущности.
| Key | Values | Default |
|---|---|---|
scale | Multiplier | 1.0 |
При масштабировании 1.0 представляет размер по умолчанию. Чтобы сделать сущность больше, увеличьте значение (например, 1.2). Чтобы сделать сущность меньше, уменьшите значение (например, 0.8).
Пример
scale: 1.2
role
Задаёт роль NPC под именем. Только визуальная. Поддерживает Цветовые коды и ключи перевода для многоязычных серверов.
| Key | Values | Default |
|---|---|---|
role | String | none |
Пример
role: "&c<Red Fellow>"

profession
Задаёт профессию NPC, которая задаёт его скин, когда не используется маскировка.
| Key | Values | Default |
|---|---|---|
profession | Profession | NITWIT |
Пример
profession: NITWIT

greetings
Задаёт список приветствий, которые NPC может произнести, когда игрок впервые входит в его activationRadius. Одна запись выбирается случайно и показывается как всплывающий пузырь чата над NPC (видимый только этому игроку, примерно 5 секунд). Поддерживает ключи перевода для многоязычных серверов.
| Key | Values | Default |
|---|---|---|
greetings | String List | none |
Приветствие срабатывает только при входе в радиус, а не многократно, пока игрок остаётся внутри него.
Пример
greetings:
- Hi there!
- Good day.

dialog
Задаёт реплики, которые NPC может произнести в виде всплывающего пузыря чата. Каждый раз одна запись выбирается случайно (список читается не по порядку). Поддерживает ключи перевода для многоязычных серверов.
Когда это срабатывает, зависит от interactionType:
- NPC с
CHATпроизносят реплику диалога, когда игрок кликает по ним правой кнопкой. - Все остальные
interactionTypeпроизносят реплику диалога при каждом сканировании близости, пока игрок остаётся внутриactivationRadius.
Буквальный внутри реплики разбивает её на несколько строк пузыря.
| Key | Values | Default |
|---|---|---|
dialog | String List | none |
Пример
dialog:
- I like apples!
- Sure is hot.

farewell
Задаёт прощальные сообщения NPC. Одна запись выбирается случайно и показывается как всплывающий пузырь чата. Поддерживает ключи перевода для многоязычных серверов.
| Key | Values | Default |
|---|---|---|
farewell | String List | none |
Прощания срабатывают, когда игрок закрывает меню инвентаря, стоя в пределах 5 блоков от NPC — обычно сразу после закрытия меню магазина, задания или арены. Они не срабатывают, когда игрок просто выходит за пределы activationRadius.
Пример
farewell:
- Until next time!
- Bye!

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

timeout
Задаёт количество времени в минутах, прежде чем NPC исчезнет навсегда.
| Key | Values | Default |
|---|---|---|
timeout | Double | 0 (никогда) |
Пример
timeout: 0
questFileName
Задаёт кастомные задания, которые выдаёт NPC. Требует interactionType равного CUSTOM_QUEST_GIVER. Учтите, что ключ в единственном числе (questFileName), хотя принимает список.
| Key | Values | Default |
|---|---|---|
questFileName | String List | none |
Пример
questFileName:
- my_quest_one.yml
- my_quest_two.yml
disguise
Задаёт маскировку LibsDisguises, которую имеет NPC.
| Key | Values | Default |
|---|---|---|
disguise | Формат LibsDisguises | none |
Пример
disguise: SKELETON

customDisguiseData
Задаёт данные для кастомной маскировки LibsDisguises.
| Key | Values | Default |
|---|---|---|
customDisguiseData | Формат LibsDisguises | none |
Пример
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
Задаёт кастомную модель ModelEngine, которую будет использовать NPC.
| Key | Values | Default |
|---|---|---|
customModel | String | none |
Пример
customModel: MY_MODEL_ONE
arena
Задаёт имя файла арены, для которой NPC откроет меню (требует interactionType ARENA_MASTER).
| Key | Values | Default |
|---|---|---|
arena | Filename | none |
Пример
arena: my_arena.yml
command
Задаёт команду, которую выполнит NPC (требует interactionType COMMAND). Команды выполняются от имени игрока, а не от имени консоли. Не включайте ведущий слеш (/).
| Key | Values | Default |
|---|---|---|
command | String | none |
Пример
command: say Look at me running a command, how cool!
![]()
spawnLocation
Задаёт одно местоположение спавна NPC. Это устаревший ключ для одного местоположения: он читается только когда spawnLocations отсутствует или пуст. Новые местоположения, размещённые в игре, записываются в spawnLocations, поэтому предпочитайте этот ключ.
Формат: world,x,y,z,yaw,pitch.
| Key | Values | Default |
|---|---|---|
spawnLocation | String | none |
Пример
spawnLocation: my_world,10,50,10,0,0
spawnLocations
Задаёт местоположения спавна NPC. Один и тот же файл NPC можно разместить в нескольких точках; на каждую запись спавнится один NPC. Вам следует задавать это через команду /em place npc <npcfilename.yml>, которая добавляет ваше текущее местоположение (включая направление, куда вы смотрите) в этот список и также устанавливает isEnabled: true.
Формат каждой записи: world,x,y,z,yaw,pitch.
| Key | Values | Default |
|---|---|---|
spawnLocations | String List | none |
Пример
spawnLocations:
- my_world,10,50,10,0,0
- my_world,-10,50,-10,0,0
instanced
Задаёт, должен ли NPC быть инстансовым (для использования в инстансовых подземельях). Когда установлено в true, NPC не спавнится в мире-шаблоне; вместо этого он регистрируется как шаблон и клонируется для каждого инстанса подземелья, и каждый клон существует в соответствующем мире инстанса.
| Key | Values | Default |
|---|---|---|
instanced | Boolean | false |
Пример
instanced: false
syncMovement
Задаёт, должно ли движение кастомной модели NPC синхронизироваться со стоящей за ним сущностью. Это имеет эффект, только когда задан customModel и модель загружена — для обычных NPC и NPC на LibsDisguises игнорируется.
| Key | Values | Default |
|---|---|---|
syncMovement | Boolean | true |
Пример
syncMovement: true
Пример конфигурации 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
questFileName:
- my_quest.yml #npc interactionType must be set to CUSTOM_QUEST_GIVER
disguise: SKELETON
customDisguiseData: #used when a custom libsdisguise is being set
customModel: MODEL_ONE
arena: my_arena.yml #npc interactionType must be set to ARENA_MASTER
command: say Hello World! #npc interactionType must be set to COMMAND (do not include the leading slash)
spawnLocation: my_world,584,55,127,90,10 #remember that NPCs use pitch and yaw to set where they are looking at. this is also automatically set when running the /em place npc <npcfilename.yml> command, so make sure you pose where you want the NPC to be facing when running the command.

Особое [1]
Ниже приведён список допустимых типов взаимодействия NPC:
| Type | Description |
|---|---|
GUILD_GREETER | Открывает меню выбора бонуса навыка оружия |
CHAT | Правый клик произносит случайную реплику из dialog |
CUSTOM_SHOP | Открывает меню кастомного магазина |
PROCEDURALLY_GENERATED_SHOP | Открывает процедурно сгенерированный магазин |
BAR | Не реализовано. Сообщает игроку, что функция скоро появится. |
ARENA | Ничего не делает. Используйте ARENA_MASTER вместо этого. |
QUEST_GIVER | Открывает меню процедурно сгенерированных заданий |
CUSTOM_QUEST_GIVER | Открывает меню заданий для конкретного задания, заданного в questFileName |
NONE | Без взаимодействий |
SELL | Открывает меню продажи |
TELEPORT_BACK | Телепортирует игроков обратно в последнее местоположение в мире, не относящемся к elitemobs, где они были |
SCRAPPER | Открывает меню утилизации |
REPAIRMAN | Открывает меню ремонта |
ENCHANTER | Открывает меню зачарования |
REFINER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
SMELTER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
ENHANCER | ЗАМЕНЕНО — сообщает игроку, что функция была заменена; администраторам предлагается удалить NPC |
UNBINDER | Открывает меню развязывания |
ARENA_MASTER | Открывает меню арены для арены, заданной в arena |
COMMAND | Выполняет команду, заданную в command |
SCROLL_APPLIER | Открывает меню элитных свитков предметов. NPC вообще не спавнится, пока useEliteItemScrolls отключён |
ARROW_SHOP | Открывает меню магазина стрел |
GAMBLING_BLACKJACK | Открывает азартную игру в блэкджек |
GAMBLING_COINFLIP | Открывает азартную игру в подбрасывание монеты |
GAMBLING_SLOTS | Открывает азартную игру в слоты |
GAMBLING_HIGHERLOWER | Открывает азартную игру «больше/меньше» |
Подробнее о том, что делают SCRAPPER и похожие типы взаимодействия, нажмите здесь.
Примечания о поведении NPC
У NPC есть несколько жёстко заданных вариантов поведения, которые нельзя настроить:
- ИИ отключён: NPC не могут двигаться или прокладывать путь. Они остаются на своём месте спавна. Но они поворачиваются на месте лицом к игроку, находящемуся внутри
activationRadius. - Отображение роли: текст
roleотрисовывается на плавающей сущности text display над NPC. Вертикальное смещение зависит от того, как отрисовывается NPC —2.52для обычного NPC,2.30для NPC на LibsDisguises и2.3для использующегоcustomModel. - Метка роли для Bedrock: клиенты Bedrock не могут отрисовывать text display, поэтому замаскированный NPC дополнительно получает невидимую подставку для брони-маркер с текстом роли, показываемую только игрокам Bedrock и скрытую от игроков Java. Её высота задаётся
bedrockNPCRoleYOffsetвconfig.yml(по умолчанию2.2). Этот запасной вариант требует Geyser или Floodgate на бэкенд-сервере; конфигурация только с Geyser на прокси его отключает. - Перезарядка диалогов: NPC ждут 3 секунды между событиями речи, чтобы предотвратить наложение сообщений. Пузыри чата — это плавающий текст для каждого игрока, исчезающий примерно через 5 секунд, а не сообщения в чат.
- Невидимость: NPC под эффектом зелья невидимости не будет показывать пузыри чата.
- Жизненный цикл чанков: NPC исчезают, когда их чанк выгружается, и снова появляются, когда он перезагружается. Сущности NPC никогда не сохраняются в мир — они пересоздаются из своего конфигурационного файла.
- Переименование заблокировано: правый клик по NPC с биркой в руке отменяется, и игроку сообщается, что NPC нельзя переименовать.
