跳到主要内容

Lua API 参考

本参考介绍 MagmaCore、FreeMinecraftModels 和 EliteMobs 的 Lua 表及运行时上下文。共享表与 EliteMobs Boss 能力表的契约不同,请使用与你编写的脚本对应的章节。

大多数表方法同时接受 table.method(...) 与 table:method(...)。全局函数 em.create_*、em.zone.create_*、em.location.* 以及下文标明的 Boss 事件伤害设置器要求点号语法。共享实时字段在访问时解析;需要新值时请重新读取,不要赋值,否则会遮蔽查询。已保存在 Lua 变量中的位置或其他快照不会自行更新。

标明会处理颜色的方法使用共享的颜色代码语法,包括聊天、标题、状态栏、自定义名称和道具容器标题。

实体表​

MagmaCore 的 entity 表是通用实体值的基础;Living Entity、Player 和 FreeMinecraftModels Prop 表都继承自它。

属性​

字段类型说明
uuidstring实体 UUID。
entity_typestring小写的 Bukkit 实体类型。
is_validbool实时的有效性值。
is_deadbool实时的死亡状态。
current_locationtable/nil实时的 {x, y, z, yaw, pitch, world} 位置。
worldstring/nil实时的世界名称。
is_playerbool该实体是否为玩家。
is_hostilebool该实体是否实现了 Bukkit Monster。
is_passivebool该实体是否实现了 Bukkit Animals。
is_on_groundbool实时着地状态。
is_flyingbool实时玩家飞行状态;其他实体类型为 false。
in_blockbool仅箭矢:当前是否嵌入方块。
attachment_locationtable/nil包含嵌入箭矢当前位置的方块中心;未嵌入时为 nil。
attachment_blocktable/nil由活动附魔动作所拥有的箭矢实际击中的方块中心。没有有效的已记录嵌入命中,或箭矢移开、切换世界、其动作结束后,返回 nil。用于识别被击中的方块,并不提供可安全移动到的碰撞目的地。

方法​

方法参数返回值说明
teleport(location)tablenil传送到某个位置表。
remove()—nil若实体仍然有效则移除它。
set_silent(enabled)boolnil设置静默状态。
set_invulnerable(enabled)boolnil设置无敌状态。
set_gravity(enabled)boolnil设置重力状态。
set_glowing(enabled)boolnil设置发光状态。
set_velocity(x, y, z)number, number, numbernil替换速度;分量必须有限。
set_fall_distance(distance)numbernil设置有限且非负的坠落距离。
set_shooter(uuid)stringbool仅抛射物:设置已解析且实现 Bukkit ProjectileSource 的实体。
set_direction(x, y, z)number, number, numbernil仅火球:设置有限且非零的飞行方向。
set_pickup(status)stringnil仅箭矢:ALLOWED、DISALLOWED 或 CREATIVE_ONLY。
can_receive_hostile_effect(actor_uuid)stringbool检查目标是否可接受该在线玩家的敌对效果;提供方可增加自己的战斗限制。
has_clear_movement_path(location)tablebool对同世界位移预检碰撞、世界边界和已加载区块。非玩家实体还会拒绝保护区域。不会实际移动实体。
movement_path_status(location)tablestring返回 clear、blocked、protected 或 unavailable;protected 适用于非玩家实体。碰撞检查保守地扫描实体碰撞箱经过的体积。

玩家路径畅通不代表获准进入或战斗。实际移动仍受原有移动监听器约束,包括区域进入限制;单纯的建筑保护不会阻止玩家通行。

共享位置参数要求 x、y、z。省略世界或无法解析世界名时使用实体所在世界。单独的 em.location.* 查询要求已加载世界,缺少的坐标默认为零。移动预检和 can_receive_hostile_effect 都不会自动用于直接传送、速度或伤害调用。

can_receive_hostile_effect 要求有效在线玩家作为行为者,目标为同世界内有效、存活的非玩家实体。它拒绝盔甲架、无敌实体、带 NPC 标签的实体和已驯服动物。EliteMobs 可增加战斗授权限制。set_shooter、set_owner 中无效的 UUID,以及无效的拾取枚举名称,可能引发错误。

实体表:EliteMobs 增强​

EliteMobs 增强器向共享表加入以下数据。跟踪标志和 elite 是否存在在建表时确定;只有标明实时的字段会在访问时刷新。FreeMinecraftModels 的可选 EliteMobs 适配器会补充精英信息,但不会加入 elite_player。

属性​

字段类型说明
is_elitebool建表时 EliteMobs 是否在跟踪该实体。
is_custom_bossbool被跟踪的精英是否为自定义 Boss。
is_significant_bossbool是否为生命值倍率高于 1 的自定义 Boss。
elitetable/nil嵌套的 EliteMobs 数据,仅在成功解析出精英时存在。
elite.levelint精英等级快照。
elite.namestring/nil精英显示名称快照。
elite.healthnumber实时生命值。
elite.max_healthnumber实时最大生命值。
elite.is_custom_bossbool该精英是否为自定义 Boss。
elite.health_multipliernumber已配置的生命值倍率快照。
elite.damage_multipliernumber已配置的伤害倍率快照。
elite_playertable/nil仅玩家:存在 EliteMobs 玩家数据时按需解析的表。
elite_player.tiernumber从技能 XP 计算的玩家战斗层级,不刷新附魔查询。

方法​

方法参数返回值说明
elite.remove()—nil通过 EliteMobs 移除流程移除该精英。

实体表:FreeMinecraftModels 增强​

FreeMinecraftModels 增强器加入以下快照;建表时 is_modeled 为 true 才有 model。玩家专属值只出现在玩家表上。模型与权限方法在调用时查询底层对象。在 EliteMobs 脚本中,EliteMobs 可选的 FreeMinecraftModels 适配器会添加 is_modeled、is_prop 和 model,但不会添加 is_op 或 has_permission。

属性​

字段类型说明
is_modeledboolFreeMinecraftModels 是否解析出一个带模型的实体。
is_propbool该实体是否为以盔甲架为载体的 FreeMinecraftModels 道具。
modeltable/nil嵌套的模型数据,仅在带模型的实体上存在。
model.model_idstring/nil模型蓝图标识符。
model.is_dynamicbool该带模型实体是否为动态实体。
is_opbool仅限玩家的服务器 OP 状态。

方法​

方法参数返回值说明
model.play_animation(name, blend?=false, loop?=false)string, bool?=false, bool?=falsebool返回是否接受播放,包括排队或被抑制的攻击请求;终止死亡状态拒绝播放。
model.stop_animations()—nil清空待播放队列,并在可用时回到 idle;保留终止死亡状态。
model.remove()—nil移除该带模型的实体。
has_permission(node)stringbool仅限玩家的权限检查。

生物实体表​

MagmaCore 的 living entity 表继承 Entity Table 的每一个属性和方法。

属性​

字段类型说明
healthnumber实时生命值。
maximum_healthnumber实时最大生命值。
namestring/nil实时的 Bukkit 实体名称。
is_aliveboolBukkit 死亡状态的实时取反值。

方法​

