Lua 脚本:枚举与值
本页提供 EliteMobs Lua 方法所用 Spigot 值类型的文档链接。在 Lua 代码中,将 "FLAME"、"ZOMBIE"、"STONE" 等常量名称作为字符串传入。请使用服务器 API 版本支持的值。
- 拼写必须与枚举常量名称完全匹配
- 大小写通常在内部标准化,但为了安全起见请匹配 Javadoc 的拼写
- 无效值的处理方式取决于具体方法:有些会记录警告,有些会返回
nil或不执行任何操作,带有输入校验的 API 则可能引发 Lua 错误
枚举参考
| 枚举 | 用途 | Javadoc |
|---|---|---|
BarColor | Boss 血条颜色 | BarColor |
BarStyle | Boss 血条样式 | BarStyle |
DamageCause | 伤害原因过滤 | EntityDamageEvent.DamageCause |
EnderDragon.Phase | 末影龙阶段控制 | EnderDragon.Phase |
EntityEffect | 实体视觉效果 | EntityEffect |
EntityType | 实体生成 | EntityType |
EquipmentSlot | 实体装备槽位;damage_equipment 只接受 HAND、OFF_HAND、HEAD、CHEST、LEGS、FEET | EquipmentSlot |
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) |
|---|---|
sphere | SPHERE |
dome | DOME |
cylinder | CYLINDER |
cuboid | CUBOID |
cone | CONE |
static_ray | STATIC_RAY |
rotating_ray | ROTATING_RAY |
translating_ray | TRANSLATING_RAY |
实体过滤器
用于 context.zones 和 context.entities 查询选项。值不区分大小写;支持的别名列在下表中。
| 过滤器 | 匹配对象 |
|---|---|
player / players | 仅玩家 |
elite / elites | 仅精英怪物 |
mob / mobs | 非玩家生物实体,包括精英怪物 |
living | 所有生物实体,包括玩家(默认) |
all / entities | 所有实体,包括非生物实体。仅 context.entities:get_nearby_entities 能识别 |
未知过滤器按 living 处理,因此 "playr" 这样的拼写错误会使查询范围内所有类型的生物实体都成为匹配对象。这些原生实体查询排除 Boss 自身。区域实体查询在 Boss 所在世界搜索;长方体查询在指定中心所在的世界搜索。
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 | Boss 实体自身 |
SELF_SPAWN | 解析位置时为 Boss 的出生位置;解析实体时为 Boss 自身 |
DIRECT_TARGET | 当前事件的直接目标;事件未提供直接目标时不选中任何内容 |
NEARBY_PLAYERS | 从 Boss 沿每个轴延伸 range 的长方体内的玩家 |
NEARBY_MOBS | 同一长方体内的非玩家生物实体,排除 Boss |
NEARBY_ELITES | 同一长方体内的精英怪物,排除 Boss |
ALL_PLAYERS | 所有在线玩家 |
WORLD_PLAYERS | Boss 所在世界的所有玩家 |
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 目标。
