Справочник API Lua
Этот справочник описывает таблицы Lua и контексты MagmaCore, FreeMinecraftModels и EliteMobs. Общие таблицы и таблицы сил боссов EliteMobs имеют разные контракты. Используйте раздел для своего типа скрипта.
Большинство методов таблиц принимают и table.method(...), и table:method(...). Глобальные функции em.create_*, em.zone.create_* и em.location.* требуют точки, как и указанные ниже методы изменения урона события босса. Актуальные поля общих таблиц вычисляются при чтении. Прочитайте поле снова, чтобы обновить значение, и не присваивайте ему значение: это перекроет вычисление. Сохранённая в переменной локация или другой снимок сама не обновляется.
Методы с обработкой цветов используют общий синтаксис цветовых кодов, в том числе для чата, заголовков, полос, имён и заголовков хранилищ пропсов.
Таблица Entity
Таблица сущности MagmaCore — это основа для обобщённых значений сущностей; таблицы Living Entity, Player и пропа FreeMinecraftModels наследуют её.
Свойства
| Поле | Тип | Описание |
|---|---|---|
uuid | string | UUID сущности. |
entity_type | string | Тип сущности Bukkit в нижнем регистре. |
is_valid | bool | Актуальное значение валидности. |
is_dead | bool | Актуальное состояние смерти. |
current_location | table/nil | Актуальная локация {x, y, z, yaw, pitch, world}. |
world | string/nil | Актуальное имя мира. |
is_player | bool | Является ли сущность игроком. |
is_hostile | bool | Реализует ли сущность Bukkit Monster. |
is_passive | bool | Реализует ли сущность Bukkit Animals. |
is_on_ground | bool | Актуальное состояние нахождения на земле. |
is_flying | bool | Актуальное состояние полёта игрока; false для других сущностей. |
in_block | bool | Актуальное состояние застрявшей в блоке стрелы. |
attachment_location | table/nil | Центр блока, содержащего текущую локацию застрявшей стрелы; nil, если стрела не в блоке. |
attachment_block | table/nil | Центр блока, в который фактически попала стрела, принадлежащая активному действию зачарования. Возвращает nil без действительного записанного попадания, а также после того как стрела сдвинулась, сменила мир или её действие завершилось. Определяет поражённый блок, но не даёт безопасной для столкновений точки перемещения. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
teleport(location) | table | nil | Телепортировать к таблице локации. |
remove() | — | nil | Удалить сущность, если она ещё валидна. |
set_silent(enabled) | bool | nil | Задать состояние беззвучности. |
set_invulnerable(enabled) | bool | nil | Задать состояние неуязвимости. |
set_gravity(enabled) | bool | nil | Задать состояние гравитации. |
set_glowing(enabled) | bool | nil | Задать состояние свечения. |
set_velocity(x, y, z) | number, number, number | nil | Заменить скорость; компоненты должны быть конечными. |
set_fall_distance(distance) | number | nil | Задать конечное неотрицательное расстояние падения. |
set_shooter(uuid) | string | bool | Только для снаряда: назначить найденную сущность, реализующую Bukkit ProjectileSource, источником выстрела. |
set_direction(x, y, z) | number, number, number | nil | Только для огненного шара: задать конечное ненулевое направление полёта. |
set_pickup(status) | string | nil | Только для стрелы: ALLOWED, DISALLOWED или CREATIVE_ONLY. |
can_receive_hostile_effect(actor_uuid) | string | bool | Проверить, может ли цель получить враждебный эффект от подключённого игрока. Интеграции могут добавлять ограничения боя. |
has_clear_movement_path(location) | table | bool | Проверить путь в том же мире на столкновения, границы мира и загруженность чанков. Для сущностей, не являющихся игроками, также отклоняются защищённые регионы. Сущность не перемещается. |
movement_path_status(location) | table | string | Вернуть clear, blocked, protected или unavailable; protected применяется к сущностям, не являющимся игроками. Проверка столкновений учитывает объём сущности на всём пути. |
Свободный путь для игрока не разрешает вход или бой. Фактическое перемещение по-прежнему подчиняется обработчикам движения, включая ограничения входа в регионы; одна лишь защита строительства не запрещает игрокам перемещаться.
Общие аргументы локаций требуют x, y и z. При отсутствии мира используется мир сущности; неизвестное имя мира тоже сохраняет этот запасной вариант. Отдельные запросы em.location.* требуют загруженный мир и принимают отсутствующие координаты за ноль. Прямая телепортация, изменение скорости и урон автоматически не вызывают проверку пути или can_receive_hostile_effect.
can_receive_hostile_effect требует валидного подключённого игрока и валидную живую цель в том же мире, которая не является игроком. Проверка отвергает стойки для брони, неуязвимые сущности, сущности с тегом NPC и приручённых животных. EliteMobs может добавлять ограничения допуска к бою. Некорректные строки UUID в set_shooter и set_owner, а также неизвестные значения перечисления в set_pickup могут вызвать ошибку.
Таблица Entity: обогащение EliteMobs
EliteMobs добавляет эти значения в общие таблицы сущностей. Флаги отслеживания и наличие elite определяются при создании таблицы; только явно отмеченные актуальные поля обновляются при чтении. Необязательный адаптер EliteMobs в FreeMinecraftModels добавляет данные элиты, но не elite_player.
Свойства
| Поле | Тип | Описание |
|---|---|---|
is_elite | bool | Отслеживал ли EliteMobs сущность при создании таблицы. |
is_custom_boss | bool | Является ли отслеживаемый элита кастомным боссом. |
is_significant_boss | bool | Является ли он кастомным боссом с множителем здоровья выше 1. |
elite | table/nil | Вложенные данные EliteMobs, присутствуют только для распознанного элиты. |
elite.level | int | Снимок уровня элиты. |
elite.name | string/nil | Снимок отображаемого имени элиты. |
elite.health | number | Актуальное здоровье. |
elite.max_health | number | Актуальное максимальное здоровье. |
elite.is_custom_boss | bool | Является ли элита кастомным боссом. |
elite.health_multiplier | number | Снимок настроенного множителя здоровья. |
elite.damage_multiplier | number | Снимок настроенного множителя урона. |
elite_player | table/nil | Таблица только для игрока; вычисляется при чтении, если существуют данные игрока EliteMobs. |
elite_player.tier | number | Боевой ранг игрока, вычисленный по опыту навыков без обновления запросов зачарований. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
elite.remove() | — | nil | Удалить элиту через конвейер удаления EliteMobs. |
Таблица Entity: обогащение FreeMinecraftModels
FreeMinecraftModels добавляет эти снимки значений; model существует, только если при создании таблицы is_modeled равно true. Значения только для игроков появляются лишь в их таблицах. Методы моделей и проверки прав обращаются к исходным объектам при вызове. В скриптах EliteMobs необязательный адаптер FreeMinecraftModels из EliteMobs добавляет is_modeled, is_prop и model, но не is_op и has_permission.
Свойства
| Поле | Тип | Описание |
|---|---|---|
is_modeled | bool | Распознаёт ли FreeMinecraftModels сущность с моделью. |
is_prop | bool | Является ли сущность пропом FreeMinecraftModels на основе стойки для брони. |
model | table/nil | Вложенные данные модели, присутствуют только для сущности с моделью. |
model.model_id | string/nil | Идентификатор чертежа модели. |
model.is_dynamic | bool | Является ли сущность с моделью динамической. |
is_op | bool | Снимок состояния оператора сервера, только для игроков. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
model.play_animation(name, blend?=false, loop?=false) | string, bool?=false, bool?=false | bool | Запросить анимацию. True означает принятие, в том числе постановку в очередь или подавление атаки, а не начало воспроизведения. Терминальная анимация смерти отклоняет новые запросы. |
model.stop_animations() | — | nil | Очистить текущие и ожидающие анимации, вернувшись к idle, если не зафиксирована терминальная смерть. |
model.remove() | — | nil | Удалить сущность с моделью. |
has_permission(node) | string | bool | Проверка права, только для игроков. |
Таблица Living Entity
Таблица живой сущности MagmaCore наследует все свойства и методы таблицы Entity.
Свойства
| Поле | Тип | Описание |
|---|---|---|
health | number | Актуальное здоровье. |
maximum_health | number | Актуальное максимальное здоровье. |
name | string/nil | Актуальное имя сущности Bukkit. |
is_alive | bool | Актуальная инверсия состояния смерти Bukkit. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
damage(amount) | number | nil | Нанести урон Bukkit. |
push(x, y, z) | number, number, number | nil | Немедленно добавить вектор к текущей скорости. |
set_facing(x, y, z) | number, number, number | nil | Телепортировать на месте, задав направление взгляда. |
add_potion_effect(type, duration, amplifier) | string (PotionEffectType), int, int | nil | Добавить эффект зелья, если тип распознан. |
remove_potion_effect(type) | string (PotionEffectType) | nil | Убрать эффект зелья, если тип распознан. |
get_scale() | — | number | Вернуть итоговый атрибут масштаба с модификаторами или 1.0, если он недоступен. |
set_scale(value) | number | nil | Задать базовое значение атрибута масштаба, если сервер это поддерживает. |
set_ai(enabled) | bool | nil | Включить или отключить ИИ живой сущности. |
set_owner(player_uuid) | string | bool | Приручить поддерживаемую сущность для подключённого игрока; также сбросить агрессию волка. False для неподдерживаемой сущности или недоступного игрока. |
has_potion_effect(type) | string | bool | Проверить эффект по имени Bukkit; false, если имя не распознано. |
Таблица Player
Таблица игрока MagmaCore наследует все свойства и методы таблицы Living Entity.
В скриптах FMM таблица игрока также предоставляет is_holding_elitemobs_item(filename). Метод проверяет тег имени файла EliteMobs у предмета в основной руке независимо от отображаемого имени и перевода. Он возвращает false для пустой руки, другого предмета или недоступной интеграции EliteMobs. Передавайте имя файла с .yml, например player:is_holding_elitemobs_item("shroomwhispers_shears.yml").
Свойства
| Поле | Тип | Описание |
|---|---|---|
game_mode | string | Снимок игрового режима Bukkit в нижнем регистре. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
send_message(text) | string | nil | Отправить текст, обработанный парсером цветов MagmaCore. |
chat(text) | string | nil | Отправить чат через Bukkit, включая выполнение команд с начальным слешем от имени игрока. Текст проходит обработку цветов. |
get_held_item() | — | table/nil | Вернуть снимок {type, amount, display_name} основной руки или nil для пустой руки. type в верхнем регистре; безымянный предмет использует имя материала как отображаемое имя. |
consume_held_item(amount?=1) | int?=1 | nil | Поставить в очередь уменьшение того стака, который будет в основной руке при выполнении. Проверенный предмет не сохраняется, результат оплаты не возвращается. Передавайте положительное число; отрицательное не отвергается. |
has_item(material, amount?=1) | string (Material), int?=1 | bool | Проверить, содержит ли инвентарь запрошенное количество. |
get_target_entity(range?=50) | number?=50 | table/nil | Провести луч от глаз по блокам и сущностям, исключая игрока; размер луча для сущностей 0.5. Жидкости и проходимые блоки игнорируются. |
get_eye_location() | — | table | Вернуть локацию глаз. |
get_look_direction() | — | table | Вернуть единичное направление {x, y, z}. |
send_block_change(x, y, z, material, ticks?=-1) | int, int, int, string (Material), int?=-1 | bool | Поставить в очередь блок только для клиента и сброс после положительного числа тиков. Некорректный или неблочный материал возвращает false; true означает постановку в очередь. |
reset_block(x, y, z) | int, int, int | bool | Поставить в очередь восстановление реального блока для этого игрока. |
sleep(x, y, z) | number, number, number | nil | Поставить в очередь установку настоящей белой кровати и попытку сна. После пробуждения или отключения восстановить исходный BlockData, но не содержимое блочной сущности. |
wake_up() | — | nil | Поставить в очередь пробуждение спящего игрока. |
show_boss_bar(text, color?=WHITE, progress, ticks?=-1) | string, string (BarColor)?=WHITE, number, int?=-1 | nil | Заменить сплошную полосу босса, ограничить progress диапазоном 0..1, заменить неверный цвет на WHITE и скрыть после положительного числа тиков. Передайте nil вместо цвета, чтобы указать обязательный progress третьим аргументом. |
hide_boss_bar() | — | nil | Убрать активную Lua-полосу босса игрока. |
show_action_bar(text, ticks?=-1) | string, int?=-1 | nil | Отправить один раз или повторять каждые 40 тиков до конца положительной длительности. |
show_title(title, subtitle?="", fade_in, stay, fade_out) | string, string?="", int, int, int | nil | Показать заголовок с обработкой цветов в заголовке и подзаголовке. |
Общие полосы принадлежат игроку в пределах копии MagmaCore плагина и не изолированы по скриптам: новый show_boss_bar заменяет текущую полосу игрока, а новый show_action_bar отменяет текущий повтор панели действий. Таймер истечения убирает только ту полосу или панель действий, которая его запустила, поэтому старый таймер больше не убирает более новую. Эти таймеры и изменения блоков в очереди не принадлежат context.scheduler. Изменение и сброс блока читают мир игрока при выполнении задачи; не рассчитывайте на восстановление нужного блока после смены мира. Проверка завершения сна впервые выполняется через 20 тиков, затем каждые 10 тиков.
Таблица World
Таблица мира MagmaCore доступна как context.world и сохраняет мир при создании. Силы боссов наследуют её с описанными ниже переопределениями. Поиск ближайших сущностей возвращает массивы с индексом от единицы и использует параллелепипеды по осям мира с radius в качестве каждого полуразмера. Владелец скрипта и игровые режимы не отфильтровываются.
Свойства
| Поле | Тип | Описание |
|---|---|---|
name | string | Снимок имени мира. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_block_at(x, y, z) | int, int, int | string | Вернуть имя Material в нижнем регистре или air, не подгружая незагруженный чанк. |
set_block_at(x, y, z, material) | int, int, int, string (Material) | bool | Поставить размещение блока в очередь; некорректные материалы возвращают false, а незагруженные чанки пропускаются задачей из очереди. |
get_highest_block_y(x, z) | int, int | int | Вернуть наибольшую координату Y блока. |
spawn_particle(particle, x, y, z, count?=1, dx?=0, dy?=0, dz?=0, speed?=0) | string (Particle), number, number, number, int?=1, number?=0, number?=0, number?=0, number?=0 | nil | Создать частицу; некорректные имена ничего не делают. |
play_sound(sound, x, y, z, volume?=1, pitch?=1) | string (Sound), number, number, number, number?=1, number?=1 | nil | Воспроизвести зарегистрированный звук или ключ звука ресурс-пака с пространством имён в нижнем регистре. |
strike_lightning(x, y, z) | number, number, number | nil | Ударить молнией. |
get_time() | — | int | Вернуть время мира в тиках. |
set_time(ticks) | int | nil | Задать время мира. |
get_nearby_entities(x, y, z, radius) | number, number, number, number | table | Вернуть ближайшие таблицы Entity или Living Entity. |
get_nearby_players(x, y, z, radius) | number, number, number, number | table | Вернуть ближайшие таблицы Player. |
spawn_entity(type, x, y, z) | string (EntityType), number, number, number | table/nil | Создать ванильную сущность. Неизвестное имя перечисления возвращает nil; допустимый, но несоздаваемый тип может вызвать ошибку. |
raycast(from_x, from_y, from_z, dir_x, dir_y, dir_z, max_distance?=50, fluid_mode?=NEVER, blocks_only?=false, loaded_only?=false) | шесть чисел, number?, string?, bool?, bool? | table/nil | Вернуть hit_entity, hit_location и hit_block. Режимы жидкости: NEVER, SOURCE_ONLY, ALWAYS. С loaded_only незагруженный чанк в охватывающем луч прямоугольнике приводит к nil. |
place_temporary_block(x, y, z, material, ticks?=0, require_air?=false) | int, int, int, string (Material), int?=0, bool?=false | bool | Разместить временный блок; некорректные материалы или незагруженные чанки возвращают false. |
drop_item(x, y, z, material, amount?=1) | number, number, number, string (Material), int?=1 | table/nil | Выбросить предмет естественным образом и вернуть его таблицу Entity; некорректные материалы возвращают nil. |
spawn_firework(x, y, z, colors, type?=BALL, power?=1) | number, number, number, table, string (FireworkEffect.Type)?=BALL, int?=1 | nil | Поставить фейерверк в очередь, используя имена констант Bukkit Color; если ни одна не распознана, по умолчанию белый. |
strike_lightning_at_location(location) | table | nil | Ударить молнией в мире из таблицы локации. |
play_sound_at_location(location, sound, volume?=1, pitch?=1) | table, string (Sound), number?=1, number?=1 | nil | Воспроизвести зарегистрированный звук или ключ звука ресурс-пака с пространством имён в нижнем регистре. |
spawn_particle_at_location(location, particle, count?=1, dx?=0, dy?=0, dz?=0, speed?=0) | table, string (Particle), int?=1, number?=0, number?=0, number?=0, number?=0 | nil | Создать частицу через эту таблицу мира. Локация должна быть в том же мире. |
get_block_at_location(location) | table | string | Вернуть имя материала в нижнем регистре или air для некорректной локации либо незагруженного чанка. |
set_block_at_location(location, material) | table, string (Material) | bool | Поставить в очередь размещение блока в мире из таблицы локации. |
place_temporary_block_at_location(location, material, ticks?=0, require_air?=false) | table, string (Material), int?=0, bool?=false | bool | Разместить временный блок в мире из таблицы локации. |
get_highest_block_y_at_location(location) | table | int/nil | Вернуть наибольшую координату Y блока или nil для некорректной локации. |
terrain_impact_at_location(location, options?) | table, table? | table/nil | Показать временный визуальный эффект удара по земле. Параметры: radius=4.5 (0.5–6), intensity=1 (0–1), duration_ticks=35 (1–200), view_range=48 (1–96), seed. Возвращает дескриптор или nil. |
terrain_impact(x, y, z, options?) | number, number, number, table? | table/nil | Показать тот же визуальный эффект по координатам в этом мире. |
impact.is_active() | — | bool | Проверить, активен ли эффект; impact.id содержит его строковый идентификатор. |
impact.remove() | — | bool | Удалить активный эффект; false, если он уже неактивен или удаление не удалось. |
get_entity(uuid) | string | table/nil | Найти валидную сущность в реестре загруженных сущностей этого мира. Передавайте корректную строку UUID. |
block_is_passable(x, y, z) | int, int, int | bool/nil | Вернуть проходимость блока или nil для незагруженного чанка либо координат за пределами высоты мира. |
location_is_protected(location) | table | bool | Запросить зарегистрированных поставщиков защиты; отсутствующий мир заменяется миром этой таблицы. |
spawn_dust(location, count, red, green, blue) | table, int, int, int, int | nil | Создать DUST фиксированного размера с RGB 0–255 и разбросом 0.1 по каждой оси. Незагруженные чанки пропускаются. Локация должна быть в этом мире. |
Без попадания raycast возвращает пустую таблицу с nil в полях попадания. Блок представлен как hit_block = {x, y, z, material}, материал в нижнем регистре. Совмещённый луч использует размер 0.5 для сущностей без их фильтрации. loaded_only=true проверяет весь охватывающий прямоугольник и может отказать из-за чанка, не лежащего прямо на луче. Неверный режим жидкости вызывает ошибку.
Имена общих частиц переводятся в верхний регистр. Эти позиционные методы не принимают данные частицы, поэтому частица с обязательными данными может вызвать ошибку. Для RGB-пыли используйте spawn_dust. Запросы верхнего блока и методы создания не имеют общей проверки загруженности чанка. Размещение блоков автоматически не проверяет защиту регионов. Результат true не доказывает выполнение изменения из очереди или успешную проверку require_air.
Временные блоки с положительной длительностью сохраняют исходный BlockData и восстанавливают его по окончании таймера, при выгрузке чанка или мира либо при выключении плагина. Восстановление происходит, только если на месте всё ещё стоит временный блок, поэтому более позднее изменение не перезаписывается. Повторная установка временного блока там, где он уже стоит, перезапускает таймер и сохраняет первый сохранённый оригинал. Блоки с блочными сущностями, например сундуки и таблички, незагруженные чанки и блоки, уже удерживаемые другим владельцем временных блоков, пропускаются. Разрушение временного блока ничего не выбрасывает и прекращает учёт без восстановления; установка блока на это место также прекращает учёт. При неположительной длительности блок ставится навсегда без учёта. Это не система отката изменений отдельного скрипта.
Общие дополнения мира EliteMobs
EliteMobs регистрирует эти методы в общих таблицах мира, в том числе для NPC. Целевой чанк должен быть загружен. Общий spawn_boss_at_location требует локацию и уровень; силы боссов переопределяют его вариантом с необязательными аргументами, указанным ниже.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
lightning_effect_at_location(location) | table | nil | Показать молнию без обычного урона, используя обход появления молнии EliteMobs. |
spawn_npc_at_location(file, location) | string, table | table/nil | Создать настроенного NPC и вернуть дескриптор с remove() или nil, если создание невозможно. |
spawn_boss_at_location(file, location, level) | string, table, int | table/nil | Создать настроенного кастомного босса и вернуть общую таблицу Living Entity или nil, если он недоступен. |
context.world: дополнения FreeMinecraftModels
FreeMinecraftModels регистрирует эти методы в собственной таблице мира MagmaCore для скриптов пропсов. Каждый метод возвращает false, если EliteMobs не включён или игрок не распознан. Методы добычи используют локацию игрока, если переданная локация отсутствует или непригодна.
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
start_elitemobs_transport(player, route_id) | player, string | bool | Запустить сохранённый маршрут транспорта EliteMobs для игрока в том же мире; false, если игрок или интеграция недоступны. |
drop_elitemobs_procedural_loot(player, level, location?) | table/string, int, table? | bool | Выбросить один процедурно сгенерированный предмет EliteMobs для игрока; возвращает false, если выпадение процедурных предметов отключено. |
drop_elitemobs_random_loot(player, level, location?) | table/string, int, table? | bool | Прокрутить таблицы добычи EliteMobs для игрока на заданном уровне. |
drop_elitemobs_custom_loot(player, file, level, location?) | table/string, string, int, table? | bool | Выбросить конкретный файл кастомного предмета EliteMobs для игрока; возвращает false, если файл не распознан. |
Аргумент player принимает таблицу игрока, строку UUID или точное имя игрока. Аргумент location принимает таблицу локации либо таблицу сущности, содержащую current_location. Процедурная добыча учитывает настройку прямой выдачи в инвентарь EliteMobs, включая выбрасывание излишков у игрока. Она не всегда появляется в запрошенной локации.
Вспомогательная таблица em
MagmaCore предоставляет эту таблицу глобально до запуска хуков. Конструкторы создают только данные: они не регистрируют наблюдение, не загружают мир и не проверяют полную фигуру. Глобальные функции вызываются через точку. Методы возвращённых локаций и зон также принимают двоеточие, изменяют свою таблицу и возвращают её же. Сеттеры зон сохраняют ссылку на переданную таблицу локации.
Свойства
Конструкторы-помощники возвращают приведённые ниже компактные таблицы данных.
| Поле | Тип | Описание |
|---|---|---|
location.x | number | Координата X, возвращаемая em.create_location. |
location.y | number | Координата Y, возвращаемая em.create_location. |
location.z | number | Координата Z, возвращаемая em.create_location. |
location.world | string/nil | Имя мира, если оно передано в em.create_location. |
location.yaw | number/nil | Yaw, если он передан в em.create_location. |
location.pitch | number/nil | Pitch, если он передан в em.create_location. |
vector.x | number | Компонента X, возвращаемая em.create_vector. |
vector.y | number | Компонента Y, возвращаемая em.create_vector. |
vector.z | number | Компонента Z, возвращаемая em.create_vector. |
zone.kind | string | sphere, dome, cylinder, cuboid, cone, static_ray, rotating_ray или translating_ray. |
zone.radius | number/nil | Радиус сферы, купола, цилиндра или конуса. |
zone.height | number/nil | Высота цилиндра. |
zone.x | number/nil | Размер кубоида по X. |
zone.y | number/nil | Размер кубоида по Y. |
zone.z | number/nil | Размер кубоида по Z. |
zone.length | number/nil | Длина конуса или луча. |
zone.thickness | number/nil | Толщина статического луча. |
zone.point_radius | number/nil | Радиус точки вращающегося или перемещающегося луча. |
zone.animation_duration | number/nil | Длительность анимации вращающегося или перемещающегося луча. |
zone.origin | table/nil | Локация, заданная через set_center или set_origin. |
zone.destination | table/nil | Локация, заданная через set_destination. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
em.create_location(x, y, z, world?, yaw?, pitch?) | number, number, number, string?, number?, number? | table | Вернуть таблицу локации. |
em.create_vector(x, y, z) | number, number, number | table | Вернуть таблицу вектора {x, y, z}. |
location.add(dx?=0, dy?=0, dz?=0) | number?=0, number?=0, number?=0 | table | Прибавить на месте и вернуть ту же таблицу локации. |
em.zone.create_sphere_zone(radius) | number | table | Вернуть определение сферы с set_center(location). |
em.zone.create_dome_zone(radius) | number | table | Вернуть определение купола с set_center(location). |
em.zone.create_cylinder_zone(radius, height) | number, number | table | Вернуть определение цилиндра с set_center(location). |
em.zone.create_cuboid_zone(x, y, z) | number, number, number | table | Вернуть определение кубоида с set_center(location). |
em.zone.create_cone_zone(length, radius) | number, number | table | Вернуть определение конуса с set_origin(location) и set_destination(location). |
em.zone.create_static_ray_zone(length, thickness) | number, number | table | Вернуть определение статического луча с сеттерами origin и destination. |
em.zone.create_rotating_ray_zone(length, point_radius, animation_duration) | number, number, number | table | Вернуть определение вращающегося луча с сеттерами origin и destination. |
em.zone.create_translating_ray_zone(length, point_radius, animation_duration) | number, number, number | table | Вернуть определение перемещающегося луча с сеттерами origin и destination. |
zone.set_center(location) | table | table | Задать центр как zone.origin и вернуть ту же таблицу зоны. |
zone.set_origin(location) | table | table | Задать origin и вернуть ту же таблицу зоны. |
zone.set_destination(location) | table | table | Задать destination и вернуть ту же таблицу зоны. |
em.location.is_in_dungeon(location) | table | bool | Проверить зарегистрированные регионы подземелий и владельцев, сообщающих о типе dungeon. |
em.location.is_protected(location) | table | bool | Проверить встроенные адаптеры WorldGuard/GriefPrevention и зарегистрированных плагинами владельцев защиты. |
em.location.owned_by(location, namespace) | table, string | bool | Проверить владение по пространству имён плагина. |
em.location.owners(location) | table | table | Вернуть массив строк с пространствами имён владельцев. |
em.location.kinds_at(location) | table | table | Вернуть массив строк с типами владения. |
em.location.has_kind(location, kind) | table, string | bool | Проверить тип владения. |
В em.location.* поле world должно быть именем загруженного мира или таблицей с name; подстановки мира владельца нет. Отсутствующий или неизвестный мир даёт false либо пустой массив, отсутствующие координаты принимаются за ноль. Пространства имён владельцев чувствительны к регистру, теги типа владения нет. Само владение не означает подземелье или защиту. Запросы учитывают зарегистрированных поставщиков, а не любой установленный плагин защиты; сбой зарегистрированного адаптера регионов трактуется как наличие защиты. Порядок массивов владельцев и типов не гарантирован.
Контекст программы Mind
Нативные коллбэки Mind используют этот контекст вместо обычного контекста силы или NPC. Программы поведения из файлов загружаются также из plugins/EliteMobs/behaviors/; см. настройку поведения босса. Интеграции EliteMobs регистрируют определения ai.program и ai.module через EliteMindService; размещение этих определений в обычном каталоге powers не регистрирует программу Mind.
| Поле | Тип | Описание |
|---|---|---|
tick, generation | number | Текущий игровой тик и поколение среды выполнения. |
entity | table | Общая таблица живой сущности для актора. |
memory, perception, actuator, actions | table | Перечисленные ниже сервисы действуют в рамках текущего коллбэка. |
| Метод | Аргументы | Результат | Описание |
|---|---|---|---|
memory.get(key) | string | value/nil | Прочитать объявленный ключ памяти. |
memory.set(key, value, ttl_ticks?) | string, value, int? | nil | Записать объявленное значение памяти с настроенным типом и необязательным сроком действия. |
memory.forget(key) | string | nil | Удалить объявленное значение памяти. |
memory.contains(key) | string | bool | Проверить наличие объявленного значения памяти. |
perception.current_target() | — | table/nil | Вернуть текущую цель в виде общей таблицы живой сущности. |
perception.nearest_player(radius) | number | table/nil | Вернуть ближайшего игрока в пределах радиуса. |
perception.can_see(entity_or_uuid) | table/string | bool | Проверить прямую видимость живой сущности. |
perception.navigation() | — | table | Вернуть destination_active, navigation_in_progress, consecutive_stuck_ticks, необязательное поле destination и необязательное поле last_progress с tick и position. |
actuator.move_to(location, speed?=1) | table, number?=1 | bool | Запросить перемещение к позиции в том же мире с конечной положительной скоростью; false, если поиск пути не начался. |
actuator.stop_moving() | — | nil | Остановить навигацию. |
actuator.look_at(location) | table | nil | Посмотреть в сторону позиции. |
actuator.jump() | — | nil | Запросить прыжок. |
actuator.set_target(entity_or_uuid) | table/string | bool | Назначить живую цель; false, если сущность не найдена. |
actuator.clear_target() | — | nil | Сбросить цель. |
actuator.attack(entity_or_uuid) | table/string | bool | Запросить атаку; false, если цель не найдена. |
actuator.stop_all() | — | nil | Остановить движение, цель и атаку, которые покрывают удерживаемые этим поведением элементы управления. |
actions.request(identifier, payload?) | string, table? | string | Запросить семантическое действие и вернуть результат в нижнем регистре. Данные поддерживают скаляры, таблицы UUID сущностей и таблицы позиций world/x/y/z. |
Каждый коллбэк создаёт разделы сервисов при первом обращении и повторно использует их в пределах этого коллбэка. Ключи памяти должны быть объявлены; обращение к необъявленным ключам вызывает ошибку. Успешный результат actuator.set_target или actuator.attack означает, что живая цель найдена и запрос передан, а не что навигация или атака завершились. Данные действия поддерживают указанные скалярные значения и значения сущностей/позиций, но не произвольные вложенные таблицы Lua. Идентификаторы действий должны быть ключами с пространством имён в нижнем регистре длиной не более 128 символов; данные содержат не более 16 записей с ключами в нижнем регистре длиной не более 64 символов, а строковые значения ограничены 256 символами. Каждый метод исполнительного механизма, кроме stop_all, а также actions.request вызывают ошибку, если вызывающее поведение не удерживает соответствующий элемент управления. Сенсоры вообще не могут использовать исполнительный механизм и действия. Программы поведения на Lua описаны в разделе Программы поведения.
Глобальная таблица ai
MagmaCore устанавливает эту глобальную таблицу в каждой среде Lua. Конструкторы лишь помечают переданную им таблицу; EliteMobs компилирует помеченные таблицы из файлов программ поведения.
| Поле | Тип | Описание |
|---|---|---|
ai.controls.move, look, jump, target, attack, use_item, action | string | Имена элементов управления для массива controls поведения; у use_item нет метода исполнительного механизма в Lua. |
| Метод | Аргументы | Результат | Описание |
|---|---|---|---|
ai.program(definition) | table | table | Пометить определение программы с id, revision и необязательными modules, memories, sensors, behaviors, budget и runaway. |
ai.module(definition) | table | table | Пометить определение модуля с id, revision и необязательными dependencies, memories, sensors и behaviors. |
ai.sensor(definition) | table | table | Пометить сенсор с id, interval?=1 и sense(c). |
ai.behavior(definition) | table | table | Пометить поведение с id, priority?=0, controls, can_start, can_continue, start, tick и stop(c, reason). |
context.mind_action: хук силы EliteMobs
Доступен в on_mind_action(context). Хук возвращает "accepted", "deferred" или "rejected"; подключённые силы перебираются в порядке подключения, пока одна не примет действие.
| Поле | Тип | Описание |
|---|---|---|
key | string | Идентификатор семантического действия с пространством имён. |
payload | table | Изменяемая копия данных действия в Lua. Исходный запрос Java неизменяем; UUID представлены строками, позиции таблицами, а не исходными объектами. |
game_tick, generation | number | Тик действия и поколение среды выполнения. |
context.state
Каждый экземпляр скрипта MagmaCore получает обычную таблицу Lua, которая сохраняется на всё время жизни этого экземпляра. Используйте её для счётчиков, флагов, идентификаторов задач и значений, разделяемых между хуками.
context.state.counter = (context.state.counter or 0) + 1
context.log
Методы MagmaCore, FreeMinecraftModels и NPC EliteMobs
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
info(message) | string | nil | Записать информационное сообщение с общим префиксом Lua. |
warn(message) | string | nil | Записать предупреждение. |
error(message) | string | nil | Записать через общий канал предупреждений. |
Методы сил боссов EliteMobs
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
info(message) | string | nil | Записать информационное сообщение о силе босса. |
warn(message) | string | nil | Записать предупреждение. |
debug(message) | string | nil | Записать информационное сообщение с отладочным префиксом Lua-силы. |
context.scheduler
Запланированные задачи принадлежат экземпляру скрипта и отменяются при его завершении. Оба приведённых ниже семейства имён доступны на общих поверхностях MagmaCore и в силах боссов EliteMobs.
Коллбэк получает свежий контекст без исходного события и игрока. Сохраняйте нужные UUID, а не старый контекст с ленивыми полями события. Во время паузы одноразовая задача ждёт возобновления, повторяющаяся пропускает вызовы. Ошибка коллбэка закрывает экземпляр скрипта. Отмена его задач не откатывает сущности, мир или отдельные таймеры интерфейса Bukkit.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
run_later(ticks, callback) | int, function | int | Выполнить один раз после задержки и вернуть ID задачи Bukkit. |
run_repeating(delay, interval, callback) | int, int, function | int | Выполнять повторно после начальной задержки и вернуть ID задачи. |
cancel(task_id) | int | nil | Отменить принадлежащую скрипту задачу. |
run_after(ticks, callback) | int, function | int | Псевдоним для run_later. |
run_every(interval, callback) | int, function | int | Выполнять повторно без начальной задержки и вернуть ID задачи. |
cancel_task(task_id) | int | nil | Псевдоним для cancel. |
context.cooldowns
Без локального ключа используется __lua: плюс имя файла. Явные ключи используются без изменений. Общее локальное хранилище MagmaCore принадлежит адаптеру владельца: FMM создаёт отдельный адаптер на каждый скрипт пропа, а все скрипты одного NPC EliteMobs используют один адаптер и могут пересекаться по явному локальному ключу. Глобальные перезарядки FMM общие для скриптов одного пропа; у NPC они общие в его адаптере.
Силы боссов используют общее хранилище босса для локальных ключей и встроенную перезарядку силы для глобального состояния. Локальные таймеры и общие глобальные таймеры MagmaCore измеряют реальное время по 50 мс на тик, включая паузы и низкий TPS. Глобальные перезарядки босса считают серверные тики и сохраняют более позднее время окончания: более короткий set_global никогда не сокращает активную глобальную перезарядку, а неположительная длительность ничего не делает. Проверка или установка локальной перезарядки автоматически не проверяет и не устанавливает глобальную.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
local_ready(key?) | string? | bool | Проверить, готова ли локальная перезарядка по ключу. |
local_remaining(key?) | string? | int | Вернуть оставшиеся тики или 0, если готово. |
check_local(key, duration) | string/nil, int | bool | Если готово, запустить перезарядку и вернуть true. Для ключа по умолчанию передайте nil. |
set_local(duration, key?) | int, string? | nil | Задать или сбросить локальную перезарядку; неположительная длительность сбрасывает её. |
global_ready() | — | bool | Проверить, готова ли глобальная перезарядка владельца. |
set_global(duration) | int | nil | Задать глобальную перезарядку в тиках. На общих поверхностях MagmaCore неположительная длительность сбрасывает её. |
context.zones: общая поверхность MagmaCore
Скрипты FreeMinecraftModels, NPC-скрипты EliteMobs и другие стандартные потребители MagmaCore получают целочисленные дескрипторы зон в мире текущего владельца скрипта.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
create_sphere(x, y, z, radius) | number, number, number, number | int/nil | Зарегистрировать сферу и вернуть её дескриптор или nil, если у владельца нет мира. |
create_cylinder(x, y, z, radius, height) | number, number, number, number, number | int/nil | Зарегистрировать цилиндр и вернуть его дескриптор или nil, если у владельца нет мира. |
create_cuboid(x, y, z, x_size, y_size, z_size) | number, number, number, number, number, number | int/nil | Зарегистрировать кубоид и вернуть его дескриптор или nil, если у владельца нет мира. |
watch(handle, on_enter?, on_leave?) | int, function?, function? | bool/nil | Включить отслеживание границ для известного дескриптора. Наличие функции включает соответствующий хук on_zone_enter или on_zone_leave; тело переданной функции напрямую не вызывается. |
unwatch(handle) | int | nil | Прекратить отслеживание и удалить дескриптор. |
Общее наблюдение проверяет точки локаций игроков. Размеры кубоида здесь являются полуразмерами; нулевой Z заменяется ненулевым X. Объём может отличаться от запросов пересечения сущностей и выборки точек EliteMobs. Зона сохраняет координаты и мир создания, но каждый тик проверяются игроки в текущем мире владельца. Пересекающий границу игрок доступен через context.player и context.event.player.
Учёт присутствия начинается сразу при создании, до установки обработчиков через watch. Поздний watch не выдаёт вход для уже учтённого игрока внутри. Пропуск коллбэка при повторном вызове watch не удаляет прежний обработчик. Отключение игрока и unwatch не гарантируют хук выхода. Проверки зон выполняются до on_game_tick.
context.event: общая поверхность MagmaCore
Эта таблица существует, пока у общего хука есть текущее событие Bukkit или действующее лицо. Она отсутствует в запланированных обратных вызовах и в хуках без обоих этих значений.
| Поле или метод | Тип | Описание |
|---|---|---|
is_cancelled | bool | Состояние отмены при первом получении вложенной таблицы события; вызовы cancel() и uncancel() не обновляют поле. |
cancel() | метод | Отменить текущее событие. Присутствует, только если оно реализует Bukkit Cancellable. |
uncancel() | метод | Снять отмену текущего события. Присутствует, только если оно реализует Bukkit Cancellable. |
player | table | Таблица Living Entity для текущего действующего лица, если оно доступно. |
Обобщённые хуки зон предоставляют действующее лицо, но не отменяемое событие Bukkit, поэтому они выдают is_cancelled = false и player без cancel() и uncancel().
context.item
Скрипты действий зачарования получают эту таблицу, если захваченный источник содержит слот инвентаря и предмет. Она обращается именно к этому слоту и сверяет материал и метаданные текущего предмета со снимком, игнорируя повреждение и количество. Она не ищет предмет в инвентаре и не отслеживает уникальную идентичность: равноценная замена в том же слоте тоже подходит. После расходования боеприпаса таблица может быть nil. Это отдельный механизм, не прежняя среда экипированных предметов FreeMinecraftModels.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_durability() | — | table/nil | Оставшаяся прочность {current, max}; nil для недоступного предмета или материала без прочности. |
get_durability_percentage() | — | number/nil | Оставшаяся прочность, делённая на максимум материала. Обычно 0..1, но внешне завышенное повреждение в метаданных может вывести значение за пределы. |
use_durability(amount, can_break?=false) | int, bool? | bool | Изменить повреждение; отрицательные значения чинят предмет. По умолчанию остаётся хотя бы одна единица прочности; can_break=true может израсходовать стак. |
use_durability_percentage(fraction, can_break?=false) | number, bool? | bool | Применить повреждение ceil(max_durability * fraction) с тем же правилом поломки. |
consume(amount) | положительный int | bool | Израсходовать предметы из захваченного стака, только если их достаточно. |
Используется максимальная прочность материала, а не кастомный компонент максимального повреждения. Эти прямые изменения обходят ванильный расчёт износа, Unbreaking, неразрушимость и события повреждения предмета игрока. Доля должна быть конечной, а результат помещаться в целое число; отрицательная доля чинит предмет. Поломка расходует весь захваченный стак. Жизненный цикл действия и полный контекст описаны в авторских зачарованиях.
context.prop
Скрипты пропсов FreeMinecraftModels получают эту таблицу, которая наследует таблицу Entity MagmaCore, если существует опорная сущность.
Свойства
| Поле | Тип | Описание |
|---|---|---|
model_id | string/nil | Имя чертежа модели или nil, если чертежа нет. |
current_location | table/nil | Актуальная локация пропа. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
play_animation(name, blend?=true, loop?=true) | string, bool?=true, bool?=true | bool | Воспроизвести именованную анимацию. |
stop_animation() | — | nil | Очистить текущие и ожидающие анимации и вернуться к idle, если не зафиксирована терминальная смерть. |
hurt_visual() | — | nil | Проиграть красную визуальную реакцию на урон без нанесения урона. |
pickup() | — | nil | Поставить в очередь окончательное удаление и выбросить предмет размещения. |
has_mount_points() | — | bool | Проверить, есть ли у пропа кости точек посадки. |
mount(player) | table | bool | Поставить в очередь посадку распознанного игрока на первое свободное место. |
dismount(player) | table | bool | Поставить в очередь высадку распознанного игрока с этого пропа. |
get_passengers() | — | table | Вернуть таблицы Entity сидящих игроков. |
spawn_elitemobs_boss(file, x, y, z) | string, number, number, number | table/nil | Создать кастомного босса EliteMobs, если EliteMobs включён. |
open_inventory(player, title, rows?=3) | table, string, int?=3 | bool | Поставить в очередь открытие постоянного хранилища; число рядов ограничено диапазоном от 1 до 6. |
place_book(player) | table | bool | Поставить в очередь сохранение одной находящейся в руке подписанной или пустой книги, если у пропа книги нет. |
read_book(player) | table | bool | Поставить в очередь открытие сохранённой подписанной книги. |
take_book(player) | table | bool | Поставить в очередь возврат сохранённой книги игроку. |
has_book() | — | bool | Проверить, хранит ли проп книгу. |
drop_inventory() | — | bool | Поставить в очередь очистку постоянного хранилища и выбрасывание его предметов. |
drop_book() | — | bool | Поставить в очередь очистку и выбрасывание сохранённой книги. |
is_viewing_inventory(player) | table | bool | Проверить, просматривает ли игрок отслеживаемый инвентарь этого пропа. |
set_persistent_data(key, value) | string, string | bool | Сохранить строку под ключом fmm_lua_, ограниченным этим пропом. |
get_persistent_data(key) | string | string/nil | Вернуть сохранённую строку или nil. |
Для операций пропа в очереди true означает успешную начальную проверку игрока и опорной сущности. Это не подтверждает свободное место, сохранение книги или открытие интерфейса. take_book удаляет сохранённую книгу перед вставкой в инвентарь и не выбрасывает излишек. Все зрители одного пропа используют общий живой инвентарь, который сохраняется, когда его закрывает последний зритель; пока он открыт, последующие вызовы используют его заголовок и размер. Сохранённое содержимое, превышающее запрошенное число рядов, открывается в сохранённом размере, поэтому слоты не теряются. Данные пропа хранятся на опорной стойке для брони; создание нового предмета размещения при подборе не гарантирует сохранение этих данных.
В on_projectile_hit скрипты пропов также получают context.projectile — общую таблицу Entity для снаряда. Хук не срабатывает, если другой плагин уже отменил попадание. context.event оборачивает отменяемое событие попадания FreeMinecraftModels, а context.event.player — это стрелок, если он является живой сущностью, включая мобов; context.player задаётся только тогда, когда снаряд выпустил игрок.
context.npc
NPC-скрипты EliteMobs наследуют общие контексты MagmaCore и добавляют эту специфичную для NPC таблицу.
Свойства
| Поле | Тип | Описание |
|---|---|---|
name | string | Настроенное отображаемое имя NPC. |
filename | string | Имя файла конфигурации NPC. |
uuid | string | UUID NPC во время выполнения. |
activation_radius | number | Настроенный радиус активации. |
current_location | table | Снимок локации, присутствует только пока существует опорная живая сущность. |
entity_type | string | Тип сущности Bukkit в верхнем регистре, присутствует только пока существует опорная живая сущность. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
is_valid() | — | bool | Проверить, валиден ли NPC. |
remove() | — | nil | Удалить NPC через его обычный жизненный цикл. |
get_location() | — | table | Вернуть текущую локацию NPC, откатываясь к локации его появления. Таблица также включает вектор direction. |
get_eye_location() | — | table | Вернуть текущую локацию глаз, откатываясь к локации появления. Таблица также включает вектор direction. |
get_activation_radius() | — | number | Вернуть текущий настроенный радиус активации. |
get_nearby_players(radius) | number | table | Вернуть игроков того же мира в трёхмерном радиусе от ног NPC без фильтра игрового режима. |
face_direction_or_location(target) | table | nil | Повернуться по вектору или к локации в том же мире. Игнорируется при активном движении патруля. |
say_greeting(player?) | table/string? | nil | Отправить настроенное приветствие, по умолчанию — вызвавшему игроку, если он доступен. Принимается таблица игрока, UUID или имя. |
say_dialog(player?) | table/string? | nil | Отправить настроенный диалог с тем же способом распознавания игрока. |
say_farewell(player?) | table/string? | nil | Отправить настроенное прощание с тем же способом распознавания игрока. |
play_model_animation(name) | string | nil | Воспроизвести анимацию модели, если существует кастомная модель. |
patrol_pause() | — | bool | Приостановить настроенный патруль. |
patrol_resume() | — | bool | Возобновить патруль после ожидания или временного движения. |
walk_to(x, y, z) | number, number, number | bool | Идти к смещению от исходной точки и возобновить патруль. |
hold(x, y, z) | number, number, number | bool | Идти к смещению и остаться там. |
teleport(x, y, z) | number, number, number | bool | Телепортироваться к смещению, где обрабатываются сущности. |
Таблица позиции в силах EliteMobs
Таблицы сил боссов EliteMobs возвращают позицию в этом формате из get_location(), get_eye_location(), current_location и других результатов с позициями. Отсутствующая позиция возвращает пустую таблицу.
Свойства
| Поле | Тип | Описание |
|---|---|---|
x, y, z | number | Координаты. |
yaw, pitch | number | Поворот. |
world | string/nil | Имя мира, если у позиции есть мир. |
direction | table | Единичный вектор направления взгляда {x, y, z}. |
Методы
| Метод | Аргументы | Результат | Описание |
|---|---|---|---|
add(dx?=0, dy?=0, dz?=0) | number?=0, number?=0, number?=0 | table | Прибавить значения к координатам на месте и вернуть ту же таблицу; direction не обновляется. |
Таблица ссылок на сущность в силах EliteMobs
Методы сил боссов EliteMobs возвращают эту облегчённую таблицу для неживых сущностей — снарядов, фейерверков и падающих блоков.
Свойства
| Поле | Тип | Описание |
|---|---|---|
name | string | Снимок имени сущности. |
uuid | string | UUID сущности. |
entity_type | string | Снимок типа сущности Bukkit в верхнем регистре. |
is_player | bool | Всегда false. |
is_elite | bool | Всегда false. |
is_mount | bool | False, если только босс не пометит возвращённую таблицу ездового животного как true. |
current_location | table | Снимок локации. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
is_valid() | — | bool | Проверить актуальную валидность. |
get_location() | — | table | Вернуть актуальную локацию. |
get_velocity() | — | table | Вернуть актуальную скорость. |
is_on_ground() | — | bool | Проверить актуальное состояние нахождения на земле. |
teleport_to_location(location) | table | nil | Телепортировать, если локация распознана. |
set_velocity_vector(vector) | table | nil | Задать скорость, если вектор распознан. |
set_direction_vector(vector) | table | nil | Задать направление огненного шара, если применимо. |
set_yield(amount) | number | nil | Задать мощность огненного шара, если применимо. |
set_gravity(enabled) | bool | nil | Задать гравитацию. |
detonate() | — | nil | Взорвать, если сущность является фейерверком. |
remove() | — | nil | Удалить сущность. |
unregister(reason?=OTHER) | string?=OTHER | nil | Снять с учёта, используя DEATH, PHASE_BOSS_RESET, PHASE_BOSS_PHASE_END, CHUNK_UNLOAD, WORLD_UNLOAD, SHUTDOWN, EFFECT_TIMEOUT, BOSS_TIMEOUT, NPC_TIMEOUT, OTHER, UNSPECIFIED_WATCHDOG_REMOVAL, REMOVE_COMMAND, KILL_COMMAND, REINFORCEMENT_CULL, ENTITY_REPLACEMENT или ARENA_RESET. |
is_inside_vehicle() | — | bool | Проверить, едет ли сущность на транспорте. |
has_vehicle() | — | bool | Проверить, существует ли транспорт. |
get_vehicle() | — | table/nil | Вернуть ссылку на текущий транспорт. |
set_vehicle(vehicle) | table | bool | Посадить эту сущность на распознанный транспорт. |
leave_vehicle() | — | bool | Покинуть текущий транспорт. |
has_passengers() | — | bool | Проверить, есть ли пассажиры. |
get_passenger_count() | — | int | Вернуть количество пассажиров. |
get_passengers() | — | table | Вернуть ссылки на пассажиров. |
add_passenger(passenger) | table | bool | Добавить распознанного пассажира. |
remove_passenger(passenger) | table | bool | Убрать распознанного пассажира. |
eject_passengers() | — | bool | Высадить всех пассажиров. |
Таблица живой сущности в силах EliteMobs
Значения живых сущностей в силах боссов EliteMobs используют эту отдельную таблицу; таблицы Boss и Player сил EliteMobs наследуют её.
Свойства
| Поле | Тип | Описание |
|---|---|---|
name | string | Снимок имени сущности. |
uuid | string | UUID сущности. |
entity_type | string | Снимок типа сущности Bukkit в верхнем регистре. |
is_player | bool | Является ли сущность игроком. |
is_monster | bool | Реализует ли сущность Bukkit Monster. |
is_elite | bool | Отслеживает ли EliteMobs эту сущность. |
is_mount | bool | Является ли отслеживаемый кастомный босс ездовым животным. |
is_valid | bool | Снимок валидности. |
health | number | Снимок здоровья. |
maximum_health | number | Снимок максимального здоровья. |
current_location | table | Снимок локации. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
is_alive() | — | bool | Проверить актуальную валидность и состояние смерти. |
is_ai_enabled() | — | bool | Вернуть актуальное состояние ИИ. |
is_frozen() | — | bool | Вернуть настройку заморозки кастомного босса EliteMobs или false. |
get_location() | — | table | Вернуть актуальную локацию. |
get_eye_location() | — | table | Вернуть актуальную локацию глаз. |
get_height() | — | number | Вернуть высоту сущности Bukkit. |
get_health() | — | number | Вернуть актуальное здоровье. |
get_maximum_health() | — | number | Вернуть актуальное максимальное здоровье. |
get_velocity() | — | table | Вернуть актуальную скорость. |
deal_damage(amount) | number | nil | Нанести обычный урон Bukkit. |
deal_custom_damage(amount) | number | nil | Передать необработанный кастомный урон от босса живой цели; пропускает самого босса, неуязвимые или мёртвые цели и игроков не в режиме Survival/Adventure. Учитывает правила экземпляра подземелья и отмену события урона. |
deal_damage_from_boss(amount) | number | nil | Нанести урон Bukkit, приписанный боссу, которому принадлежит сила. |
restore_health(amount) | number | nil | Лечить через EliteMobs, если сущность отслеживается, иначе ограничить здоровье Bukkit максимумом. |
play_sound_at_entity(sound, volume_or_options?=1, pitch?=1) | string (Sound), number/table?=1, number?=1 | nil | Воспроизвести зарегистрированный или кастомный звук с пространством имён у сущности. Вторым аргументом можно передать {volume, pitch}. |
play_sound_at_self(sound, volume_or_options?=1, pitch?=1) | string (Sound), number/table?=1, number?=1 | nil | Псевдоним, воспроизводящий звук у сущности. Вторым аргументом можно передать {volume, pitch}. |
spawn_particle_at_self(particle, count?=1) | string (Particle)/table, int?=1 | nil | Создать у сущности частицу по строке или по таблице спецификации частицы. |
spawn_particles_at_location(location, particle, count?=1, dx?=0, dy?=0, dz?=0, speed?=0) | table, string (Particle), int?=1, number?=0, number?=0, number?=0, number?=0 | nil | Создать частицу в локации. |
teleport_to_location(location) | table | nil | Телепортировать, если локация распознана. |
set_velocity_vector(vector) | table | nil | Задать скорость, если вектор распознан. |
set_gravity(enabled) | bool | nil | Задать гравитацию. |
is_on_ground() | — | bool | Проверить актуальное состояние нахождения на земле. |
apply_push_vector(vector, additive?=false, delay?=1) | table, bool?=false, int?=1 | nil | Применить скорость после задержки, при необходимости добавляя её к текущей. |
set_custom_name(name) | string | nil | Задать кастомное имя с обработкой цветовых кодов. |
reset_custom_name() | — | nil | Восстановить имя EliteMobs, если сущность отслеживается, иначе имя Bukkit. |
set_custom_name_visible(visible) | bool | nil | Задать видимость кастомного имени. |
set_ai_enabled(enabled, duration?=0) | bool, int?=0 | nil | Задать ИИ как принадлежащее изменение; положительное число тиков восстанавливает заменённое значение. true завершает активное изменение ИИ этой силы, если оно есть, а не применяет новое значение. |
set_awareness_enabled(enabled, duration?=0) | bool, int?=0 | nil | Задать осведомлённость моба как принадлежащее изменение; положительное число тиков восстанавливает заменённое значение. true завершает активное изменение осведомлённости этой силы, если оно есть, а не применяет новое значение. |
face_direction_or_location(target) | table | nil | Повернуться по вектору или к локации в том же мире. |
play_model_animation(name) | string | nil | Воспроизвести анимацию кастомной модели, если она доступна. |
set_scale(scale, duration?=0) | number, int?=0 | nil | Задать базовый масштаб как принадлежащее изменение; положительное число тиков восстанавливает заменённое значение. |
set_invulnerable(enabled, duration?=0) | bool, int?=0 | nil | Задать неуязвимость как принадлежащее изменение; положительное число тиков восстанавливает заменённое значение. |
remove_elite() | — | nil | Удалить отслеживаемого элиту через конвейер удаления EliteMobs. |
is_healing() | — | bool | Проверить состояние лечения отслеживаемого элиты. |
set_healing(enabled) | bool | nil | true помечает отслеживаемую элиту как лечащуюся, если она ещё не помечена; false снимает только лечение, установленное этой силой. При завершении работы сила снимает всё ещё принадлежащее ей лечение. |
navigate_to_location(location, speed?=1, force?=false, timeout?=0) | table, number?=1, bool?=false, int?=0 | nil | Направить отслеживаемого кастомного босса. |
add_tag(tag, duration?=0) | string, int?=0 | nil | Добавить тег и убрать его после положительного числа тиков. |
remove_tag(tag) | string | nil | Убрать тег. |
has_tag(tag) | string | bool | Проверить тег сущности, элиты или игрока. |
push_relative_to(location, force?=1, extra_x?=0, extra_y?=0, extra_z?=0) | table, number?=1, number?=0, number?=0, number?=0 | nil | Немедленно заменить скорость нормализованным вектором от источника, умноженным на force, плюс смещения по осям мира. Источник должен быть в том же мире. |
overlaps_box_at_location(center, half_x?=0.5, half_y?=half_x, half_z?=half_x) | table, number?=0.5, number?, number? | bool | Проверить ограничивающий параллелепипед сущности на пересечение с запрошенным. |
is_inside_vehicle() | — | bool | Проверить, едет ли сущность на транспорте. |
has_vehicle() | — | bool | Проверить, существует ли транспорт. |
get_vehicle() | — | table/nil | Вернуть ссылку на текущий транспорт. |
set_vehicle(vehicle) | table | bool | Посадить эту сущность на распознанный транспорт. |
leave_vehicle() | — | bool | Покинуть текущий транспорт. |
has_passengers() | — | bool | Проверить, есть ли пассажиры. |
get_passenger_count() | — | int | Вернуть количество пассажиров. |
get_passengers() | — | table | Вернуть ссылки на пассажиров. |
add_passenger(passenger) | table | bool | Добавить распознанного пассажира. |
remove_passenger(passenger) | table | bool | Убрать распознанного пассажира. |
eject_passengers() | — | bool | Высадить всех пассажиров. |
apply_potion_effect(type, duration, amplifier?=0) | string (PotionEffectType), int, int?=0 | nil | Перевести имя зелья Bukkit в верхний регистр и применить эффект, если разрешают правила экземпляра. Усилитель отсчитывается от нуля. |
set_equipment(slot, material, options?) | string (EquipmentSlot), string (Material), table? | nil | Задать снаряжение; options поддерживают unbreakable и записи enchantments с type и level. |
damage_equipment(slot, amount) | string, int | int | Запросить 1–64 единицы износа для HAND, OFF_HAND, HEAD, CHEST, LEGS или FEET; возвращает фактически применённый износ. Учитывает отмену события повреждения предмета игрока и неразрушимость; может сломать предмет. |
set_fire_ticks(ticks) | int | nil | Задать тики горения, если разрешают правила экземпляра. |
add_visual_freeze_ticks(ticks?=1) | int?=1 | nil | Добавить тики замерзания Minecraft, если разрешают правила экземпляра. Возможен урон от замерзания; метод не блокирует ИИ и движение. |
place_temporary_block(material, ticks?=0, require_air?=false) | string (Material), int?=0, bool?=false | nil | Разместить временный блок у сущности. |
Изменения ИИ, осведомлённости, масштаба и неуязвимости принадлежат вызывающей силе. Каждое из них запоминает заменённое значение. Положительная длительность восстанавливает это значение через указанное число тиков; длительность 0 сохраняет изменение до завершения работы силы, которое тоже его восстанавливает. Если одно свойство меняют несколько сил, завершение одного изменения восстанавливает самое последнее из оставшихся либо исходное значение, если других нет. Если тем временем свойство изменит другой плагин или команда, его значение сохраняется и ничего не восстанавливается. Приостановка силы эти изменения не завершает. Отложенный apply_push_vector и таймеры удаления тегов по-прежнему работают независимо от планировщика скрипта. reset_custom_name восстанавливает имя отслеживаемого элиты, а для обычной сущности Bukkit использует текущее имя, не сохранённое исходное.
Таблица игрока в силах EliteMobs
Значения игроков в силах боссов EliteMobs наследуют все свойства и методы таблицы живой сущности в силах EliteMobs.
Свойства
| Поле | Тип | Описание |
|---|---|---|
game_mode | string | Снимок игрового режима Bukkit в верхнем регистре. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
send_message(text) | string | nil | Отправить текст чата с обработкой цветовых кодов. |
show_action_bar(text) | string | nil | Отправить панель действий с обработкой цветовых кодов. |
show_title(title, subtitle?="", fade_in?=10, stay?=40, fade_out?=10) | string, string?="", int?=10, int?=40, int?=10 | nil | Показать заголовок с обработкой цветовых кодов. |
show_boss_bar(title, color?=WHITE, style?=SOLID, duration?=40) | string, string (BarColor)?=WHITE, string (BarStyle)?=SOLID, int?=40 | nil | Показать полосу босса и убрать её после положительного числа тиков. |
run_command(command) | string | nil | Выполнить команду от имени игрока. |
context.boss
Силы боссов EliteMobs получают эту таблицу, которая наследует все свойства и методы таблицы живой сущности в силах EliteMobs и переопределяет перечисленные здесь строки семантикой уровня элиты.
Свойства
| Поле | Тип | Описание |
|---|---|---|
name | string | Снимок отображаемого имени элиты или имени файла скрипта. |
uuid | string | UUID элиты. |
health | number | Снимок здоровья элиты. |
maximum_health | number | Снимок максимального здоровья элиты. |
current_location | table | Снимок локации элиты. |
level | int | Снимок уровня элиты. |
damager_count | int | Снимок количества наносящих урон. |
is_in_combat | bool | Снимок состояния боя. |
exists | bool | Снимок существования элиты. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
is_alive() | — | bool | Проверить живую сущность и состояние существования в EliteMobs. |
get_health() | — | number | Вернуть актуальное здоровье элиты. |
get_maximum_health() | — | number | Вернуть актуальное максимальное здоровье элиты. |
get_location() | — | table | Вернуть актуальную локацию элиты. |
restore_health(amount) | number | nil | Лечить через сущность EliteMobs. |
add_tag(tag, duration?=0) | string, int?=0 | nil | Добавить тег элиты и убрать его после положительного числа тиков. |
remove_tag(tag) | string | nil | Убрать тег элиты. |
has_tag(tag) | string | bool | Проверить тег элиты. |
reset_custom_name() | — | nil | Восстановить отображаемое имя элиты. |
play_sound_at_self(sound, volume_or_options?=1, pitch?=1) | string (Sound), number/table?=1, number?=1 | nil | Воспроизвести зарегистрированный или кастомный звук с пространством имён в локации элиты. Вторым аргументом можно передать {volume, pitch}. |
play_sound_at_entity(sound, volume_or_options?=1, pitch?=1) | string (Sound), number/table?=1, number?=1 | nil | Псевдоним, воспроизводящий звук в локации элиты. Вторым аргументом можно передать {volume, pitch}. |
spawn_particle_at_self(particle, count?=1) | string (Particle)/table, int?=1 | nil | Создать частицу в локации элиты. |
play_model_animation(name) | string | nil | Воспроизвести анимацию модели кастомного босса, если она доступна. |
navigate_to_location(location, speed?=1, force?=false, timeout?=0) | table, number?=1, bool?=false, int?=0 | nil | Направить кастомного босса. |
get_damager_count() | — | int | Вернуть актуальное количество наносящих урон. |
despawn() | — | nil | Удалить элиту с причиной OTHER. |
remove() | — | nil | Псевдоним despawn(). |
patrol_pause() | — | bool | Приостановить настроенный патруль. |
patrol_resume() | — | bool | Возобновить патруль после ожидания или временного движения. |
walk_to(x, y, z) | number, number, number | bool | Идти к смещению от исходной точки и возобновить патруль. |
hold(x, y, z) | number, number, number | bool | Идти к смещению и остаться там. |
teleport(x, y, z) | number, number, number | bool | Телепортироваться к смещению, где обрабатываются сущности. |
get_ender_dragon_phase() | — | string/nil | Вернуть имя EnderDragon.Phase или nil. |
set_ender_dragon_phase(phase) | string (EnderDragon.Phase) | nil | Задать корректную фазу дракона Края. |
has_mount() | — | bool | Проверить, есть ли у босса живое ездовое животное. |
get_mount() | — | table/nil | Вернуть ссылку на ездовое животное, помеченную is_mount = true. |
set_mount(mount) | table | bool | Посадить босса на распознанную сущность. |
clear_mount() | — | bool | Покинуть текущий транспорт. |
dismount() | — | bool | Псевдоним для clear_mount(). |
start_tracking_fireball_system(speed?=0.5) | number?=0.5 | nil | Для босса-монстра выпускает самонаводящиеся огненные шары в игроков Survival/Adventure в пределах 20 блоков по каждой оси на следующем тике и затем каждые 160 тиков, пока у него есть цель. Задача принадлежит силе: приостановка силы приостанавливает её, а потеря цели или завершение работы останавливают. Скорость должна быть конечной и положительной. |
handle_spirit_walk_damage(cause) | string (DamageCause) | nil | Выполнить обработку урона Spirit Walk. |
shield_wall_is_active() | — | bool | Проверить состояние щитовой стены. |
initialize_shield_wall(openingDirection?=1) | int?=1 | nil | Создать щиты по направлениям с запасом, равным уровню босса. Проём: 1 север, 2 восток, 3 юг, 4 запад; другие целые числа защищают все стороны. Активная стена не меняется. |
shield_wall_absorb_damage(player, damage) | table, number | bool | Вычесть урон из запаса на стороне атакующего, если он был положительным. При true скрипт должен сам отменить событие урона; автоматической отмены нет. |
deactivate_shield_wall() | — | nil | Остановить независимую задачу стены, удалить её состояние и визуальные элементы. Одно закрытие Lua её не отключает. |
start_zombie_necronomicon(target, chant) | table, string | nil | Запустить независимый контроллер для живой цели. Строка задаёт отображаемое заклинание, а не файл; призываются фиксированные файлы зомби/скелета necronomicon с уровнем заклинателя. |
send_message(text, range?=20) | string, number?=20 | nil | Отправить текст с обработкой цветовых кодов игрокам в пределах радиуса. |
get_nearby_players(range) | number | table | Вернуть ближайшие таблицы игроков сил EliteMobs. |
get_nearby_elites(radius) | number | table | Вернуть до 32 живых отслеживаемых элитных мобов того же мира, кроме самого босса; сортировка по расстоянию, при равенстве — по UUID. Радиус должен быть больше 0 и не больше 64. |
get_target_player() | — | table/nil | Вернуть текущую цель моба, если это игрок. |
get_nearby_players_in_zone(zone) | table | table | Вернуть игроков, находящихся внутри зоны. |
spawn_particles_in_zone(zone, particle, count?=1, dx?=0, dy?=0, dz?=0, speed?=0, coverage?=1) | table, string (Particle), int?=1, number?=0, number?=0, number?=0, number?=0, number?=1 | nil | Выбрать точки внутри зоны и создать частицы. |
spawn_particles_in_zone_border(zone, particle, count?=1, dx?=0, dy?=0, dz?=0, speed?=0, coverage?=1) | table, string (Particle), int?=1, number?=0, number?=0, number?=0, number?=0, number?=1 | nil | Выбрать точки на границе зоны и создать частицы. |
get_particles_from_self_toward_zone(zone, particle, speed?=0.1) | table, string (Particle), number?=0.1 | table | Построить направленные спецификации частиц от босса к выбранным точкам зоны. |
get_particles_toward_self(zone, particle, speed) | table, string (Particle), number | table | Построить направленные спецификации частиц к боссу; текущий построитель считывает скорость из последнего переданного аргумента. |
spawn_particles_with_vector(particles) | table | nil | Создать массив направленных спецификаций частиц. |
summon_reinforcement(file, zone_or_location?, duration?=0) | string, table?, int?=0 | table/nil | Призвать подкрепление в выбранной точке зоны, локации или у босса. Положительная длительность удаляет его после указанного числа тиков. |
summon_projectile(type, origin, destination, speed?=1, options?) | string (EntityType), table, table, number?=1, table? | table/nil | Создать снаряд; options поддерживают custom_damage, detonation_power, yield, incendiary, gravity, glowing, invulnerable, persistent, duration, effect из EntityEffect, spawn_at_origin, direction_only, track, on_land и max_ticks. |
context.players: силы боссов EliteMobs
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
current_target() | — | table/nil | Вернуть действующее лицо события, если это игрок, иначе текущую цель моба у босса, если это игрок. |
nearby_players(radius) | number | table | Вернуть таблицы Player в пределах радиуса от босса. |
all_players_in_world() | — | table | Вернуть все таблицы Player в текущем мире босса. |
context.entities: силы боссов EliteMobs
Запросы коллекций исключают самого босса. Фильтры живых сущностей принимают player/players, elite/elites, mob/mobs или любое другое значение для всех живых сущностей. Фильтров Survival/Adventure и принадлежности экземпляру подземелья нет. Прямая цель берётся из хука независимо от фильтров коллекций.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_nearby_entities(radius, filter?="living") | number, string? | table | Фильтры живых сущностей используют трёхмерный радиус по локации ног. all и entities используют параллелепипед Bukkit по осям мира и включают неживые сущности. |
get_entities_in_box(center, half_x, half_y, half_z, filter?="living") | table, number, number, number, string? | table | Вернуть живые сущности, чьи локации ног находятся внутри параллелепипеда, включая границу. |
get_all_entities(filter?="living") | string? | table | Вернуть подходящие живые сущности в мире босса. |
get_direct_target_entity() | — | table/nil | Вернуть прямую цель, предоставленную текущим хуком. |
get_boss_spawn_location() | — | table | Вернуть исходную локацию появления босса. |
context.vectors: силы боссов EliteMobs
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_vector_between_locations(source, destination, options?) | table, table, table? | table | Вернуть вектор между локациями в одном мире или {x=0,y=0,z=0} для некорректного либо межмирового ввода. Options поддерживают normalize, multiplier и векторный offset. |
rotate_vector(vector, pitch?=0, yaw?=0) | table, number?=0, number?=0 | table | Вернуть вектор, повёрнутый на pitch и yaw в градусах. |
normalize_vector(vector) | table | table | Вернуть единичный вектор; нулевой вектор остаётся нулевым. |
context.zones: силы боссов EliteMobs
Силы боссов EliteMobs заменяют общую поверхность зон с целочисленными дескрипторами запросами к определениям зон Elite Script.
Выбор сущностей, проверка точки и выборка локаций частиц являются разными операциями фигуры и могут расходиться на границах. coverage влияет на локации выборки, не на выбор сущностей. watch_zone сохраняет фигуру и передаёт коллбэкам таблицу сущности, не контекст. Проверка начинается через один тик и выдаёт вход для уже находящихся внутри сущностей. Остановка наблюдения не вызывает выход.
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_entities_in_zone(zone, options?) | table, table? | table | Вернуть подходящие живые сущности. Options поддерживают filter и mode = "full" либо "border". |
get_locations_in_zone(zone, options?) | table, table? | table | Вернуть выбранные локации. Options поддерживают coverage и mode = "full" либо "border". |
zone_contains(zone, location, mode?="full") | table, table, string? | bool | Проверить, находится ли локация во всей фигуре или на границе. |
watch_zone(zone, callbacks, options?) | table, table, table? | nil | Наблюдать с обратными вызовами {on_enter, on_leave}. Options поддерживают filter и mode; принадлежащее скрипту наблюдение прекращается вместе с ним. |
context.script: силы боссов EliteMobs
Этот мост принимает те же ключи таблиц, что и YAML-конфигурация целей, зон и относительных векторов Elite Script.
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
target(spec) | table | дескриптор цели | Создать дескриптор цели. |
zone(spec) | table | дескриптор зоны | Создать дескриптор зоны. |
relative_vector(spec, location?, zone?) | table, table?, дескриптор зоны? | дескриптор вектора | Создать дескриптор относительного вектора, по умолчанию привязав его локацию действия к боссу. |
damage(target, amount?=0, multiplier?=1) | дескриптор цели, number?=0, number?=1 | nil | Передать урон Bukkit от имени босса. Удары по игрокам проходят боевое масштабирование EliteMobs с multiplier; для других сущностей этот множитель не применяется. |
push(target, vector, additive?=false) | дескриптор цели, table/дескриптор вектора, bool?=false | nil | Через один тик в задаче скрипта заменить или добавить скорость захваченным целям. Один вычисленный вектор используется для всех целей; отсутствующий или неконечный вектор заменяется нулём. |
set_facing(target, vector) | дескриптор цели, table/дескриптор вектора | nil | Повернуть распознанные целевые сущности вдоль вектора. |
spawn_particles(target, particles) | дескриптор цели, table/string | nil | Создать частицы по спецификации в распознанных целевых локациях. |
Эти вызовы автоматически не исполняют список действий Elite Script, условия, перезарядки, задержки предупреждений или повторы. Дескриптор цели сохраняет исходный контекст события и прямой цели; не переносите зависимые от события дескрипторы между несвязанными хуками. first_entity() означает первый результат распознавателя, не обязательно ближайшую сущность.
Методы дескриптора цели
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
entities() | — | table | Распознать и вернуть таблицы Entity. |
locations() | — | table | Распознать и вернуть таблицы локаций. |
first_entity() | — | table/nil | Вернуть первую распознанную сущность. |
first_location() | — | table/nil | Вернуть первую распознанную локацию. |
Методы дескриптора зоны
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
full_target(coverage?) | number? | дескриптор цели | Создать дескриптор цели для внутренней области фигуры. |
border_target(coverage?) | number? | дескриптор цели | Создать дескриптор цели для границы. |
full_locations(coverage?) | number? | table | Распознать выбранные внутренние локации. |
border_locations(coverage?) | number? | table | Распознать выбранные локации на границе. |
full_entities() | — | table | Распознать сущности внутри фигуры. |
border_entities() | — | table | Распознать сущности на границе. |
contains(location, mode?="full") | table, string? | bool | Проверить принадлежность всей фигуре или границе. |
watch(callbacks, mode?="full") | table, string? | int | Запустить принадлежащее скрипту наблюдение {on_enter, on_leave} и вернуть ID его задачи. |
Методы дескриптора относительного вектора
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
resolve() | — | table | Распознать вектор для текущего контекста. |
Таблица событий в силах EliteMobs
Значения событий в силах боссов EliteMobs предоставляют поля и методы в зависимости от типа события.
Свойства
| Поле | Тип | Описание |
|---|---|---|
damage_amount | number/nil | Снимок величины урона из события урона. |
damage_cause | string/nil | Имя DamageCause, если событие урона его предоставляет. |
damager | table/nil | Исходная сущность, наносящая урон в событии. При попадании снаряда это снаряд, а не стрелок. |
projectile | table/nil | Ссылка на снаряд, если урон наносит снаряд. |
spawn_reason | string/nil | Причина появления элиты. |
entity | table/nil | Повреждённое подкрепление, сущность смерти или зоны в зависимости от хука. |
is_damage_transfer | bool/nil | Только урон игрока по элите: обрабатывает ли хук явно перенесённый удар. |
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
cancel_event() | — | nil | Отменить EliteDamageEvent или другое отменяемое событие. |
set_damage_amount(amount) | number | nil | Заменить урон EliteDamageEvent; требуется вызов через точку: context.event.set_damage_amount(...). |
multiply_damage_amount(multiplier) | number | nil | Умножить урон EliteDamageEvent; требуется вызов через точку: context.event.multiply_damage_amount(...). |
get_damage_amount() | — | number | Вернуть текущее количество урона EliteDamageEvent после изменений. |
transfer_damage(target, amount) | ссылка на сущность, number | bool | Только урон игрока по элите: передать конечный неотрицательный урон другой живой элите, разрешённой правилами экземпляра. Ноль, отменённый вход, вложенный перенос и исходная цель возвращают false; неэлитная цель вызывает ошибку. True означает передачу запроса, не гарантированный урон. Исходный урон не уменьшается и не отменяется. |
context.world: дополнения и переопределения EliteMobs
Силы боссов наследуют общую таблицу World, включая общие методы визуальной молнии и создания NPC EliteMobs, затем добавляют или переопределяют методы ниже. Унаследованные методы с координатами сохраняют общее поведение. Специфичные для босса методы локаций используют его преобразователь: отсутствие локации или значение не-таблица означает локацию босса, отсутствующие координаты равны нулю, а явно названный мир должен существовать.
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
play_sound_at_location(location, sound, volume?=1, pitch?=1) | table, string (Sound), number?=1, number?=1 | nil | Переопределение, принимающее зарегистрированные или кастомные звуки с пространством имён через поддержку EliteMobs. |
spawn_particle_at_location(location, particle, count?=1) | table, string (Particle)/table, int?=1 | nil | Переопределение, принимающее таблицу спецификации частицы EliteMobs. |
set_block_at_location(location, material, require_air?=false) | table, string (Material), bool?=false | nil | Переопределение, которое ставит блок навсегда через менеджер временных блоков, без таймера и без учёта. |
place_temporary_block_at_location(location, material, ticks?=0, require_air?=false) | table, string (Material), int?=0, bool?=false | nil | Переопределение, использующее размещение временного блока EliteMobs. |
get_block_type_at_location(location) | table | string/nil | Вернуть имя Material в верхнем регистре или nil для некорректной локации. |
get_highest_block_y_at_location(location) | table | int/nil | Переопределение, возвращающее наибольшую координату Y блока или nil. |
get_blast_resistance_at_location(location) | table | number | Вернуть взрывоустойчивость блока, по умолчанию 0 для некорректной локации. |
is_air_at_location(location) | table | bool | Проверить, является ли целевой блок воздухом. |
is_passable_at_location(location) | table | bool | Проверить проходимость по Bukkit. |
is_passthrough_at_location(location) | table | bool | Проверить, что материал не является твёрдым. |
is_on_floor_at_location(location) | table | bool | Проверить, что целевой блок не твёрдый, а блок под ним твёрдый. |
is_standing_on_material(location, material) | table, string (Material) | bool | Проверить блок ниже. |
strike_lightning_at_location(location) | table | nil | Переопределение, включающее обход молнии EliteMobs перед ударом. |
run_empowered_lightning_task_at_location(location) | table | nil | Независимо выполнить 60 итераций предупреждения, затем создать настоящую молнию и огненный шар вниз с силой взрыва 5. Наносит урон; пауза или закрытие Lua не отменяет задачу. |
set_world_time(time) / set_world_time(location, time) | int/table, int? | nil | Задать время в мире босса или в мире переданной локации. |
set_world_weather(weather, duration?=6000) / set_world_weather(location, weather, duration?=6000) | string/table, string/int?, int?=6000 | nil | Задать CLEAR, PRECIPITATION, RAIN или THUNDER. |
run_console_command(command) | string | nil | Выполнить команду от имени консоли. |
spawn_boss_at_location(file, location?, level?) | string, table?, int? | table/nil | Создать кастомного босса в переданной или текущей локации с переданным или текущим уровнем. |
spawn_custom_boss_at_location(file, location, options?) | string, table, table? | table/nil | Создать кастомного босса; options поддерживают silent, level, add_as_reinforcement и velocity. |
spawn_entity_at_location(type, location, options?) | string (EntityType), table, table? | table/nil | Создать ванильную сущность; options поддерживают velocity, duration, effect из EntityEffect, on_land и max_ticks. |
spawn_falling_block_at_location(location, material, options?) | table, string (Material), table? | table/nil | Создать падающий блок; options поддерживают drop_item, hurt_entities, velocity и on_land. |
spawn_reinforcement_at_location(file, location, duration?=0, velocity?) | string, table, int?=0, table? | table/nil | Призвать подкрепление, привязанное к боссу. Положительная длительность удаляет его после указанного числа тиков. |
spawn_fireworks_at_location(location, options) | table, table | table/nil | Создать фейерверк; options поддерживают effects, type, flicker, trail, colors, fade_colors, power, velocity и shot_at_angle, где для type используются имена FireworkEffect.Type. |
spawn_splash_potion_at_location(location, options) | table, table | table/nil | Создать взрывное зелье; записи effects принимают type из PotionEffectType, duration, amplifier и overwrite, плюс velocity на верхнем уровне. |
generate_fake_explosion(locations, source?) | table, table? | nil | При включённом восстановлении взрывов удалить настоящие блоки и создать падающие обломки с уроном. Восстановление начинается через 1200 тиков; закрытие Lua не отменяет его. Позиции должны быть в мире босса. |
spawn_fake_gold_nugget_at_location(location, velocity, gravity?=false) | table, table, bool?=false | table/nil | Создать поддельный снаряд — золотой самородок. |
run_fake_gold_nugget_damage(projectiles) | table | nil | Выполнить проход нанесения урона поддельными снарядами. |
generate_player_loot(times?=1) | int?=1 | nil | Сгенерировать добычу игрока для подходящих наносивших урон. |
drop_bonus_coins(multiplier?=2) | number?=2 | nil | Выбросить бонусные монеты для подходящих наносивших урон. |
Таблица поддельного снаряда EliteMobs
spawn_fake_gold_nugget_at_location возвращает эту таблицу при успешном создании.
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
get_location() | — | table | Вернуть локацию поддельного снаряда. |
set_gravity(enabled) | bool | nil | Задать гравитацию поддельного снаряда. |
remove() | — | nil | Удалить поддельный снаряд. |
is_removed() | — | bool | Проверить, был ли он удалён. |
context.settings
Силы боссов EliteMobs получают эту таблицу настроек от того же построителя таблицы мира.
Методы
| Метод | Аргументы | Возвращает | Описание |
|---|---|---|---|
warning_visual_effects_enabled() | — | bool | Вернуть текущую настройку визуальных эффектов предупреждения. |