方法参数返回值说明
damage(amount)numbernil造成 Bukkit 伤害。
push(x, y, z)number, number, numbernil立即向当前速度叠加向量。
set_facing(x, y, z)number, number, numbernil通过改变朝向的传送面向方向向量。
add_potion_effect(type, duration, amplifier)string (PotionEffectType), int, intnil当类型可解析时添加一个药水效果。
remove_potion_effect(type)string (PotionEffectType)nil当类型可解析时移除一个药水效果。
get_scale()—number返回包含修饰器的有效缩放值,不可用时为 1.0。
set_scale(value)numbernil服务器支持时设置缩放属性的基础值。
set_ai(enabled)boolnil启用或禁用生物实体 AI。
set_owner(player_uuid)stringbool将可驯服实体驯服给在线玩家,同时清除狼的愤怒。实体不支持或玩家不可用时为 false。
has_potion_effect(type)stringbool检查 Bukkit 药水效果名;无法解析名称时为 false。

玩家表​

MagmaCore 的 player 表继承 Living Entity Table 的每一个属性和方法。

FreeMinecraftModels 还加入 is_holding_elitemobs_item(filename)。传入含 .yml 的完整 EliteMobs 物品文件名,例如 shroomwhispers_shears.yml。它检查主手物品的 EliteMobs 标签,不比较显示名称。空手、其他物品或不可用的 EliteMobs 集成均返回 false。

属性​

字段类型说明
game_modestring小写的 Bukkit 游戏模式快照。

方法​

方法参数返回值说明
send_message(text)stringnil发送经过 MagmaCore 颜色解析器处理的文本。
chat(text)stringnil让玩家发送 Bukkit 聊天,包括以其身份执行斜杠开头的命令。文本会处理颜色。
get_held_item()—table/nil返回主手 {type, amount, display_name} 快照,空手为 nil。type 大写,没有显示名称时使用材质名称。
consume_held_item(amount?=1)int?=1nil排队减少执行时主手中的堆叠,不返回付款结果,也不锁定已检查的物品。请使用正数;负数不被拒绝,可能增加数量。
has_item(material, amount?=1)string (Material), int?=1bool检测背包中是否含有所需数量。
get_target_entity(range?=50)number?=50table/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?=-1bool排队发送客户端方块,并可在正数 ticks 后还原。true 表示接受排队;无效或不可放置材质为 false。
reset_block(x, y, z)int, int, intbool排队为该玩家还原真实方块。
sleep(x, y, z)number, number, numbernil排队放置真实的 WHITE_BED 并尝试强制睡眠。醒来或断线后仅还原原始 BlockData,不保留方块实体内容。20 ticks 后首次检查,之后每 10 ticks 检查。
wake_up()—nil排队在玩家睡眠时将其唤醒。
show_boss_bar(text, color?=WHITE, progress, ticks?=-1)string, string (BarColor)?=WHITE, number, int?=-1nil替换当前实心 Boss 血条,并可在正数 ticks 后隐藏。进度限制在 0..1,无效颜色用 WHITE。进度仍是第三个参数;默认颜色需传 nil。
hide_boss_bar()—nil移除玩家当前的 Lua Boss 血条。
show_action_bar(text, ticks?=-1)string, int?=-1nil发送一次,或每 40 ticks 重复一次直到正数时长结束。
show_title(title, subtitle?="", fade_in, stay, fade_out)string, string?="", int, int, intnil显示经过颜色处理的主标题与副标题。

UI 辅助方法排队执行 Bukkit 工作,并在宿主插件内嵌的 MagmaCore 副本中按玩家共享状态栏,不按脚本隔离:新的 show_boss_bar 会替换玩家当前的血条,新的 show_action_bar 会取消当前重复发送的动作栏。到期计时器只移除启动它的那个血条或动作栏,因此旧的到期不会再清除新的条目。这些计时器不属于脚本调度器。方块变化使用执行时玩家的世界,后续还原读取玩家当时的世界;跨世界后不要假定能在原世界还原。

世界表​

MagmaCore 的世界表以 context.world 暴露,并持有建表时捕获的世界;Boss 能力继承后应用下文的覆盖。共享邻近查询使用轴对齐箱体,radius 是半尺寸,不是球半径。结果数组从 1 开始,不自动排除归属实体或游戏模式。

属性​

字段类型说明
namestring世界名称快照。

方法​

方法参数返回值说明
get_block_at(x, y, z)int, int, intstring返回小写的 Material 名称;未加载的区块不会被加载,此时返回 air。
set_block_at(x, y, z, material)int, int, int, string (Material)bool排队放置方块;无效材质返回 false,排队任务会跳过未加载的区块。
get_highest_block_y(x, z)int, intint返回最高方块的 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?=0nil生成粒子;无效名称不做任何事。
play_sound(sound, x, y, z, volume?=1, pitch?=1)string (Sound), number, number, number, number?=1, number?=1nil播放已注册音效,或小写的带命名空间资源包音效键。
strike_lightning(x, y, z)number, number, numbernil降下闪电。
get_time()—int以 tick 返回世界时间。
set_time(ticks)intnil设置世界时间。
get_nearby_entities(x, y, z, radius)number, number, number, numbertable返回附近的 Entity 或 Living Entity 表。
get_nearby_players(x, y, z, radius)number, number, number, numbertable返回附近的 Player 表。
spawn_entity(type, x, y, z)string (EntityType), number, number, numbertable/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?=falsebool放置临时方块;无效材质或未加载区块返回 false。
drop_item(x, y, z, material, amount?=1)number, number, number, string (Material), int?=1table/nil自然掉落一个物品并返回其 Entity Table;无效材质返回 nil。
spawn_firework(x, y, z, colors, type?=BALL, power?=1)number, number, number, table, string (FireworkEffect.Type)?=BALL, int?=1nil使用 Bukkit Color 常量名排队生成烟花;若无法解析出任何颜色则默认为白色。
strike_lightning_at_location(location)tablenil在位置表所在世界降下闪电。
play_sound_at_location(location, sound, volume?=1, pitch?=1)table, string (Sound), number?=1, number?=1nil播放已注册音效,或小写的带命名空间资源包音效键。
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?=0nil通过本表持有的世界生成粒子;传入同世界位置。
get_block_at_location(location)tablestring返回小写材质名称;位置无效或区块未加载时返回 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?=falsebool在位置表所在世界放置临时方块。
get_highest_block_y_at_location(location)tableint/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)stringtable/nil从本世界已加载实体注册表解析有效实体。请使用有效 UUID 字符串。
block_is_passable(x, y, z)int, int, intbool/nil返回方块可通过性;区块未加载或超出高度范围时为 nil。
location_is_protected(location)tablebool查询已注册的保护提供方;省略世界时使用本世界。
spawn_dust(location, count, red, green, blue)table, int, int, int, intnil生成固定尺寸的 DUST,RGB 为 0~255,每轴散布 0.1;跳过未加载区块。使用本世界位置。

射线未命中时返回空表,命中字段为 nil。方块命中包含 hit_block = {x, y, z, material},材质名小写。联合射线的实体半径是 0.5,不使用实体过滤器。loaded_only=true 检查整个外接矩形,即使未加载区块偏离实际路径也可能拒绝。不合法的液体名称会抛错。

共享粒子名称在查找前转为大写。这些位置方法没有粒子数据参数,因此需要数据的粒子可能抛错;RGB 粉尘请用 spawn_dust。最高方块查询与生成方法没有通用的区块加载保护。放置方块不会自动检查区域保护。true 不能证明排队的修改或 require_air 条件成功。

