跳到主要内容

Lua 脚本:枚举与值

webapp_banner.jpg

本页提供 EliteMobs Lua 方法所用 Spigot 值类型的文档链接。在 Lua 代码中,将 "FLAME"、"ZOMBIE"、"STONE" 等常量名称作为字符串传入。请使用服务器 API 版本支持的值。

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

枚举参考​

枚举用途Javadoc
BarColorBoss 血条颜色BarColor
BarStyleBoss 血条样式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" 这样的拼写错误会使查询范围内所有类型的生物实体都成为匹配对象。这些原生实体查询排除 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() 获取。

值解析为
SELFBoss 实体自身
SELF_SPAWN解析位置时为 Boss 的出生位置;解析实体时为 Boss 自身
DIRECT_TARGET当前事件的直接目标;事件未提供直接目标时不选中任何内容
NEARBY_PLAYERS从 Boss 沿每个轴延伸 range 的长方体内的玩家
NEARBY_MOBS同一长方体内的非玩家生物实体,排除 Boss
NEARBY_ELITES同一长方体内的精英怪物,排除 Boss
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 区域的边界;位置解析请参阅继承区域的限制。

不要将 LANDING_LOCATION、ACTION_TARGET 或三个 INHERIT_SCRIPT_* 值用于 context.script:target()。Lua 句柄没有相应的动作、继承或落地状态,解析可能不返回目标或失败。单独的 ZONE_FULL 或 ZONE_BORDER 规格也没有区域。YAML 动作的语义请参阅 EliteScript 目标。


后续步骤​