简体中文
公开 API
第三方插件通过 emaki-codex-api 可以访问 EmakiCodex 的原版 Advancement 层 (catalog(), operations() 与 extensions())
编译依赖
xml
<repositories><repository><id>jiuwu-releases</id><url>https://repo.crypticlib.com/repository/maven-public/</url></repository></repositories>
<dependency><groupId>emaki.jiuwu.craft</groupId><artifactId>emaki-codex-api</artifactId><version>1.1.5</version><scope>provided</scope></dependency>kotlin
repositories { maven("https://repo.crypticlib.com/repository/maven-public/") }
dependencies { compileOnly("emaki.jiuwu.craft:emaki-codex-api:1.1.5") }仅编译依赖
runtime 已内嵌未 relocate 的 API 类. 不要安装, bundle, shade 或 relocate API Jar; 重复 ClassLoader 类型会破坏事件和 bridge
门面与分层
使用前先检查 EmakiCodexApi.status().usable(). 非 null 的真实层只有 catalog(), operations() 与 extensions(); install, uninstall, Bridge 仅属于 runtime
当前公开 API 只覆盖原版 Advancement 层: catalog(), operations() 与 extensions() 处理已注册 advancement 与真实 Minecraft progress. 分类条目图鉴 (codex/*.yml 的解锁, 激活, 领取) 目前没有公开的 API 接口约定, 只能通过命令, GUI 与配置管理; 不要按 advancement 方法名推断存在对应的条目方法
catalog() 提供 advancement/page 查询, 总数与在线玩家完成状态; 实时 progress 读取需要玩家 owner thread
operations().grant(UUID,id) / revoke(UUID,id) 是同步 owner-thread 写操作. 已完成节点再次授予, 未完成节点撤销等无变化情形以 FailureKind.REJECTED 返回, 未注册或服务端缺失的 id 以 NOT_FOUND 返回, 事件取消以 CANCELLED 返回; Codex 的公开操作不产生 Partial
Extensions
extensions().registerAdvancement(Plugin,AdvancementSpec) 在 owner namespace 注册外部 advancement, 要求 server global thread, 返回 AdvancementRegistration, owner disable 时自动移除
AdvancementSpec 字段为: id, icon, title, description, AdvancementFrameType, 可空 parent key, hidden, showToast, announce; 空 icon 默认 minecraft:book, 空 frame 默认 TASK
registerTrigger(Plugin,AdvancementTrigger) 注册 owner-scoped trigger provider. provider 以 id() 标识, 按较小 priority() 优先, 在 AdvancementTriggerContext(player,triggerId,variables) 的玩家 owner thread 同步执行, 返回要授予的 advancement id 集合; 不得返回 null, 重复 id 在变更前折叠
结果说明
无负载成功使用 EmakiResult<Unit>; 通用可选负载访问器为 optionalValue(). FailureKind 只有 UNAVAILABLE, NOT_FOUND, INVALID_INPUT, REJECTED, CANCELLED, TARGET_OFFLINE, WRONG_THREAD, INTERNAL_ERROR