正数 ticks 的临时方块会保存原始 BlockData,并在计时器结束、区块或世界卸载,或插件关闭时还原。只有当该位置仍是这个临时方块时才会还原,因此之后的编辑不会被覆盖。在仍为临时方块的位置再次放置临时方块,会重新开始计时,并保留第一次保存的原方块。带有方块实体的方块(例如箱子和告示牌)、未加载区块中的方块,以及已被其他临时方块所有者占用的方块会被跳过。破坏临时方块不会掉落任何东西,并会结束跟踪且不还原;在该处放置方块同样会结束跟踪。非正数 ticks 会永久放置方块且不跟踪。这不是脚本级回滚机制。

共享世界的 EliteMobs 扩展​

EliteMobs 在共享世界表(包括 NPC 脚本)上注册这些辅助方法,要求目标区块已加载。共享 spawn_boss_at_location 要求位置和等级;Boss 能力用后文的可选参数形式覆盖它。

方法参数返回值说明
lightning_effect_at_location(location)tablenil使用 EliteMobs 闪电生成绕过机制显示不造成普通伤害的闪电。
spawn_npc_at_location(file, location)string, tabletable/nil生成已配置 NPC,返回带 remove() 的句柄;生成无效时为 nil。
spawn_boss_at_location(file, location, level)string, table, inttable/nil生成已配置自定义 Boss,返回共享生物实体表;不可用时为 nil。

context.world:FreeMinecraftModels 追加内容​

FreeMinecraftModels 在自己的 MagmaCore 世界表注册这些方法,供道具脚本通过 context.world 使用。EliteMobs 未启用或玩家无法解析时返回 false。战利品辅助方法在位置缺失或不可用时使用玩家位置。

方法​

方法参数返回值说明
start_elitemobs_transport(player, route_id)player, stringbool为同世界玩家启动已保存的 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.xnumberem.create_location 返回的 X 坐标。
location.ynumberem.create_location 返回的 Y 坐标。
location.znumberem.create_location 返回的 Z 坐标。
location.worldstring/nil传给 em.create_location 时的世界名称。
location.yawnumber/nil传给 em.create_location 时的 yaw。
location.pitchnumber/nil传给 em.create_location 时的 pitch。
vector.xnumberem.create_vector 返回的 X 分量。
vector.ynumberem.create_vector 返回的 Y 分量。
vector.znumberem.create_vector 返回的 Z 分量。
zone.kindstringsphere、dome、cylinder、cuboid、cone、static_ray、rotating_ray 或 translating_ray。
zone.radiusnumber/nil球体、穹顶、圆柱或圆锥的半径。
zone.heightnumber/nil圆柱高度。
zone.xnumber/nil立方体的 X 尺寸。
zone.ynumber/nil立方体的 Y 尺寸。
zone.znumber/nil立方体的 Z 尺寸。
zone.lengthnumber/nil圆锥或射线的长度。
zone.thicknessnumber/nil静态射线的粗细。
zone.point_radiusnumber/nil旋转射线或平移射线的点半径。
zone.animation_durationnumber/nil旋转射线或平移射线的动画时长。
zone.origintable/nil由 set_center 或 set_origin 设置的位置。
zone.destinationtable/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, numbertable返回一个 {x, y, z} 向量表。
location.add(dx?=0, dy?=0, dz?=0)number?=0, number?=0, number?=0table就地相加并返回同一个位置表。
em.zone.create_sphere_zone(radius)numbertable返回带 set_center(location) 的球体定义。
em.zone.create_dome_zone(radius)numbertable返回带 set_center(location) 的穹顶定义。
em.zone.create_cylinder_zone(radius, height)number, numbertable返回带 set_center(location) 的圆柱定义。
em.zone.create_cuboid_zone(x, y, z)number, number, numbertable返回带 set_center(location) 的立方体定义。
em.zone.create_cone_zone(length, radius)number, numbertable返回带 set_origin(location) 和 set_destination(location) 的圆锥定义。
em.zone.create_static_ray_zone(length, thickness)number, numbertable返回带起点和终点设置器的静态射线定义。
em.zone.create_rotating_ray_zone(length, point_radius, animation_duration)number, number, numbertable返回带起点和终点设置器的旋转射线定义。
em.zone.create_translating_ray_zone(length, point_radius, animation_duration)number, number, numbertable返回带起点和终点设置器的平移射线定义。
zone.set_center(location)tabletable将中心设为 zone.origin 并返回同一个 zone 表。
zone.set_origin(location)tabletable设置起点并返回同一个 zone 表。
zone.set_destination(location)tabletable设置终点并返回同一个 zone 表。
em.location.is_in_dungeon(location)tablebool检测已注册的地下城区域,以及报告 dungeon 类型的归属方。
em.location.is_protected(location)tablebool检测内置的 WorldGuard/GriefPrevention 适配器以及插件注册的保护归属方。
em.location.owned_by(location, namespace)table, stringbool按插件命名空间检测归属关系。
em.location.owners(location)tabletable返回归属方命名空间字符串数组。
em.location.kinds_at(location)tabletable返回归属类型字符串数组。
em.location.has_kind(location, kind)table, stringbool检测某个归属类型。

em.location.* 要求已加载世界名称或 {name = ...},不回退到归属者世界。无法解析世界时返回 false 或空数组,缺少坐标为零。归属命名空间区分大小写,类型不区分。归属本身不意味着地下城或保护。查询覆盖已注册提供方,而非自动覆盖所有插件;被查询区域适配器失败时按受保护处理。数组顺序不保证。

Mind 程序上下文​

原生 Mind 回调使用此上下文,而非普通能力或 NPC 上下文。文件形式的行为程序也从 plugins/EliteMobs/behaviors/ 加载;参见 Boss 行为配置。EliteMobs 集成通过 EliteMindService 注册 ai.program 和 ai.module;放入普通 powers 目录不会注册 Mind 程序。

字段类型说明
tick, generationnumber当前游戏 tick 和运行时世代。
entitytable行为主体的共享 Living Entity Table。
memory, perception, actuator, actionstable下列服务,仅供当前回调使用。
方法参数返回值说明
memory.get(key)stringvalue/nil读取已声明的记忆键。
memory.set(key, value, ttl_ticks?)string, value, int?nil按配置类型设置已声明的记忆值,可选过期时间。
memory.forget(key)stringnil移除已声明的记忆值。
memory.contains(key)stringbool检查已声明的记忆值是否存在。
perception.current_target()—table/nil以共享 Living Entity Table 返回当前目标。
perception.nearest_player(radius)numbertable/nil返回范围内最近的玩家。
perception.can_see(entity_or_uuid)table/stringbool检查到生物实体的视线是否畅通。
perception.navigation()—table返回 destination_active、navigation_in_progress、consecutive_stuck_ticks、可选的 destination,以及含 tick 和 position 的可选 last_progress。
actuator.move_to(location, speed?=1)table, number?=1bool以有限正数速度请求导航到同一世界中的位置;寻路未启动时返回 false。
actuator.stop_moving()—nil停止导航。
actuator.look_at(location)tablenil朝向指定位置。
actuator.jump()—nil请求跳跃。
actuator.set_target(entity_or_uuid)table/stringbool设置生物目标;无法解析目标时返回 false。
actuator.clear_target()—nil清除目标。
actuator.attack(entity_or_uuid)table/stringbool请求攻击;无法解析目标时返回 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, actionstring用于行为 controls 数组的控制权名称;use_item 没有对应的 Lua 执行器方法。
方法参数返回值说明
ai.program(definition)tabletable标记程序定义,包含 id、revision,以及可选的 modules、memories、sensors、behaviors、budget 和 runaway。
ai.module(definition)tabletable标记模块定义,包含 id、revision,以及可选的 dependencies、memories、sensors 和 behaviors。
ai.sensor(definition)tabletable标记传感器,包含 id、interval?=1 和 sense(c)。
ai.behavior(definition)tabletable标记行为,包含 id、priority?=0、controls、can_start、can_continue、start、tick 和 stop(c, reason)。

