UIHandler:UI处理器
UI处理器抽象类
UIHandler
UIHandler是一个抽象类,提供了更优雅的UI管理方式。- 它封装了UI的注册、生命周期回调和数据通信,你只需要继承它并实现回调方法即可。
- 创建继承实现之后,创建实例即注册UI
基本用法
构造参数
identifier: String — UI唯一标识(构造后作为公开只读属性identifier可访问)uiConfig: File — UI配置文件(私有构造参数)
构造时会自动调用 ArcartXUIRegistry.register() 注册UI,并绑定 OPEN、CLOSE、PACKET 三类回调(对应 CallBackType 枚举)。
公开成员
identifier
- 该UI的唯一标识(只读)。
- 类型:
String
plugin(抽象)
- 归属插件,子类必须实现(Java 中重写
getPlugin())。
- 类型:
JavaPlugin
ui
- 构造时注册得到的底层
ArcartXUI对象,可直接用于open/close/sendPacket/run/registerCallBack等操作。
- 类型:
ArcartXUI - 调用示例
生命周期回调
onOpenPre(player)
- UI打开前的回调,请求客户端打开UI之前执行,可在此处理数据或者发送早于控件create事件的预先包
- 详细解释下这个控件create之前的包是什么意思:
- UI打开流程:
- 收到打开请求
- 创建UI实例
- 检查有没有在UI打开之前就给该UI发送的包 如果有则调用对应处理器处理
- 创建该UI所有控件(即上文说的控件create)
- UI打开流程:
- 参数:
player: Player — 目标玩家 - 适合在此处准备数据,发送控件create之前的包
onOpenPost(player)
- UI打开后的回调,客户端确认UI已打开后触发
- 参数:
player: Player — 目标玩家 - 适合在此处发送初始数据到UI
onClose(player)
- UI关闭时的回调
- 参数:
player: Player — 目标玩家 - 适合在此处清理资源、保存数据等
onPacket(player, identifier, data)
- 收到客户端UI发来的数据包时触发
- 参数:
player: Player — 发送数据的玩家identifier: String — 数据包标识data: List<String> — 数据内容
便捷方法
open(player)
- 为玩家打开此UI,会先调用
onOpenPre
- 参数:
player: Player — 目标玩家 - 调用示例
close(player)
- 为玩家关闭此UI
- 参数:
player: Player — 目标玩家 - 调用示例
sendPacket(player, packetHandler, packet)
- 向玩家客户端的UI发送数据包
- 参数:
player: Player — 目标玩家packetHandler: String — 处理器名称packet: Object — 数据包内容
- 调用示例
sendRun(player, ariaCode)
- 在玩家客户端的UI中执行Aria脚本
- 参数:
player: Player — 目标玩家ariaCode: String — Aria脚本代码
- 调用示例
ArcartXUI 接口
ArcartXUI是UI对象的底层接口,UIHandler.ui、ArcartXUIRegistry.register()返回的都是它的实例。- 提供了直接的打开、关闭、发包、执行脚本以及注册回调的能力。
属性
callbacks:MutableMap<CallBackType, MutableList<UICallBack>>— 各类回调列表,键为回调类型id:String— UI唯一标识(可读写)
CallBackType 枚举:PACKET、OPEN、CLOSE — 分别对应收到数据包、UI打开、UI关闭三类事件。
registerCallBack(type, callBack)
- 为指定类型注册一个UI回调。
- 参数:
type: CallBackType — 回调类型(PACKET/OPEN/CLOSE)callBack: UICallBack — 回调,函数式接口,形如void call(CallData event);CallData含player(Player)、identifier(String)、data(List<String>)
- 返回值:无
- 调用示例
open(player)
- 为玩家打开此UI(直接发送打开包)。
- 参数:
player: Player — 目标玩家 - 返回值:无
open(player, callBack)
- 为玩家打开此UI,并注册一个打开回调。
- 参数:
player: Player — 目标玩家callBack: CallBack — 打开回调,函数式接口void call()
- 返回值:无
close(player)
- 为玩家关闭此UI。
- 参数:
player: Player — 目标玩家 - 返回值:无
sendPacket(player, handlerName, packet)
- 向玩家客户端的UI发送数据包。
- 参数:
player: Player — 目标玩家handlerName: String — 处理器名称packet: Object — 数据包内容
- 返回值:无
run(player, code)
- 在玩家客户端的UI中执行Aria脚本。
- 参数:
player: Player — 目标玩家code: String — Aria脚本代码
- 返回值:无
