Skip to content

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_idString使用的强化配方 ID
current_starInteger当前星级
crack_levelInteger裂痕等级
temperInteger当前锻印等级
success_countInteger累计成功次数
failure_countInteger累计失败次数
first_reach_flagsMap首次到达各星级的标记
last_attempt_atLong最后一次强化尝试的时间戳
materials_signatureString材料定义的签名哈希

Released under the GPL-3.0 License