context.mind_action:EliteMobs 能力钩子​

在 on_mind_action(context) 中可用。钩子返回 "accepted"、"deferred" 或 "rejected";系统按附加顺序访问能力,直到某个能力接受该动作。

字段类型说明
keystring带命名空间的语义动作标识符。
payloadtable不可变 Java 请求的可变 Lua 副本;实体 UUID 是字符串,位置是表。修改副本不会改变原请求。
game_tick, generationnumber动作 tick 和运行时世代。

context.state​

每个 MagmaCore 脚本实例都会收到一张普通 Lua 表,它在该实例的生命周期内持续存在。可用于计数器、标志位、任务 ID,以及在各钩子之间共享的值。

context.state.counter = (context.state.counter or 0) + 1

context.log​

MagmaCore、FreeMinecraftModels 与 EliteMobs NPC 方法​

方法参数返回值说明
info(message)stringnil以共享的 Lua 前缀记录一条信息性消息。
warn(message)stringnil记录一条警告。
error(message)stringnil通过共享的警告通道记录。

EliteMobs Boss 能力方法​

方法参数返回值说明
info(message)stringnil记录一条 Boss 能力的信息性消息。
warn(message)stringnil记录一条警告。
debug(message)stringnil以 Lua 能力调试前缀记录一条信息性消息。

context.scheduler​

计划任务归属于脚本实例,并在实例关闭时被取消。下面两套命名系列在共享的 MagmaCore 接口和 EliteMobs Boss 能力上都可用。

方法参数返回值说明
run_later(ticks, callback)int, functionint延迟后运行一次,并返回 Bukkit 任务 ID。
run_repeating(delay, interval, callback)int, int, functionint在初始延迟之后重复运行,并返回任务 ID。
cancel(task_id)intnil取消一个自己拥有的任务。
run_after(ticks, callback)int, functionintrun_later 的别名。
run_every(interval, callback)int, functionint无初始延迟地重复运行,并返回任务 ID。
cancel_task(task_id)intnilcancel 的别名。

回调收到新上下文,通常没有事件或玩家。应提前捕获所需值或 UUID,不要保留包含延迟解析字段的旧上下文。到期的一次性任务在暂停时等待,重复任务跳过暂停 tick 且不补跑。回调错误会关闭脚本。取消自有任务不会撤销任意世界/实体修改或独立的 UI 计时器。

context.cooldowns​

本地存储属于 ScriptableEntity 适配器。FreeMinecraftModels 每个道具脚本各建一个,EliteMobs NPC 则所有脚本共用一个,因此同 NPC 的命名本地键会冲突。全局值由同一道具或 NPC 共享。省略本地键时用 __lua: 加文件名;命名键精确匹配。Boss 能力共享 Boss 的本地存储与内置全局能力冷却。

共享本地/全局冷却以及 Boss 本地冷却按真实经过时间计量,每个请求 tick 为 50ms,暂停或低 TPS 时仍继续。Boss 全局冷却按服务器 tick 计数,并保留较晚的到期时间:较短的 set_global 永远不会缩短正在生效的全局冷却,非正数时长不起作用。检查或设置本地冷却不会自动检查或设置全局冷却。

方法参数返回值说明
local_ready(key?)string?bool检测所键控的本地冷却是否就绪。
local_remaining(key?)string?int返回剩余 tick 数;已就绪时返回 0。
check_local(key, duration)string/nil, intbool若已就绪则启动冷却并返回 true。传入 nil 以使用默认键。
set_local(duration, key?)int, string?nil设置或清除本地冷却;非正数时长会清除它。
global_ready()—bool检测归属方的全局冷却是否就绪。
set_global(duration)intnil以 tick 设置全局冷却。在共享的 MagmaCore 接口上,非正数时长会清除它。

context.zones:共享的 MagmaCore 接口​

FreeMinecraftModels 脚本、EliteMobs NPC 脚本以及其他默认的 MagmaCore 消费者会在当前脚本归属方所在的世界中收到整数型区域句柄。

方法参数返回值说明
create_sphere(x, y, z, radius)number, number, number, numberint/nil注册一个球体并返回其句柄;归属方没有世界时返回 nil。
create_cylinder(x, y, z, radius, height)number, number, number, number, numberint/nil注册一个圆柱并返回其句柄;归属方没有世界时返回 nil。
create_cuboid(x, y, z, x_size, y_size, z_size)number, number, number, number, number, numberint/nil注册一个立方体并返回其句柄;归属方没有世界时返回 nil。
watch(handle, on_enter?, on_leave?)int, function?, function?bool/nil为一个已知句柄启用边界跟踪。函数是否存在决定是否启用对应的 on_zone_enter 或 on_zone_leave 钩子;传入的函数体本身不会被直接调用。
unwatch(handle)intnil停止跟踪并移除该句柄。

通用监视测试玩家位置点。此路径的长方体尺寸是半尺寸(Z 为零时用非零 X),不保证与 EliteMobs 实体重叠或采样点查询体积一致。区域保留创建时坐标和世界,但每 tick 扫描归属者当前世界中的玩家。通用区域钩子通过 context.player 和 context.event.player 暴露跨越边界的玩家。

创建即开始成员跟踪,早于 watch 安装钩子分发器。稍后安装监视不会为已记录在内部的玩家补发进入通知。第二次 watch 省略某个回调不会清除旧分发器。断线和 unwatch 不保证离开钩子。区域检查先于 on_game_tick。

context.event:共享的 MagmaCore 接口​

当共享钩子存在当前 Bukkit 事件或行为者时,这张表才存在。计划回调以及两者皆无的钩子中不存在这张表。

字段或方法类型说明
is_cancelledbool首次解析事件子表时捕获的取消状态;cancel() 或 uncancel() 不会刷新它。
cancel()method取消当前事件。仅当事件实现了 Bukkit Cancellable 时存在。
uncancel()method撤销当前事件的取消。仅当事件实现了 Bukkit Cancellable 时存在。
playertable当前行为者可用时,为其提供的 Living Entity Table。

通用区域钩子提供行为者但没有可取消的 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)positive intbool仅在数量足够时从捕获堆叠中消耗。

耐久使用材质最大值,而非自定义最大损伤组件。这些直接修改不应用原版磨损计算、Unbreaking、不可破坏检查或玩家物品损伤事件。比例必须有限且结果在整数范围内;负比例会修复。损坏会消耗整个捕获堆叠。生命周期与完整上下文见自定义附魔。

context.prop​

FreeMinecraftModels 道具脚本会收到这张表;当存在承载实体时,它继承 MagmaCore 的 Entity Table。

属性​

