LogoArcartX Doc

界面协议

市集的界面注册、客户端动作和商品数据

界面协议

每间商店使用 shops/<商店ID>/ui.yml注册UI。Agora 按目录名注册界面,例如 provisioner 对应 Agora:shop_provisioner。

客户端动作

动作参数用途
browsepage请求页码,从 0 开始,范围 0..999999,服务端限制到实际页数
purchaseproductId、quantity购买指定商品,份数为 1..64 的整数,需满足单次上限与个人额度
Packet.send('browse', '0')
Packet.send('purchase', 'bread', '2')
处理器字段界面行为
synctitle, page, pages, products更新标题、页码和整页商品。
resultsuccess, message显示购买结果并解除购买等待。成功后再次发送 sync 刷新个人额度。
errormessage显示操作失败原因并解除购买等待。

products 最多包含该店 page-size 项,详情随该页一起下发。只计已启用且通过提供者检查的商品,末页可不足一页,空商店返回第 0 页和 pages: 1。

{
  "title": "补给商人",
  "page": 0,
  "pages": 1,
  "products": []
}

商品字段

字段类型说明
idString商品 ID,动态卡片名为 product_<id>
name、descriptionString名称与说明,说明用 </n/> 分行
priceTextString单份价格显示文本
priceDigits、priceScaleString、Integer单价数字串与小数位数,例如 125 和 1 表示 12.5
currencyNameString结算货币显示名称
remainingText、remainingShort、remainingNarrowString详情、宽卡片、窄卡片的个人额度文案
itemJsonStringitemjson 输出,交给 Slot.setItemIcon
contentsArray商品内容
maxQuantityInteger单次上限与个人剩余额度的较小值,0 表示不能购买

内容字段

字段类型说明
keyString稳定展示键,用于动态控件命名
kindStringitem、currency 或 command
nameString仅货币和命令有此字段
descriptionString内容说明,以 </n/> 分行
amountDigits、amountScaleString、Integer单份内容数量,命令组为 1 和 0
itemJsonString仅物品有此字段
iconString仅货币和命令有此字段,值为辅助图标路径

物品槽调用 setItemIcon(itemJson) 后,用 getSlotItemStack().getName() 读取名称。

操作状态与控件

合计与内容数量按十进制数字串乘以份数计算,支持最多 6 位小数。

ICON 模式使用带 url NBT 的展示用 PAPER

重载通过配置检查后关闭旧窗口,重新打开使用新界面。

On this page