跳转到正文
iPlugin

XerrAPI

显示、物品提示与物品数据的稳定调用入口

所有公共功能从 XerrAPI 获取:

XerrAPI.layouts
XerrAPI.popups
XerrAPI.screens
XerrAPI.compasses
XerrAPI.tooltips
XerrAPI.itemData

Java 使用:

XerrAPI.get().layouts();
XerrAPI.get().popups();
XerrAPI.get().screens();
XerrAPI.get().compasses();
XerrAPI.get().tooltips();
XerrAPI.get().itemData();

调用示例中的 ID 必须先在配置中存在。先准备字体、图片、Layout 和资源包;下面不会为你创建对应配置。完整文件示例见入门路线。

Layout

检查和渲染:

val exists = XerrAPI.layouts.exists("hud_info")

val component = XerrAPI.layouts.render(
    player,
    "hud_info",
    mapOf("title" to "玩家信息")
)

包含 Kether、Placeholder 或其它异步内容时,优先使用:

XerrAPI.layouts.renderAsync(
    player,
    "hud_info",
    mapOf("title" to "玩家信息")
).thenAccept { component ->
    if (component != null) {
        // 在自己的显示通道中使用 component
    }
}

null 表示找不到 Layout 或没有元素可供构建;不要把它当作所有条件隐藏情况的统一返回值。API 返回组件,不会替客户端加载资源包。

XerrAPI.popups.show(
    player,
    "notice",
    mapOf(
        "title" to "任务完成",
        "message" to "获得钻石 ×3"
    )
).thenAccept { handle ->
    handle.updateVariables(mapOf("message" to "获得钻石 ×5"))
    handle.renew()
}

关闭:

handle.close()
handle.close(force = true)

等待生命周期:

handle.shown.thenAccept { shown -> }
handle.finished.thenAccept { reason -> }

排队中的 Popup 也会立即返回 Handle。popupId 是类型 ID,handle.id 是实例 UUID。

Screen

持续效果:

val movie = XerrAPI.screens.show(player, "movie")
movie.close()

播放 Scene:

val scene = XerrAPI.screens.play(
    player,
    "layout_background_demo",
    mapOf(
        "title" to "区域解锁",
        "message" to "你已抵达新的区域"
    )
)

等待 Scene 结束;Marker 必须定义在实际播放的 Scene 内:

scene.finished.thenAccept { reason -> }

val transition = XerrAPI.screens.play(player, "yellow_transition")
transition.waitMarker("covered").thenAccept { reached -> }

Compass 固定目标

XerrAPI.compasses.setTarget(
    player,
    "navigation",
    "quest:main",
    location,
    "quest",
    "主线任务",
    100
)

跟随实体:

XerrAPI.compasses.followEntity(
    player,
    "navigation",
    "party:leader",
    leader,
    "teammate",
    leader.name,
    50
)

移除和隐藏:

XerrAPI.compasses.removeTarget(player.uniqueId, "navigation", "quest:main")
XerrAPI.compasses.setVisible(player.uniqueId, "navigation", false)

所有目标修改都返回 Future。目标内部保存 UUID 和不可变坐标,不长期持有 Bukkit Player、Entity 或 World 对象。

兼容边界

稳定合同只包含 XerrAPI 返回的公开接口、Handle、目标模型和公开事件。带有内部用途的 Container、Loader、Renderer、Service 不属于外部插件兼容范围。

物品提示与数据

XerrAPI.tooltips 负责绑定控制与客户端显示副本,不改写源名称和 Lore,XerrAPI.itemData 负责只读快照与物品库读取器注册。目标位置校验、NBT/PDC 路径与刷新方式见物品提示与数据接入。