字段类型说明
model_idstring/nil模型蓝图名称;不存在蓝图时为 nil。
current_locationtable/nil实时的道具位置。

方法​

方法参数返回值说明
play_animation(name, blend?=true, loop?=true)string, bool?=true, bool?=truebool播放指定名称的动画。
stop_animation()—nil清空排队播放,并在可用时回到 idle;保留终止死亡状态。
hurt_visual()—nil播放红色染色受伤特效但不造成伤害。
pickup()—nil排队永久移除并掉落一个放置物品。
has_mount_points()—bool检测该道具是否具有骑乘点骨骼。
mount(player)tablebool排队让已解析的玩家骑乘到第一个可用座位上。
dismount(player)tablebool排队让已解析的玩家从该道具上下来。
get_passengers()—table返回已骑乘玩家的 Entity Table。
spawn_elitemobs_boss(file, x, y, z)string, number, number, numbertable/nil当 EliteMobs 已启用时生成一个 EliteMobs 自定义 Boss。
open_inventory(player, title, rows?=3)table, string, int?=3bool排队打开持久化存储,rows 钳制在 1 到 6 之间。
place_book(player)tablebool当道具尚未存放书本时,排队存入一本手持的成书或书与笔。
read_book(player)tablebool排队打开已存放的成书。
take_book(player)tablebool排队把已存放的书本归还给玩家。
has_book()—bool检测该道具是否存放着书本。
drop_inventory()—bool排队清空持久化存储并掉落其中的物品。
drop_book()—bool排队清空并掉落已存放的书本。
is_viewing_inventory(player)tablebool检测该玩家是否正在查看此道具所跟踪的容器界面。
set_persistent_data(key, value)string, stringbool在道具范围内的 fmm_lua_ 键下存储一个字符串。
get_persistent_data(key)stringstring/nil返回已存储的字符串,或 nil。

对于排队道具操作,true 只说明初始玩家/承载实体检查通过,不保证有座位、存书成功或界面已打开。take_book 在加入背包前先删除存储,也不会掉落溢出物品。同一道具的所有查看者共享同一个实时容器,在最后一名查看者关闭时保存;容器打开期间,后续调用会沿用其标题和大小。存储内容超过请求行数时,会按存储时的大小打开,因此不会丢弃任何槽位。道具数据存于承载盔甲架,回收时新生成的放置物品不保证保留这些数据。

在 on_projectile_hit 中,道具脚本还会收到 context.projectile,即弹射物的共享 Entity Table。如果其他插件已经取消了这次命中,该钩子不会触发。context.event 包装可取消的 FreeMinecraftModels 命中事件;当射击者是生物实体(包括怪物)时,context.event.player 就是射击者;只有当玩家发射弹射物时才会设置 context.player。

context.npc​

EliteMobs NPC 脚本继承共享的 MagmaCore 上下文,并追加这张 NPC 专属表。

属性​

字段类型说明
namestring已配置的 NPC 显示名称。
filenamestringNPC 配置文件名。
uuidstring运行时 NPC UUID。
activation_radiusnumber已配置的激活半径。
current_locationtable位置快照,仅在承载的生物实体存在时出现。
entity_typestring大写的 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)numbertable返回同世界内距 NPC 脚部三维半径内的玩家,不过滤游戏模式。
face_direction_or_location(target)tablenil面向向量或同世界位置;巡逻移动活跃时忽略。
say_greeting(player?)table/string?nil发送已配置的问候语,可用时默认发给触发的玩家。接受玩家表、UUID 或名称。
say_dialog(player?)table/string?nil以相同的玩家解析方式发送已配置的对话。
say_farewell(player?)table/string?nil以相同的玩家解析方式发送已配置的告别语。
play_model_animation(name)stringnil当存在自定义模型时播放模型动画。
patrol_pause()—bool暂停已配置的巡逻。
patrol_resume()—bool在脚本等待或临时移动后恢复巡逻。
walk_to(x, y, z)number, number, numberbool走到相对于原点的偏移并恢复巡逻。
hold(x, y, z)number, number, numberbool走到偏移位置并停留。
teleport(x, y, z)number, number, numberbool传送到进行实体 tick 的偏移位置。

EliteMobs 能力位置表​

EliteMobs Boss 能力表通过 get_location()、get_eye_location()、current_location 及其他位置结果返回这种位置结构。缺失的位置会返回空表。

属性​

字段类型说明
x, y, znumber坐标。
yaw, pitchnumber朝向。
worldstring/nil位置带有世界时的世界名称。
directiontable单位朝向向量 {x, y, z}。

方法​

方法参数返回值说明
add(dx?=0, dy?=0, dz?=0)number?=0, number?=0, number?=0table就地增加坐标并返回同一张表;direction 不会更新。

EliteMobs 能力实体引用表​

对于抛射物、烟花、下落方块等非生物实体,EliteMobs Boss 能力方法会返回这张轻量表。

属性​

字段类型说明
namestring实体名称快照。
uuidstring实体 UUID。
entity_typestring大写的 Bukkit 实体类型快照。
is_playerbool恒为 false。
is_elitebool恒为 false。
is_mountbool除非某个 Boss 将返回的坐骑表标记为 true,否则为 false。
current_locationtable位置快照。

方法​

方法参数返回值说明
is_valid()—bool检测实时有效性。
get_location()—table返回实时位置。
get_velocity()—table返回实时速度。
is_on_ground()—bool检测实时的着地状态。
teleport_to_location(location)tablenil当位置可解析时传送。
set_velocity_vector(vector)tablenil当向量可解析时设置速度。
set_direction_vector(vector)tablenil适用时设置火球方向。
set_yield(amount)numbernil适用时设置火球威力。
set_gravity(enabled)boolnil设置重力。
detonate()—nil当实体为烟花时引爆。
remove()—nil移除该实体。
unregister(reason?=OTHER)string?=OTHERnil使用 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)tablebool让该实体乘坐已解析的载具。
leave_vehicle()—bool离开当前载具。
has_passengers()—bool检测是否存在乘客。
get_passenger_count()—int返回乘客数量。
get_passengers()—table返回乘客引用。
add_passenger(passenger)tablebool添加已解析的乘客。
remove_passenger(passenger)tablebool移除已解析的乘客。
eject_passengers()—bool弹出每一位乘客。

EliteMobs 能力生物实体表​

EliteMobs Boss 能力的生物值使用这张独立的表;Boss 表和 EliteMobs Power Player 表都继承它。

属性​

字段类型说明
namestring实体名称快照。
uuidstring实体 UUID。
entity_typestring大写的 Bukkit 实体类型快照。
is_playerbool该实体是否为玩家。
is_monsterbool该实体是否实现了 Bukkit Monster。
is_eliteboolEliteMobs 是否在跟踪该实体。
is_mountbool被跟踪的自定义 Boss 是否为坐骑。
is_validbool有效性快照。
healthnumber生命值快照。
maximum_healthnumber最大生命值快照。
current_locationtable位置快照。

方法​

