API
EmakiAttribute 对外提供属性读取、资源读取、属性写入和战斗桥接能力。其他模块如果需要和属性系统联动,应优先使用 API 或 Bukkit ServicesManager 中注册的服务,而不是直接解析 Attribute 内部数据文件。
PdcAttributeApi
PdcAttributeApi 面向“物品属性 payload”的读写。Forge、Strengthen、Gem、Item 这类装备模块可以通过它向装备写入自己的属性来源。
方法用途
| 方法 | 用途 |
|---|---|
registerSource | 注册一个属性来源,例如 forge、strengthen、gem、item。 |
unregisterSource | 注销属性来源。 |
isRegisteredSource | 判断来源是否已注册。 |
registeredSources | 查看当前已注册来源。 |
write | 向物品 PDC 写入某个来源的属性 payload。 |
read | 读取指定来源属性。 |
readAll | 读取物品上所有来源属性。 |
clear | 清理指定来源属性。 |
clearAll | 清理全部 Attribute payload。 |
来源隔离原则
每个模块应写入自己的 source,不要覆盖其他来源。例如 Strengthen 只清理 strengthen 来源,Gem 只清理 gem 来源。这样可以避免强化刷新时误删宝石属性,或宝石提取时误删锻造属性。
EmakiAttributeBridge
EmakiAttributeBridge 面向“玩家当前属性和资源状态”。Skills 等模块通过 Bukkit ServicesManager 读取资源、消耗资源或读取属性。
| 方法 | 用途 |
|---|---|
available | 判断桥接是否可用。 |
readResourceCurrent | 读取玩家当前资源值。 |
readResourceMax | 读取玩家资源上限。 |
consumeResource | 消耗玩家资源。 |
readAttributeValue | 读取玩家当前属性值。 |
接入建议
- 插件启动后再查询服务,避免加载顺序问题。
- 查询不到服务时降级运行,不要让 softdepend 模块直接崩溃。
- 不要缓存长期属性快照,装备变化、重载或 resync 后应重新读取。
- 写属性时写真实 payload,Lore 只作为展示。
- 消耗资源时走 Bridge,避免绕过 Attribute 的资源状态管理。
常见接入场景
- Skills 释放技能前检查和消耗法力。
- Gem 镶嵌后写入宝石属性。
- Strengthen 根据星级写入强化属性。
- Forge 根据品质写入锻造属性。
- 外部插件读取玩家当前攻击、防御或资源。
- 监听
EmakiAttributeDamageEvent拦截或修改属性伤害(详见伤害事件 API 文档)。
PdcAttributeApi 补充
write 重载方法
除了传入 PdcAttributePayload 对象外,还支持直接传 Map:
java
api.write(itemStack, "forge", attributes, meta);
// attributes: Map<String, Double> — 属性 ID → 值
// meta: Map<String, String> — 元数据键值对来源注册校验
写入前会校验 sourceId 是否已注册。未注册的写入会被拒绝并打印警告。确保在 write 之前调用 registerSource。
EmakiAttributeDamageEvent
属性伤害计算完成后触发的 Bukkit 事件。可取消、可修改最终伤害。详见伤害事件 API 文档。