跳到主要内容

Lua 脚本:枚举与值

webapp_banner.jpg

本页链接到 EliteMobs Lua 方法使用的每个枚举类型的 Spigot Javadocs。在 Lua 代码中使用精确的枚举常量名称(如 "FLAME""ZOMBIE""STONE")作为字符串。

  • 拼写必须与枚举常量名称完全匹配
  • 大小写通常在内部标准化,但为了安全起见请匹配 Javadoc 的拼写
  • 无效值的处理方式取决于具体方法:有些会记录警告,有些会返回 nil 或不执行任何操作,带有输入校验的 API 则可能引发 Lua 错误

枚举参考

枚举用途Javadoc
BarColorBoss 血条颜色BarColor
BarStyleBoss 血条样式BarStyle
DamageCause伤害原因过滤EntityDamageEvent.DamageCause
EnderDragon.Phase末影龙阶段控制EnderDragon.Phase
EntityEffect实体视觉效果EntityEffect
EntityType实体生成EntityType
EquipmentSlot实体装备槽位EquipmentSlot
FireworkEffect.Type烟花形状FireworkEffect.Type
Material方块与物品Material
Particle粒子效果Particle -- 另请参阅有效粒子列表了解旧版名称转换
PotionEffectType药水效果PotionEffectType
Sound声音播放Sound
Sounds accept two formats

每一个 Lua 声音辅助方法(boss:play_sound_at_selfentity:play_sound_at_entityworld:play_sound_at_location)都分两步解析该字符串:先尝试 Spigot Sound 枚举名(会转为大写,因此 "entity_blaze_shoot" 可用),若失败则把该字符串当作带命名空间的声音键处理(会转为小写,因此 "entity.blaze.shoot" 和你自己的资源包键 "mypack:boss.roar" 都可用)。

这意味着你不再需要在两种格式之间做选择 —— 但任一形式中的拼写错误都会被静默忽略,因为回退路径无法区分错误的枚举名和一个只是尚未安装的自定义资源包声音。

非 Spigot 值

这些值是 EliteMobs 特有的,不在 Spigot Javadocs 中:

区域形状

用于原生区域定义(kind 字段)和脚本工具区域规格(shape 字段)。

原生 (kind)脚本工具 (shape)
sphereSPHERE
domeDOME
cylinderCYLINDER
cuboidCUBOID
coneCONE
static_raySTATIC_RAY
rotating_rayROTATING_RAY
translating_rayTRANSLATING_RAY

实体过滤器

用于 context.zonescontext.entities 查询选项。不区分大小写,且每一项都有一个复数别名。

过滤器匹配对象
player / players仅玩家
elite / elites仅精英怪物
mob / mobs非玩家生物实体
living所有生物实体,包括玩家(默认)
all / entities所有实体,包括非生物实体。context.entities:get_nearby_entities 能识别

不属于上述任何字符串的值会退化为 living 行为而不会报错,因此像 "playr" 这样的拼写错误会静默地返回所有生物实体。

context.script:zone({...}) 使用另一套大写的过滤器(PLAYERELITELIVING),因为它运行的是 EliteScript 引擎。

天气值

用于 context.world:set_weather(weather)

效果
CLEAR晴天
RAIN下雨
THUNDER雷暴

目标类型

用于 context.script:target() 规格。

解析为
SELFBoss 实体自身
SELF_SPAWNBoss 的出生位置
DIRECT_TARGET当前事件中涉及的实体
NEARBY_PLAYERSBoss range 范围内的玩家
NEARBY_MOBSrange 范围内的非玩家怪物
NEARBY_ELITESrange 范围内的精英怪物
ALL_PLAYERS所有在线玩家
WORLD_PLAYERSBoss 所在世界的所有玩家
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 区域的边界上

最后四项只有在存在可供继承的外层 EliteScript 时才会解析,因此从 Lua 使用它们意义不大。完整语义参见 EliteScript 目标 —— context.script 使用的正是那套实现。


后续步骤