方法参数返回值说明
is_alive()—bool检测实时的有效性与死亡状态。
is_ai_enabled()—bool返回实时的 AI 状态。
is_frozen()—bool返回 EliteMobs 自定义 Boss 的冻结设置,或 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)numbernil造成通用的 Bukkit 伤害。
deal_custom_damage(amount)numbernil从 Boss 向生物目标提交原始自定义伤害;会跳过 Boss 自身、无敌或已死亡的目标,以及不处于生存/冒险模式的玩家。仍受实例规则及伤害事件取消影响。
deal_damage_from_boss(amount)numbernil造成归因于该能力所属 Boss 的 Bukkit 伤害。
restore_health(amount)numbernil被跟踪时通过 EliteMobs 治疗,否则将 Bukkit 生命值钳制到上限。
play_sound_at_entity(sound, volume_or_options?=1, pitch?=1)string (Sound), number/table?=1, number?=1nil在该实体处播放已注册音效或自定义命名空间音效。第二个参数也可以改为 {volume, pitch}。
play_sound_at_self(sound, volume_or_options?=1, pitch?=1)string (Sound), number/table?=1, number?=1nil在该实体处播放的别名。第二个参数也可以改为 {volume, pitch}。
spawn_particle_at_self(particle, count?=1)string (Particle)/table, int?=1nil在该实体处生成粒子字符串或粒子规格表。
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?=0nil在某个位置生成粒子。
teleport_to_location(location)tablenil当位置可解析时传送。
set_velocity_vector(vector)tablenil当向量可解析时设置速度。
set_gravity(enabled)boolnil设置重力。
is_on_ground()—bool检测实时的着地状态。
apply_push_vector(vector, additive?=false, delay?=1)table, bool?=false, int?=1nil延迟之后施加速度,可选择叠加到当前速度之上。
set_custom_name(name)stringnil设置经颜色处理的自定义名称。
reset_custom_name()—nil被跟踪时还原 EliteMobs 名称,否则还原 Bukkit 名称。
set_custom_name_visible(visible)boolnil设置自定义名称的可见性。
set_ai_enabled(enabled, duration?=0)bool, int?=0nil以归属修改的形式设置 AI;正数 ticks 后恢复被替换的值。传入 true 时,若该能力有生效中的 AI 修改,会结束该修改,而不是应用新值。
set_awareness_enabled(enabled, duration?=0)bool, int?=0nil以归属修改的形式设置怪物感知;正数 ticks 后恢复被替换的值。传入 true 时,若该能力有生效中的感知修改,会结束该修改,而不是应用新值。
face_direction_or_location(target)tablenil面向某个向量或同世界的位置。
play_model_animation(name)stringnil可用时播放自定义模型动画。
set_scale(scale, duration?=0)number, int?=0nil以归属修改的形式设置基础缩放;正数 ticks 后恢复被替换的值。
set_invulnerable(enabled, duration?=0)bool, int?=0nil以归属修改的形式设置无敌状态;正数 ticks 后恢复被替换的值。
remove_elite()—nil通过 EliteMobs 移除流程移除被跟踪的精英。
is_healing()—bool检测被跟踪精英的治疗状态。
set_healing(enabled)boolniltrue 会在被跟踪精英尚未处于治疗状态时将其标记为治疗中;false 只清除该能力设置的治疗状态。能力关闭时会清除它仍持有的治疗状态。
navigate_to_location(location, speed?=1, force?=false, timeout?=0)table, number?=1, bool?=false, int?=0nil让被跟踪的自定义 Boss 寻路。
add_tag(tag, duration?=0)string, int?=0nil添加一个标签,并在正数 ticks 之后移除。
remove_tag(tag)stringnil移除一个标签。
has_tag(tag)stringbool检测实体、精英或玩家标签。
push_relative_to(location, force?=1, extra_x?=0, extra_y?=0, extra_z?=0)table, number?=1, number?=0, number?=0, number?=0nil立即将速度替换为远离源位置的单位向量乘力度,再加世界轴偏移。源位置必须在同一世界。
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)tablebool让该实体乘坐已解析的载具。
leave_vehicle()—bool离开当前载具。
has_passengers()—bool检测是否存在乘客。
get_passenger_count()—int返回乘客数量。
get_passengers()—table返回乘客引用。
add_passenger(passenger)tablebool添加已解析的乘客。
remove_passenger(passenger)tablebool移除已解析的乘客。
eject_passengers()—bool弹出每一位乘客。
apply_potion_effect(type, duration, amplifier?=0)string (PotionEffectType), int, int?=0nil解析转为大写的 Bukkit 药水名,在实例规则允许时应用。增幅值从零开始。
set_equipment(slot, material, options?)string (EquipmentSlot), string (Material), table?nil设置装备;options 支持 unbreakable,以及带 type 和 level 的 enchantments 条目。
damage_equipment(slot, amount)string, intint请求对 HAND、OFF_HAND、HEAD、CHEST、LEGS 或 FEET 的装备造成1–64点耐久损耗,返回实际损耗。遵守玩家物品损伤事件的取消结果和不可破坏设置;可能使物品损坏。
set_fire_ticks(ticks)intnil实例规则允许时设置着火 tick。
add_visual_freeze_ticks(ticks?=1)int?=1nil规则允许时增加 Minecraft 冰冻 tick,可能造成冰冻伤害,不是 AI 或移动锁定。
place_temporary_block(material, ticks?=0, require_air?=false)string (Material), int?=0, bool?=falsenil在该实体处放置一个临时方块。

AI、感知、缩放和无敌修改归调用它们的能力所有。每项修改都会记录它所替换的值。正数时长会在指定 tick 后恢复该值;时长为 0 时修改会一直保持到能力关闭,关闭时同样会恢复。多个能力修改同一属性时,结束其中一项修改会恢复剩余修改中最新的那一项;没有剩余修改时则恢复原始值。如果在此期间有其他插件或命令修改了该属性,则保留其值,不进行恢复。暂停能力不会结束这些修改。延迟的 apply_push_vector 和标签移除计时器仍独立于脚本调度器运行。reset_custom_name 对跟踪精英恢复其名称,对普通 Bukkit 实体则使用当前名称,而非保存的原名。

EliteMobs 能力玩家表​

EliteMobs Boss 能力的玩家值继承 EliteMobs Power Living Entity 的每一个属性和方法。

属性​

字段类型说明
game_modestring大写的 Bukkit 游戏模式快照。

方法​

方法参数返回值说明
send_message(text)stringnil发送经颜色处理的聊天文本。
show_action_bar(text)stringnil发送经颜色处理的动作栏。
show_title(title, subtitle?="", fade_in?=10, stay?=40, fade_out?=10)string, string?="", int?=10, int?=40, int?=10nil显示经颜色处理的标题。
show_boss_bar(title, color?=WHITE, style?=SOLID, duration?=40)string, string (BarColor)?=WHITE, string (BarStyle)?=SOLID, int?=40nil显示 Boss 血条,并在正数 ticks 之后移除。
run_command(command)stringnil以该玩家身份执行一条命令。

context.boss​

EliteMobs Boss 能力会收到这张表,它继承 EliteMobs Power Living Entity 的每一个属性和方法,并用精英层面的语义覆盖此处列出的行。

属性​

字段类型说明
namestring精英显示名称或脚本文件名快照。
uuidstring精英 UUID。
healthnumber精英生命值快照。
maximum_healthnumber精英最大生命值快照。
current_locationtable精英位置快照。
levelint精英等级快照。
damager_countint伤害者数量快照。
is_in_combatbool战斗状态快照。
existsbool精英存在性快照。

方法​

方法参数返回值说明
is_alive()—bool检测生物实体以及 EliteMobs 的存在状态。
get_health()—number返回实时的精英生命值。
get_maximum_health()—number返回实时的精英最大生命值。
get_location()—table返回实时的精英位置。
restore_health(amount)numbernil通过 EliteMobs 实体进行治疗。
add_tag(tag, duration?=0)string, int?=0nil添加一个精英标签,并在正数 ticks 之后移除。
remove_tag(tag)stringnil移除一个精英标签。
has_tag(tag)stringbool检测一个精英标签。
reset_custom_name()—nil还原精英显示名称。
play_sound_at_self(sound, volume_or_options?=1, pitch?=1)string (Sound), number/table?=1, number?=1nil在精英位置播放已注册音效或自定义命名空间音效。第二个参数也可以改为 {volume, pitch}。
play_sound_at_entity(sound, volume_or_options?=1, pitch?=1)string (Sound), number/table?=1, number?=1nil在精英位置播放的别名。第二个参数也可以改为 {volume, pitch}。
spawn_particle_at_self(particle, count?=1)string (Particle)/table, int?=1nil在精英位置生成粒子。
play_model_animation(name)stringnil可用时播放自定义 Boss 模型动画。
navigate_to_location(location, speed?=1, force?=false, timeout?=0)table, number?=1, bool?=false, int?=0nil让自定义 Boss 寻路。
get_damager_count()—int返回实时的伤害者数量。
despawn()—nil以 OTHER 原因移除该精英。
remove()—nildespawn() 的别名。
patrol_pause()—bool暂停已配置的巡逻。
patrol_resume()—bool在脚本等待或临时移动后恢复巡逻。
walk_to(x, y, z)number, number, numberbool走到相对于原点的偏移并恢复巡逻。
hold(x, y, z)number, number, numberbool走到偏移位置并停留。
teleport(x, y, z)number, number, numberbool传送到进行实体 tick 的偏移位置。
get_ender_dragon_phase()—string/nil返回 EnderDragon.Phase 名称,或 nil。
set_ender_dragon_phase(phase)string (EnderDragon.Phase)nil设置一个有效的末影龙阶段。
has_mount()—bool检测该 Boss 是否有存活的坐骑载具。
get_mount()—table/nil返回标记了 is_mount = true 的坐骑引用。
set_mount(mount)tablebool让该 Boss 乘坐已解析的实体。
clear_mount()—bool离开当前载具。
dismount()—boolclear_mount() 的别名。
start_tracking_fireball_system(speed?=0.5)number?=0.5nil对于怪物型 Boss,在其有目标期间,于下一个 tick 以及之后每 160 ticks 向每个轴向 20 格范围内的生存/冒险模式玩家发射追踪火球。该任务归能力所有:暂停能力会暂停它,失去目标或关闭能力会停止它。速度必须是有限正数。
handle_spirit_walk_damage(cause)string (DamageCause)nil运行 Spirit Walk 伤害处理。
shield_wall_is_active()—bool检测护盾墙状态。
initialize_shield_wall(openingDirection?=1)int?=1nil将各方向护盾耐久初始化为 Boss 等级。缺口:1 北、2 东、3 南、4 西;其他整数保护四面。已激活的护盾墙不变。
shield_wall_absorb_damage(player, damage)table, numberbool攻击者所在方向的耐久原本为正时扣除伤害;返回 true 表示脚本应自行取消伤害事件,不会自动取消。
deactivate_shield_wall()—nil停止护盾墙的独立任务并移除状态与显示效果。仅关闭 Lua 不会停用护盾墙。
start_zombie_necronomicon(target, chant)table, stringnil为生物目标启动独立控制器。字符串是显示的咒文,不是文件名;使用固定的 necronomicon 僵尸/骷髅文件,以施法者等级召唤。
send_message(text, range?=20)string, number?=20nil向范围内玩家发送经颜色处理的文本。
get_nearby_players(range)numbertable返回附近的 EliteMobs Power Player 表。
get_nearby_elites(radius)numbertable返回同一世界中最多32个存活且被追踪的精英,排除首领自身;按距离排序,距离相同时按 UUID 排序。半径必须大于0且不超过64。
get_target_player()—table/nil当前怪物目标是玩家时返回该目标。
get_nearby_players_in_zone(zone)tabletable返回该区域内包含的玩家。
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?=1nil对区域内部采样并生成粒子。
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?=1nil对区域边缘采样并生成粒子。
get_particles_from_self_toward_zone(zone, particle, speed?=0.1)table, string (Particle), number?=0.1table构建从 Boss 指向采样区域点的定向粒子规格。
get_particles_toward_self(zone, particle, speed)table, string (Particle), numbertable构建指向 Boss 的定向粒子规格;当前的实时构建器会从最后一个传入参数读取 speed。
spawn_particles_with_vector(particles)tablenil生成一组定向粒子规格。
summon_reinforcement(file, zone_or_location?, duration?=0)string, table?, int?=0table/nil在区域采样点、位置或 Boss 处召唤增援;正数 duration 会在该 tick 数后移除。
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、EntityEffect effect、spawn_at_origin、direction_only、track、on_land 和 max_ticks。

context.players:EliteMobs Boss 能力​

方法参数返回值说明
current_target()—table/nil当事件行为者是玩家时返回该行为者,否则在 Boss 当前的怪物目标是玩家时返回该目标。
nearby_players(radius)numbertable返回 Boss 半径范围内的 Player Table。
all_players_in_world()—table返回 Boss 当前世界中的所有 Player Table。

context.entities:EliteMobs Boss 能力​

集合查询排除 Boss 自身。生物过滤器接受 player/players、elite/elites、mob/mobs,其他值表示所有生物。不强制生存/冒险模式,也不检查地下城实例成员身份。直接目标查询独立于这些集合过滤器,返回钩子提供的目标。

方法参数返回值说明
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返回 Boss 所在世界中匹配的生物实体。
get_direct_target_entity()—table/nil返回当前钩子提供的直接目标。
get_boss_spawn_location()—table返回 Boss 最初的出生位置。

context.vectors:EliteMobs Boss 能力​

方法参数返回值说明
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?=0table返回按 pitch 和 yaw(单位为度)旋转后的向量。
normalize_vector(vector)tabletable返回单位向量;零向量仍为零。

context.zones:EliteMobs Boss 能力​

EliteMobs Boss 能力用 Elite Script 区域定义查询取代了共享的整数句柄区域接口。

实体归属、点包含和粒子位置采样是不同形状操作,边界结果可能不同。coverage 改变采样位置,不改变实体选择。watch_zone 捕获形状,向回调传入实体表而非上下文;一 tick 后开始检查,已在内部的实体也会作为进入报告。停止监视不发出离开回调。

方法参数返回值说明
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 Boss 能力​

这个桥接层接受与 Elite Script 目标、区域和相对向量 YAML 配置相同的表键。

方法​

