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

Lua-скриптинг: перечисления и значения

webapp_banner.jpg

На этой странице приведены ссылки на типы значений Spigot, используемые методами Lua в EliteMobs. Передавайте имена констант, например "FLAME", "ZOMBIE" и "STONE", строками в Lua-коде. Используйте значения, доступные в версии API вашего сервера.

  • Написание должно в точности совпадать с именем константы перечисления
  • Регистр обычно нормализуется внутренне, но для надёжности придерживайтесь написания из Javadoc
  • Обработка недопустимых значений зависит от метода: одни записывают предупреждение, другие возвращают nil или ничего не делают, а API с проверкой входных данных могут выдать ошибку Lua

Справочник перечислений​

ПеречислениеДля чего используетсяJavadoc
BarColorЦвет полосы боссаBarColor
BarStyleСтиль полосы боссаBarStyle
DamageCauseФильтрация по причине уронаEntityDamageEvent.DamageCause
EnderDragon.PhaseУправление фазой дракона КраяEnderDragon.Phase
EntityEffectВизуальные эффекты сущностейEntityEffect
EntityTypeСпавн сущностейEntityType
EquipmentSlotСлоты снаряжения сущности; damage_equipment принимает только HAND, OFF_HAND, HEAD, CHEST, LEGS, FEETEquipmentSlot
FireworkEffect.TypeФорма фейерверкаFireworkEffect.Type
MaterialБлоки и предметыMaterial
ParticleЭффекты частицParticle. Преобразование старых имён применяется к действиям EliteScript с частицами; нативным Lua-функциям частиц нужны текущие имена API.
PotionEffectTypeЭффекты зелийPotionEffectType
SoundВоспроизведение звукаSound
Звуки поддерживают два формата

Каждый Lua-помощник для звука (boss:play_sound_at_self, entity:play_sound_at_entity, world:play_sound_at_location) разрешает строку в два шага: сначала он пробует имя перечисления Spigot Sound (в верхнем регистре, поэтому "entity_blaze_shoot" работает), а если это не удалось — трактует строку как ключ звука с пространством имён (в нижнем регистре, поэтому работают и "entity.blaze.shoot", и ваш собственный ключ из ресурс-пака "mypack:boss.roar").

Оба пути удаляют пробелы по краям. Ключ без пространства имён использует minecraft. Ключи неверного формата игнорируются; синтаксически допустимые ключи отправляются клиенту без проверки существования звука. Поэтому ключ с опечаткой или отсутствующий звук ресурс-пака может ничего не воспроизвести.

Значения вне Spigot​

Эти значения специфичны для EliteMobs и отсутствуют в Spigot Javadocs:

Формы зон​

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

Нативное (kind)Скриптовая утилита (shape)
sphereSPHERE
domeDOME
cylinderCYLINDER
cuboidCUBOID
coneCONE
static_raySTATIC_RAY
rotating_rayROTATING_RAY
translating_rayTRANSLATING_RAY

Фильтры сущностей​

Используются в параметрах запросов context.zones и context.entities. Регистр не учитывается; допустимые псевдонимы указаны ниже.

ФильтрЧему соответствует
player / playersТолько игроки
elite / elitesТолько элитные мобы
mob / mobsЖивые сущности, не являющиеся игроками (включая элит)
livingВсе живые сущности, включая игроков (по умолчанию)
all / entitiesКаждая сущность, включая неживые. Распознаётся только методом context.entities:get_nearby_entities

Неизвестные фильтры обрабатываются как living, поэтому опечатка вроде "playr" включает все типы живых сущностей в области запроса. Эти нативные запросы исключают самого босса. Запросы сущностей зоны ищут в мире босса; запросы прямоугольной области ищут в мире указанного центра.

get_nearby_entities(radius, filter) проверяет сферическое расстояние для фильтров живых сущностей. С all или entities он вместо этого ищет в параллелепипеде, вытянутом на radius вдоль каждой оси, и возвращает таблицы ссылок на сущности, включая неживые. Другие нативные запросы обрабатывают эти два фильтра как living.

context.script:zone({...}) использует другой набор фильтров в верхнем регистре (PLAYER, ELITE, LIVING), потому что он запускает движок EliteScript.

Значения погоды​

Используются в context.world:set_world_weather(weather). Значения переводятся в верхний регистр без удаления пробелов. Неизвестное значение записывает предупреждение и оставляет погоду без изменений.

ЗначениеЭффект
CLEARЯсное небо
PRECIPITATION / RAINДождь
THUNDERГроза

Типы целей​

Это значения целей EliteScript. context.script:target() использует тот же механизм разрешения, но не предоставляет данные унаследованного действия или приземления. Цели зоны нужно получать через full_target() или border_target() объекта зоны.

ЗначениеВо что разрешается
SELFСущность босса
SELF_SPAWNТочка спавна босса при разрешении позиций; сам босс при разрешении сущностей
DIRECT_TARGETПрямая цель текущего события; ничего не выбирает, если событие её не предоставляет
NEARBY_PLAYERSИгроки в параллелепипеде, простирающемся от босса на range вдоль каждой оси
NEARBY_MOBSЖивые сущности, кроме игроков, в этой области, исключая босса
NEARBY_ELITESЭлитные мобы в этой области, исключая босса
ALL_PLAYERSВсе игроки в сети
WORLD_PLAYERSВсе игроки в мире босса
ZONE_FULLСущности/локации внутри объёма зоны
ZONE_BORDERСущности/локации на границе зоны
LOCATIONКонкретная локация из поля location спецификации
LOCATIONSНесколько конкретных локаций из списка locations спецификации
LANDING_LOCATIONМесто приземления падающего блока или призванной сущности
ACTION_TARGETНаследует цели окружающего действия EliteScript
INHERIT_SCRIPT_TARGETНаследует цель вызывающего EliteScript
INHERIT_SCRIPT_ZONE_FULLНаследует зону вызывающего EliteScript; текущий выбор сущностей использует её границу. См. ограничения наследуемых зон.
INHERIT_SCRIPT_ZONE_BORDERНа границе зоны вызывающего EliteScript; о разрешении позиций см. ограничения наследуемых зон.

Не используйте LANDING_LOCATION, ACTION_TARGET и три значения INHERIT_SCRIPT_* с context.script:target(). У объекта Lua нет соответствующего состояния действия, наследования или приземления; разрешение может не вернуть целей или завершиться ошибкой. У отдельной спецификации ZONE_FULL или ZONE_BORDER также нет зоны. Семантику действий YAML см. в Целях EliteScript.


Дальнейшие шаги​