Skip to content

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 文档。