公共 API
获取 Symphony 服务并选择对应的扩展接口
Symphony 通过 Bukkit ServicesManager 注册 SymphonyApi。附属插件应把 API 设为 compileOnly,不要把 Symphony 类打进自己的 JAR。
必须安装 Symphony 时,在 plugin.yml 中使用 depend;仅在存在时启用兼容功能,则使用 softdepend 并处理服务为空的情况。
选择需要的服务
| 服务 | 用途 | 详细说明 |
|---|---|---|
attributes | 读取、解释、失效和重算属性;注册 AttributeProvider | 属性 API |
sources | 添加、替换或移除属性与 ItemStack | 属性来源 API |
definitions | 注册属性定义,读取套装和被动定义 | 属性定义;套装与被动定义 |
items | 检查和重建 Overture 物品 | 物品 API |
skills | 查看和施放当前装备提供的技能 | 物品 API |
levels | 注册 LevelProvider 并读取等级 | 角色数据 API |
combatPower | 读取战力与计算详情 | 角色数据 API |
metadata | 读取战斗状态、元素附着、套装和被动 | 角色数据 API |
affixes | 读取当前生效的词条 | 物品 API |
damage | 主动造成伤害、读取伤害记录和操作护盾 | 伤害 API 与事件 |
triggers | 注册触发器和回调,读取错误停用状态 | 回调与 Aria 脚本 |
可运行的附属示例
源码仓库提供两个独立插件:
示例目录各自包含构建、配置、命令和安装说明。
注册项的清理
registerProvider、registerAttribute 等方法会返回 RegistrationHandle。附属插件应保存这些对象,并在停用时调用 close()。
close 可以重复调用。即使忘记手动关闭,Symphony 也会在提供注册项的插件停用时移除它们;主动关闭仍能让重载过程更清晰。
主要事件
| 类型 | 事件 |
|---|---|
| 属性 | AttributeSnapshotPrepareEvent、AttributeSnapshotCommittedEvent |
| 套装 | SetCountsChangedEvent |
| 词条 | AffixApplyEvent、AffixRemoveEvent、AffixTriggerEvent |
| 宝石 | GemInsertEvent、GemRemoveEvent、SocketDrillEvent |
| 强化 | EnhanceEvent |
| 技能 | SkillPrepareEvent、SkillConfirmedEvent |
| 等级 | LevelChangeEvent |
| 伤害 | SymphonyHitCheckEvent 与五个伤害阶段事件 |
伤害事件的选择和字段较多,单独见主动伤害与伤害事件。
线程规则
- 实体、物品栏、Bukkit 事件、伤害、技能、等级刷新和来源写入都应在合法 Bukkit 主线程调用;
- AttributeProvider 与 LevelProvider 不应等待数据库或网络;
combatPower.cached(UUID)可以供异步只读调用,缓存不存在时不要在异步线程强制计算实体;- Symphony 不支持 Folia,本节规则不适用于 RegionScheduler。
Java 调用
公开接口可以从 Java 直接使用。按攻击者当前属性发起普通攻击时,可以省略伤害倍率,也可以显式传入倍率:
固定数值的单通道伤害提供四参数和五参数重载:
等级与属性 Provider 都是普通接口,Java 和 Kotlin 附属插件均可实现。
