事件技能
事件技能配置在坐骑配置的 event 节点下。每个事件技能可以监听坐骑状态、移动、飞行、受伤、骑乘操作等事件,并在检测后按几率执行 MythicMobs 技能、消息、指令以及玩家或坐骑动作。
事件技能只会在玩家正在骑乘对应坐骑时检测。技能触发后会先进入冷却,再判断触发几率;无论本次几率判断成功还是失败,都会进入冷却。
配置结构
yaml
event:
骑乘技能示例:
trigger-type: 'start-riding'
chance: 0.5
cooldown: 1000
mythic-skill: ''
success-message:
- '你触发了示例技能'
fail-message:
- '你没有触发示例技能'
success-command:
- '[console]tell %player_name% 成功时执行这条指令'
fail-command:
- '[player]say 触发失败'
ride-action: ''
player-action: ''事件名称 骑乘技能示例 只用于区分同一个坐骑下的不同技能,可以自行修改。插件会读取 event 下的所有配置节点。
配置项
| 配置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
trigger-type | 字符串 | 无 | 技能触发类型。必须填写支持的触发类型。 |
chance | 数字 | 1 | 触发几率。插件使用随机数与该值比较,配置 0 到 1 可分别表示不触发到必定触发。 |
cooldown | 整数 | 1000 | 技能检测冷却,单位为毫秒。触发检测后立即进入冷却,不论成功或失败。 |
mythic-skill | 字符串 | 空字符串 | 触发成功后由玩家释放的 MythicMobs 技能。为空时不释放。 |
success-message | 字符串列表 | 空列表 | 几率判断成功后发送给玩家的消息。支持使用 & 作为颜色符号。 |
fail-message | 字符串列表 | 空列表 | 几率判断失败后发送给玩家的消息。支持使用 & 作为颜色符号。 |
success-command | 字符串列表 | 空列表 | 几率判断成功后执行的指令。 |
fail-command | 字符串列表 | 空列表 | 几率判断失败后执行的指令。 |
ride-action | 字符串 | 空字符串 | 几率判断成功后播放的坐骑动作。需要萌芽或龙核提供动作支持。 |
player-action | 字符串 | 空字符串 | 几率判断成功后播放的玩家动作。需要萌芽或龙核提供动作支持。 |
触发类型
trigger-type | 触发时机 | 触发条件 |
|---|---|---|
start-riding | 开始骑乘 | 玩家成功创建坐骑并触发开始骑乘事件时检测。 |
end-riding | 结束骑乘 | 玩家结束骑乘、被强制下坐骑或插件处理结束骑乘时检测。 |
fly-up | 飞行上升 | 飞行坐骑处于上升状态时检测。该状态由玩家按住跳跃键或抬头上升产生。 |
fly-down | 飞行下降 | 飞行坐骑处于下降状态时检测。该状态由玩家低头产生。 |
fly-move | 飞行移动 | 飞行坐骑处于水平移动状态时检测。 |
rising | 坐骑攀爬 | 陆行坐骑向前移动并检测到可攀爬的障碍时检测。 |
forward | 开始移动 | 坐骑从无移动输入变为有移动输入时检测,包含前进、后退或横向输入。 |
cease | 停止移动 | 坐骑从有移动输入变为无移动输入时检测。 |
damaged | 坐骑受伤 | 坐骑受到伤害并成功触发坐骑受伤事件时检测。若坐骑配置为不可受伤,则不会进入该事件处理。 |
second | 周期检测 | 坐骑每运行约 1 秒检测一次。 |
right | 玩家右键 | 玩家骑乘期间执行右键交互时检测,包括右键空气和右键方块。 |
left | 玩家左键 | 玩家骑乘期间执行左键交互时检测。 |
飞行和移动相关事件并不是每个游戏刻都触发。坐骑实体通常每 10 个游戏刻产生一次飞行或攀爬事件,每 20 个游戏刻产生一次 second 事件,因此相关技能的实际检测频率还会受到事件产生频率和技能冷却影响。
触发判定
一次事件技能检测按以下顺序处理:
- 检查玩家当前是否存在骑乘实例。
- 检查该技能的冷却是否结束。
- 立即设置下一次可检测时间。
- 使用随机数与
chance比较。 - 成功时执行成功分支,失败时执行失败分支。
成功分支可以同时执行以下内容:
- 释放
mythic-skill。 - 发送
success-message。 - 执行
success-command。 - 播放
ride-action。 - 播放
player-action。
失败分支只执行以下内容:
- 发送
fail-message。 - 执行
fail-command。
fail-message 和 fail-command 不代表事件没有被检测到,而是表示事件已经通过冷却检查,但随机几率判断失败。
MythicMobs 技能
mythic-skill 配置的是 MythicMobs 技能名称。触发成功后,插件以当前骑乘玩家作为施法者释放技能,并将玩家准星指向的生物作为目标;没有指向目标时使用玩家自身作为目标。
yaml
event:
火焰技能:
trigger-type: 'right'
chance: 1
cooldown: 3000
mythic-skill: 'RideFire'使用该功能时需要安装并启用 MythicMobs,并确保配置的技能名称存在。技能不存在时不会正常释放,插件会向玩家发送技能不存在的提示。
指令执行
success-command 和 fail-command 都是字符串列表,每行执行一条指令。
| 前缀 | 执行身份 | 说明 |
|---|---|---|
[console] | 控制台 | 以控制台身份执行后面的指令。 |
[op] | 临时 OP 玩家 | 临时给予玩家 OP,执行指令后恢复原来的 OP 状态。 |
[player] | 玩家 | 以玩家身份执行后面的指令。 |
| 无前缀 | 玩家 | 未填写前缀时默认以玩家身份执行。 |
yaml
event:
指令技能:
trigger-type: 'start-riding'
success-command:
- '[console]give %player_name% diamond 1'
- '[op]some-player-command'
- '[player]say 技能成功'
fail-command:
- '[console]tell %player_name% 技能失败'指令执行前会进行以下处理:
- 解析 PlaceholderAPI 变量。
- 解析
eval:{表达式}数值表达式。 - 解析
ceil:{表达式}向上取整表达式。 - 解析
floor:{表达式}向下取整表达式。 - 将
&颜色符号转换为游戏颜色代码。
表达式可以使用 ~格式 指定数值格式,未指定格式时默认保留为整数形式。
yaml
event:
数值指令:
trigger-type: 'second'
cooldown: 5000
success-command:
- '[console]tell %player_name% 当前数值为 eval:{1+2}'
- '[player]say 向上取整结果为 ceil:{1.2}'
- '[player]say 两位小数结果为 eval:{10/3~%.2f}'其中 %player_name% 等变量由 PlaceholderAPI 解析。未安装或未启用 PlaceholderAPI 时,相关变量无法正常提供值。
动作配置
ride-action 和 player-action 只在技能触发成功后执行。插件会根据已启用的动作插件自动选择播放方式:
- 启用萌芽时,使用萌芽模型动作。
- 未使用萌芽且启用龙核时,使用龙核动作。
- 两者都未启用时,不会播放对应动作。
动作支持以下格式:
| 格式 | 说明 |
|---|---|
动作名 | 播放动作,不主动指定停止时间。 |
动作名:毫秒 | 播放动作,并在指定毫秒数后停止。 |
yaml
event:
动作技能:
trigger-type: 'right'
cooldown: 2000
ride-action: '坐骑攻击:1000'
player-action: '玩家施法:1500'技能成功播放动作时,骑乘期间配置的循环动作会暂停约 1 秒,并在恢复后从动作列表开头重新播放。
与骑乘动作的关系
事件技能的 ride-action、player-action 与坐骑配置中的 riding-animation 用途不同:
| 配置 | 触发方式 | 播放对象 |
|---|---|---|
event.*.ride-action | 对应事件技能成功时 | 坐骑实体 |
event.*.player-action | 对应事件技能成功时 | 骑乘玩家 |
riding-animation | 玩家持续骑乘期间循环播放 | 骑乘玩家 |
事件技能动作只在成功分支播放,不会因为 fail-message 或 fail-command 执行而播放。
冷却与周期技能
cooldown 的单位是毫秒,默认值为 1000。对于 second 类型,可以使用较大的冷却值限制周期检测频率:
yaml
event:
周期技能:
trigger-type: 'second'
chance: 1
cooldown: 8000
success-message:
- '周期技能已触发'由于 second 事件约每秒检测一次,cooldown: 8000 表示技能约每 8 秒具备一次检测机会。实际触发时间还会受到事件调度和服务器运行状态影响。
技能冷却保存在当前骑乘实例中。玩家结束骑乘后,当前实例及其技能冷却一并移除;重新骑乘后会重新开始计算冷却。
事件数据
插件提供以下自定义 Bukkit 事件,事件技能由这些事件驱动:
| 事件类 | 对应触发类型 | 可读取数据 |
|---|---|---|
StartRidingEvent | start-riding | 玩家、坐骑实体、坐骑数据 |
EndRidingEvent | end-riding | 玩家、坐骑实体、坐骑数据 |
RideFlyUpEvent | fly-up | 玩家、坐骑实体、坐骑数据 |
RideFlyDownEvent | fly-down | 玩家、坐骑实体、坐骑数据 |
RideFlyMoveEvent | fly-move | 玩家、坐骑实体、坐骑数据 |
RideRisingEvent | rising | 玩家、坐骑实体、坐骑数据 |
RideMoveForwardEvent | forward | 玩家、坐骑实体、坐骑数据 |
RideMoveCeaseEvent | cease | 玩家、坐骑实体、坐骑数据 |
RideDamagedEvent | damaged | 玩家、受伤坐骑实体、坐骑数据 |
RideSecondEvent | second | 玩家、坐骑实体、坐骑数据 |
right 和 left 由玩家交互事件直接检测,不对应单独的自定义事件类。
相关注意事项
- 事件技能配置在每个坐骑文件自己的
event节点下,不是插件主配置config.yml的节点。 mythic-skill只在随机判断成功时执行,失败时不会释放 MythicMobs 技能。ride-action和player-action只在萌芽或龙核动作支持可用时生效。- 坐骑受到伤害时,如果
ride-can-damaged为false,伤害会被取消,因此不会进入damaged技能处理。 - 如果坐骑配置设置了
ride-or-player-damaged-end-riding: true,坐骑或玩家受到伤害后可能立即结束骑乘;事件技能是否执行取决于受伤事件的处理顺序和当前坐骑状态。 - 事件技能使用 MythicMobs、PlaceholderAPI、萌芽或龙核的功能时,必须先安装并启用对应插件。