方法参数返回值说明
target(spec)tabletarget handle创建一个目标句柄。
zone(spec)tablezone handle创建一个区域句柄。
relative_vector(spec, location?, zone?)table, table?, zone handle?vector handle创建一个相对向量句柄,其动作位置默认为 Boss。
damage(target, amount?=0, multiplier?=1)target handle, number?=0, number?=1nil提交归因于 Boss 的 Bukkit 伤害;玩家命中进入含倍率的 EliteMobs 战斗缩放,非玩家命中不应用该倍率。
push(target, vector, additive?=false)target handle, table/vector handle, bool?=falsenil一个自有 tick 后替换或叠加捕获目标的速度;所有目标共用一个已解析向量,缺失或非有限向量变为零。
set_facing(target, vector)target handle, table/vector handlenil让解析出的目标实体沿该向量朝向。
spawn_particles(target, particles)target handle, table/stringnil在解析出的目标位置生成该粒子规格。

这些调用不会自动执行 Elite Script 动作列表、条件、冷却、预警延迟或重复。目标句柄保留创建时的事件/直接目标上下文,不应跨无关钩子复用事件相关句柄。first_entity() 是解析器的第一个结果,不保证最近。

目标句柄方法​

方法参数返回值说明
entities()—table解析并返回 Entity Table。
locations()—table解析并返回位置表。
first_entity()—table/nil返回第一个解析出的实体。
first_location()—table/nil返回第一个解析出的位置。

区域句柄方法​

方法参数返回值说明
full_target(coverage?)number?target handle为形状内部创建一个目标句柄。
border_target(coverage?)number?target handle为边界创建一个目标句柄。
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 Boss 能力的事件值会按事件类型有条件地暴露字段和方法。

属性​

字段类型说明
damage_amountnumber/nil伤害事件的数值快照。
damage_causestring/nil当伤害事件暴露该值时,为 DamageCause 名称。
damagertable/nil原始伤害来源实体引用;抛射物命中时是抛射物,而非射手。
projectiletable/nil当伤害来源是抛射物时的抛射物引用。
spawn_reasonstring/nil精英生成原因。
entitytable/nil按钩子类型为受伤增援、死亡或区域事件实体。
is_damage_transferbool/nil仅玩家对精英伤害:当前是否处理显式转移的命中。

方法​

方法参数返回值说明
cancel_event()—nil取消 EliteDamageEvent 或其他可取消事件。
set_damage_amount(amount)numbernil替换 EliteDamageEvent 的伤害值;必须用点号调用:context.event.set_damage_amount(...)。
multiply_damage_amount(multiplier)numbernil乘算 EliteDamageEvent 的伤害值;必须用点号调用:context.event.multiply_damage_amount(...)。
get_damage_amount()—number返回修改后的实时 EliteDamageEvent 伤害。
transfer_damage(target, amount)entity reference, numberbool仅玩家对精英伤害:向实例规则允许的另一个存活精英提交有限非负伤害。零、已取消输入、嵌套转移和原目标返回 false;非精英接收者会报错。true 表示提交,不保证伤害生效,不减少或取消原伤害。

context.world:EliteMobs 追加与覆盖​

Boss 能力继承共享世界表,包括 EliteMobs 视觉闪电与 NPC 生成辅助方法,再添加或覆盖下列方法。继承的坐标方法保留共享行为。Boss 专用位置方法使用 Boss 转换器:省略或非表位置回退到 Boss,缺失坐标为零,显式世界名必须能解析。

方法​

方法参数返回值说明
play_sound_at_location(location, sound, volume?=1, pitch?=1)table, string (Sound), number?=1, number?=1nil覆盖版本,可通过 EliteMobs 支持接受已注册音效或自定义命名空间音效。
spawn_particle_at_location(location, particle, count?=1)table, string (Particle)/table, int?=1nil覆盖版本,可接受 EliteMobs 粒子规格表。
set_block_at_location(location, material, require_air?=false)table, string (Material), bool?=falsenil覆盖版本,通过临时方块管理器永久放置方块,不设计时器,也不跟踪。
place_temporary_block_at_location(location, material, ticks?=0, require_air?=false)table, string (Material), int?=0, bool?=falsenil覆盖版本,使用 EliteMobs 临时方块放置。
get_block_type_at_location(location)tablestring/nil返回大写的 Material 名称;位置无效时返回 nil。
get_highest_block_y_at_location(location)tableint/nil覆盖版本,返回最高方块的 Y 坐标,或 nil。
get_blast_resistance_at_location(location)tablenumber返回方块的爆炸抗性;位置无效时默认为 0。
is_air_at_location(location)tablebool检测目标方块是否为空气。
is_passable_at_location(location)tablebool检测 Bukkit 可通过性。
is_passthrough_at_location(location)tablebool检测该材质是否为非固体。
is_on_floor_at_location(location)tablebool检测目标为非固体且其下方为固体方块。
is_standing_on_material(location, material)table, string (Material)bool检测下方的方块。
strike_lightning_at_location(location)tablenil覆盖版本,在降下闪电之前启用 EliteMobs 闪电绕过机制。
run_empowered_lightning_task_at_location(location)tablenil独立发出 60 次预警,随后生成真实闪电及爆炸强度为 5 的向下火球。会造成伤害;暂停或关闭 Lua 不会取消任务。
set_world_time(time) / set_world_time(location, time)int/table, int?nil设置 Boss 所在世界的时间,或所传位置所在世界的时间。
set_world_weather(weather, duration?=6000) / set_world_weather(location, weather, duration?=6000)string/table, string/int?, int?=6000nil设置 CLEAR、PRECIPITATION、RAIN 或 THUNDER。
run_console_command(command)stringnil以控制台身份派发一条命令。
spawn_boss_at_location(file, location?, level?)string, table?, int?table/nil在所传位置或当前位置、以所传等级或当前等级生成一个自定义 Boss。
spawn_custom_boss_at_location(file, location, options?)string, table, table?table/nil生成一个自定义 Boss;options 支持 silent、level、add_as_reinforcement 和 velocity。
spawn_entity_at_location(type, location, options?)string (EntityType), table, table?table/nil生成一个原版实体;options 支持 velocity、duration、EntityEffect effect、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召唤与 Boss 绑定的增援;正数 duration 会在该 tick 数后移除。
spawn_fireworks_at_location(location, options)table, tabletable/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, tabletable/nil生成一瓶喷溅药水;effects 条目接受 PotionEffectType 的 type、duration、amplifier 和 overwrite,以及顶层的 velocity。
generate_fake_explosion(locations, source?)table, table?nil启用爆炸再生时,移除真实方块并生成会造成伤害的下落碎片。1200 游戏刻后开始恢复;关闭 Lua 不会撤销。位置必须在 Boss 所在世界。
spawn_fake_gold_nugget_at_location(location, velocity, gravity?=false)table, table, bool?=falsetable/nil生成一个假金粒抛射物。
run_fake_gold_nugget_damage(projectiles)tablenil运行假抛射物的伤害判定。
generate_player_loot(times?=1)int?=1nil为符合条件的伤害者生成玩家战利品。
drop_bonus_coins(multiplier?=2)number?=2nil为符合条件的伤害者掉落额外金币。

EliteMobs 假抛射物表​

当生成成功时,spawn_fake_gold_nugget_at_location 会返回这张表。

方法​

方法参数返回值说明
get_location()—table返回假抛射物的位置。
set_gravity(enabled)boolnil设置假抛射物的重力。
remove()—nil移除该假抛射物。
is_removed()—bool检测它是否已被移除。

context.settings​

EliteMobs Boss 能力会从同一个 world 表构建器收到这张设置表。

方法​

方法参数返回值说明
warning_visual_effects_enabled()—bool返回当前的警告视觉特效设置。