跳到主要内容

GUI 与动画

GUI 字符布局​

TreasuresLite 使用字符布局系统定义开箱界面。每个字符映射到一个槽位,通过 layout 定义界面结构,通过 claim.key 和 icons 定义各字符对应的内容。

默认配置示例​

title: "奖励箱"

layout:
- '#########'
- ' 1111111 '
- ' 1111111 '
- ' 1111111 '
- ' 1111111 '
- '#########'
  • layout 中的每一行对应 GUI 的一行(每行 9 个字符 = 9 个槽位)
  • 行数决定 GUI 的大小(上例为 6 行 = 54 格)
  • 空格表示空槽位
  • 1 对应 claim.key: 1,即可领取奖励的槽位
  • # 对应 icons 中定义的装饰图标

icons 装饰图标​

icons:
'#':
material: "GRAY_STAINED_GLASS_PANE"
name: " "
actions:
left: |-
tell "点nm呢"
right: |-
tell "拿不了"

icons 中的每个键对应 layout 中的一个字符。支持配置:

配置项说明
material物品材质,支持所有物品源格式。必填
name显示名称
lore显示 Lore
amount显示数量,必须在 1 到该物品最大堆叠数之间
actions点击动作(Kether 脚本),支持 left、right、all

图标也可以只写材质名的简写形式:

icons:
'#': "GRAY_STAINED_GLASS_PANE"

装饰图标会自动添加全部隐藏标签,因此不会显示附魔、属性等额外信息。图标的 material 同样是严格解析,材质名写错会导致宝箱界面构建失败。

开箱动画​

插件通过 NMS 发包实现箱子的打开/关闭动画:

  1. 玩家右键点击虚拟宝箱
  2. 钥匙、事件和界面全部确认成功后,发送箱子打开动画数据包(箱盖打开效果)
  3. 打开 GUI 界面供玩家领取奖励
  4. 关闭 GUI 时发送箱子关闭动画数据包
  5. 延迟 15 tick 后还原方块,并重新对账一次显示

这个过程是自动的,不需要额外配置。

只有三种方块有开合动画

箱盖开合动画依赖原版箱子的方块动作数据包,因此只对 CHEST、TRAPPED_CHEST、ENDER_CHEST 生效。

配成头颅、木桶或 CraftEngine 自定义方块时,开箱流程一切正常,但不会有开合动画,只会更新方块状态。

玩家跨世界时不会发送动画

如果玩家在界面打开期间被传送到别的世界,插件不会把旧世界的坐标动画发到新世界,避免出现错位的幽灵方块。

事件脚本​

宝箱配置文件中的 events 节点可以绑定各阶段的 Kether 脚本:

events:
open: |-
tell "打开了闸总"
close: |-
tsl-claim
claim: |-
tell "领取了个什么东西啊"
事件触发时机说明
open玩家右键打开宝箱时在钥匙检查通过后、GUI 打开前执行。可通过 tsl-cancel 取消
closeGUI 关闭时常用于自动领取未领取的奖励(tsl-claim)
claim玩家点击领取单个奖励时可用 &amount 获取物品数量
spawn—预留未生效,当前版本不会执行
events.spawn 与 &chest-* 变量目前不可用

默认 def.yml 带有 spawn 段落和 {{ &chest-world }} 之类的变量,但当前版本的代码只会执行 open、close、claim 三个事件,&chest-* 变量也没有实现。写在 spawn 下的脚本不会执行,也不会报错。

需要在宝箱显示时触发逻辑的话,只能让其他插件监听 Bukkit 事件 TreasureSpawnEvent。

全息文字​

警告

全息文字目前只是预留配置。插件里有 Adyeshach 的挂钩骨架和默认样例,但宝箱流程并没有调用它,配置 hologram 不会产生任何效果,也不会报错。不要按正式功能使用。

配置预留如下:

hologram:
offsetX: 0
offsetY: 0
offsetZ: 0
update: 20
text:
- '这是个全息'
- '这是个全息'
- '这是个全息'

背包锁定​

开启 lock_inventory 后,玩家在开箱 GUI 中无法点击自己背包内的物品:

settings:
lock_inventory: true