[动作引擎]Chronos
API 与事件
Chronos Java API 和事件系统
概述
Chronos 提供了完整的 Java API,让你可以在自己的插件中集成和扩展动作系统功能。
获取 API
API 接口
ChronosAPI 完整接口
API 方法详解
控制器管理
| 方法 | 说明 | 返回值 |
|---|---|---|
getPlayerControllerId(player) | 获取玩家当前控制器ID | String 或 null |
setPlayerController(player, id) | 为玩家设置控制器 | void |
removePlayerController(player) | 移除玩家的控制器 | void |
示例:根据职业设置控制器
状态查询
| 方法 | 说明 | 返回值 |
|---|---|---|
getPlayerStateId(player) | 获取玩家当前状态ID | String 或 null |
getPlayerStateGroupId(player) | 获取玩家当前状态组ID | String 或 null |
getPlayerCooldown(player, group) | 获取冷却组剩余时间(ms) | long |
示例:检查玩家是否在攻击状态
状态控制
| 方法 | 说明 | 返回值 |
|---|---|---|
tryEnterState(player, stateId) | 尝试进入状态(检查条件) | boolean |
tryEnterControlledState(player, stateId, duration) | 尝试进入受控状态 | void |
forceEnterStateFromRootChain(player, stateId) | 强制进入状态 | void |
示例:让玩家进入受击状态
示例:强制触发技能
tryEnterState vs forceEnterStateFromRootChain:
tryEnterState:会检查条件、冷却、blocked_group 等forceEnterStateFromRootChain:无视所有条件强制进入,但状态必须在 combo 根节点声明
上下文管理
| 方法 | 说明 | 返回值 |
|---|---|---|
getPlayerContext(player) | 获取玩家的 Glimmer 上下文 | Context |
示例:读取自定义变量
PlaceholderAPI 占位符
Chronos 提供了 PlaceholderAPI 扩展,可以在任何支持 PAPI 的插件中获取玩家的实时动作信息。
需要服务器安装 PlaceholderAPI 插件,Chronos 会在启动时自动注册扩展。
占位符列表
| 占位符 | 返回值 | 说明 |
|---|---|---|
%chronos_controller% | 控制器ID / none | 当前控制器 |
%chronos_state% | 状态ID / none | 当前正在执行的状态 |
%chronos_state_group% | 状态组ID / none | 当前状态所属的组 |
%chronos_in_state% | true / false | 是否正在执行状态 |
%chronos_window_derive% | true / false | 是否在派生窗口内 |
%chronos_window_cancel% | true / false | 是否在取消窗口内 |
%chronos_window_invincible% | true / false | 是否在无敌窗口内 |
%chronos_window_super_armor% | true / false | 是否在霸体窗口内 |
%chronos_charge_time% | 毫秒数 | 当前蓄力时间 |
%chronos_cooldown_<组名>% | 毫秒数 | 指定冷却组的剩余冷却时间 |
使用示例
在记分板插件中显示当前状态:
在条件插件中判断玩家是否在攻击:
获取冷却组剩余时间(组名为 攻击):
配合复合触发器使用:
可以将其他插件的 PAPI 占位符作为触发器条件,同时用 Chronos 的占位符在 UI 中展示玩家状态:
事件系统
Chronos 提供了三个核心事件,可以通过 Bukkit 事件系统监听。
PlayerEnterStateEvent
玩家进入状态时触发。
监听示例:
PlayerLeaveStateEvent
玩家离开状态时触发。
监听示例:
PlayerControllerChangeEvent
玩家控制器切换时触发。
监听示例:
集成示例
与 MythicMobs 集成
让怪物技能触发玩家受控状态:
与职业插件集成
根据职业切换控制器:
注意事项
线程安全: Chronos API 应该在主线程中调用。如果从异步任务中调用,请使用 Bukkit.getScheduler().runTask() 包装。
依赖声明: 在你的 plugin.yml 中添加依赖:
