API 与集成
EmakiStrengthenApi
EmakiStrengthen 通过 Bukkit 的 ServicesManager 暴露 API,其他插件可以读取和操作物品的强化状态。
获取 API 实例
java
RegisteredServiceProvider<EmakiStrengthenApi> provider =
Bukkit.getServicesManager().getRegistration(EmakiStrengthenApi.class);
if (provider != null) {
EmakiStrengthenApi api = provider.getProvider();
// 使用 API...
}提示
API 在 EmakiStrengthen 的 onEnable 阶段注册。如果你的插件依赖这个 API,记得在 plugin.yml 里声明 softdepend: [EmakiStrengthen],确保加载顺序正确。
读取强化状态
java
// 读取物品的强化状态
StrengthenState state = api.readState(itemStack);
int currentStar = state.currentStar(); // 当前星级
int temper = state.temperLevel(); // 锻印等级
int successCount = state.successCount(); // 累计成功次数
int failureCount = state.failureCount(); // 累计失败次数
String recipeId = state.recipeId(); // 使用的配方 ID
boolean eligible = state.eligible(); // 是否可强化通过 PdcService 读取原始数据
如果你需要直接读取 PDC 中的原始审计数据:
java
PdcService pdcService = EmakiServiceRegistry.get(PdcService.class);
Map<String, Object> auditMap = pdcService.readAuditMap(itemStack, "strengthen");
int currentStar = (int) auditMap.getOrDefault("current_star", 0);
int temper = (int) auditMap.getOrDefault("temper", 0);PDC 数据结构
强化数据通过 PDC(PersistentDataContainer)存储在装备物品上,数据跟着物品走,不依赖外部数据库。
| 字段 | 类型 | 说明 |
|---|---|---|
recipe_id | String | 使用的强化配方 ID |
current_star | Integer | 当前星级 |
crack_level | Integer | 裂痕等级 |
temper | Integer | 当前锻印等级 |
success_count | Integer | 累计成功次数 |
failure_count | Integer | 累计失败次数 |
first_reach_flags | Map | 首次到达各星级的标记 |
last_attempt_at | Long | 最后一次强化尝试的时间戳 |
materials_signature | String | 材料定义的签名哈希 |