发包与变量
时装衣橱通过 DragonCore 自定义数据包与服务端交互,并通过 PlaceholderAPI 提供玩家时装变量。默认界面已经包含所需逻辑,只有修改或重写 时装衣橱.yml 时才需要使用本页内容。
基本信息
| 项目 | 内容 |
|---|---|
| DragonCore 发包标识 | LyArmourersWardrobe |
| DragonCore 界面名称 | 时装衣橱 |
| 默认界面文件 | 时装衣橱.yml |
| 打开界面 | /lysz open |
| PlaceholderAPI 标识 | law |
| 发包间隔 | 由 packet-interval 控制,默认 300 毫秒 |
服务端只处理标识为 LyArmourersWardrobe 的数据包。玩家数据尚未加载时,发包不会生效。
同一名玩家连续发包的时间间隔小于 packet-interval 时,后一个数据包会被直接忽略。自定义界面中的按钮、搜索框和下拉框应避免在短时间内重复发包。
客户端发包格式
数据包参数按顺序传递。第一个参数固定为操作名称,后续参数根据操作类型填写。
| 操作 | 参数顺序 | 说明 |
|---|---|---|
| 初始化 | 初始化 | 创建玩家本次打开界面使用的筛选缓存,并刷新列表、穿戴槽位、预设按钮与筛选按钮。 |
| 上一页 | 上一页、页码组件名 | 页码大于 1 时进入上一页,并修改指定组件的 texts 值。 |
| 下一页 | 下一页、页码组件名 | 当前页之后仍有时装时进入下一页,并修改指定组件的 texts 值。 |
| 穿戴或试穿 | 穿戴显示时装、时装ID | 已拥有时直接穿戴;未拥有时按试穿时间和冷却设置进行试穿。 |
| 脱下时装 | 脱下时装、类型 | 移除当前预设中指定类型的时装。 |
| 显示或隐藏 | 显示或隐藏时装、类型、组件名 | 切换指定类型的隐藏状态,并调用界面方法修改对应组件。 |
| 设置显示状态 | 显示或隐藏时装、类型、组件名、true/false | 可选第四个参数用于明确设置隐藏状态,而不是直接反转当前状态。 |
| 搜索时装 | 搜索时装、搜索内容 | 按时装显示名称的拼音结果筛选,并回到第 1 页。 |
| 选择类型 | 选择时装类型、类型 | 修改类型筛选并回到第 1 页。 |
| 选择拥有状态 | 选择是否拥有、筛选值 | 修改拥有状态筛选并回到第 1 页。 |
| 选择品质 | 选择时装品质、品质等级 | 修改品质筛选并回到第 1 页。 |
| 切换预设 | 切换预设、预设序号 | 切换当前穿戴方案,并刷新穿戴槽位、预设按钮和搭配详情。 |
初始化
打开界面后应发送一次初始化包:
text
LyArmourersWardrobe / 初始化初始化会执行以下操作:
- 新建筛选缓存,默认页码为
1。 - 默认显示全部类型、全部品质和全部拥有状态。
- 清空并重新填充当前穿戴槽位。
- 生成时装列表组件。
- 生成
5个时装预设按钮,序号为0至4。 - 生成类型、品质和拥有状态筛选按钮。
筛选缓存只有初始化后才会创建。自定义界面不得在初始化之前发送翻页或筛选数据包。
翻页
text
LyArmourersWardrobe / 上一页 / 页码组件名
LyArmourersWardrobe / 下一页 / 页码组件名页码组件名 是需要更新页码文本的 DragonCore 组件 ID。翻页成功后,服务端会把该组件的 texts 设置为新的页码。
每页显示数量由 file-armourers-amount 决定,默认值为 24。第一页页码固定从 1 开始;没有上一页或下一页时,服务端不会修改界面。
穿戴与试穿
text
LyArmourersWardrobe / 穿戴显示时装 / 时装ID服务端会依次检查:
- DragonArmourers 中能否取得该时装的类型。
- 时装是否已经在插件的
armourers配置目录中注册。 - 玩家是否永久拥有或正在试穿该时装。
- 未拥有时,玩家的试穿冷却是否已经结束。
玩家未拥有时装时,此操作会授予临时使用权限并自动穿戴。试穿持续时间由 try-on-time 控制,下次试穿冷却由 next-try-on-cooldown 控制。
重复选择当前部位已经穿戴的同一时装时,不会再次刷新皮肤。试穿时装到期后会从拥有列表和全部预设中移除。
脱下时装
text
LyArmourersWardrobe / 脱下时装 / 类型此操作只修改当前预设。指定类型当前没有穿戴时装时,不会执行额外操作。
显示与隐藏
切换当前状态:
text
LyArmourersWardrobe / 显示或隐藏时装 / 类型 / 组件名明确设置目标状态:
text
LyArmourersWardrobe / 显示或隐藏时装 / 类型 / 组件名 / true
LyArmourersWardrobe / 显示或隐藏时装 / 类型 / 组件名 / false第四个参数含义如下:
| 参数 | 结果 |
|---|---|
true | 隐藏该类型的时装。 |
false | 显示该类型的时装。 |
| 不传或不是布尔值 | 反转当前隐藏状态。 |
状态发生变化后,服务端会刷新玩家皮肤,并根据结果调用以下界面方法:
| 状态 | 服务端调用的方法 |
|---|---|
| 隐藏 | 组件修改_当前时装槽位隐藏 |
| 显示 | 组件修改_当前时装槽位显示 |
发包中的 组件名 会作为方法参数传回客户端。若目标状态与当前状态相同,服务端不会重复刷新或调用界面方法。
搜索
text
LyArmourersWardrobe / 搜索时装 / 搜索内容搜索匹配的是时装配置中的 name,插件会把时装名称和搜索内容转换为不带分隔符的小写拼音后进行包含判断。因此可以使用完整名称、名称片段或对应拼音搜索。
搜索后列表会回到第 1 页。当前代码不会自动修改页码文本组件,自定义界面需要自行同步页码显示。
类型筛选
text
LyArmourersWardrobe / 选择时装类型 / 类型| 类型值 | 默认显示名称 | 用途 |
|---|---|---|
all | 全部 | 不限制时装类型,仅用于筛选。 |
sword | 武器 | 武器时装。 |
bow | 弓箭 | 弓箭时装。 |
outfit | 套装 | 套装时装。 |
wings | 翅膀 | 翅膀时装。 |
head | 帽子 | 头部时装。 |
chest | 上衣 | 胸部时装。 |
legs | 裤子 | 腿部时装。 |
feet | 鞋子 | 脚部时装。 |
类型显示名称来自 config.yml 的 display-type。筛选后列表会回到第 1 页,并重新生成类型按钮和下拉框文本。
拥有状态筛选
text
LyArmourersWardrobe / 选择是否拥有 / 筛选值| 筛选值 | 显示状态 | 说明 |
|---|---|---|
all | 全部 | 显示全部时装。 |
owned | 已拥有 | 显示玩家拥有的时装,包含正在试穿的时装。 |
not_owned | 未拥有 | 显示玩家当前没有使用权限的时装。 |
| 其它值 | 全部 | 未识别的值按全部处理。 |
筛选后列表会回到第 1 页,并重新生成拥有状态按钮和下拉框文本。
品质筛选
text
LyArmourersWardrobe / 选择时装品质 / 品质等级| 品质值 | 说明 |
|---|---|
-1 | 显示全部品质。 |
0 及以上整数 | 显示 config.yml 中对应等级的品质。 |
品质等级来自 config.yml 的 quality 配置。自定义界面应只发送实际存在的品质等级,否则后续刷新品质文本时可能无法取得对应品质数据。
筛选后列表会回到第 1 页,并重新生成品质按钮和下拉框文本。
切换预设
text
LyArmourersWardrobe / 切换预设 / 预设序号插件当前为每名玩家创建 5 个预设,序号为 0、1、2、3、4。默认预设序号为 0。
每个预设分别保存:
- 各类型当前穿戴的时装 ID。
- 各类型当前是否隐藏。
切换预设后会清空客户端穿戴槽位,并按新预设重新填充。只有切换前后的穿戴映射或隐藏映射不同时,服务端才会请求刷新玩家皮肤。
自定义界面只能发送存在的预设序号。服务端没有为越界序号提供回退处理。
槽位命名
| 槽位格式 | 说明 |
|---|---|
armourers_slot_序号 | 当前页面中的可选时装槽位。序号从 0 开始。 |
armourers_equip_类型 | 当前预设的穿戴槽位。 |
默认每页数量为 24 时,列表槽位为 armourers_slot_0 至 armourers_slot_23。
当前穿戴槽位如下:
| 类型 | 槽位 ID |
|---|---|
| 武器 | armourers_equip_sword |
| 弓箭 | armourers_equip_bow |
| 套装 | armourers_equip_outfit |
| 翅膀 | armourers_equip_wings |
| 帽子 | armourers_equip_head |
| 上衣 | armourers_equip_chest |
| 裤子 | armourers_equip_legs |
| 鞋子 | armourers_equip_feet |
file-armourers-amount 必须与自定义界面可容纳的 armourers_slot_序号 数量一致,否则服务端可能向界面不存在的槽位写入物品。
服务端调用的界面方法
服务端使用 DragonCore 的 方法.执行方法 动态创建或修改界面组件。自定义界面需要保留对应方法,或实现同名方法。
时装列表
每个列表项会按顺序调用以下方法:
| 方法 | 参数 |
|---|---|
添加组件_时装选择贴图 | 序号、时装ID、品质等级 |
添加组件_时装选择槽位 | 序号、时装ID、品质等级 |
添加组件_时装选择属性 | 序号、时装ID、品质等级 |
添加组件_时装选择显示 | 序号、时装ID、穿戴或试穿、品质等级 |
添加组件_时装品质文本 | 序号、品质与类型文本、品质等级 |
添加组件_时装名称文本 | 序号、时装显示名称、品质等级 |
刷新筛选结果或翻页前,服务端会调用:
text
清空组件_时装选择添加组件_时装选择显示 的第三个参数取决于玩家是否拥有该时装:
- 已拥有或正在试穿:
穿戴 - 未拥有:
试穿
类型筛选组件
| 方法 | 参数 |
|---|---|
添加按钮_选择时装类型 | 序号、类型、显示文本 |
组件修改_时装类型下拉框文本 | 显示文本 |
类型按钮序号固定为 0 至 8,依次对应 all、sword、bow、outfit、wings、head、chest、legs、feet。
拥有状态组件
| 方法 | 参数 |
|---|---|
添加按钮_选择是否拥有 | 序号、筛选值、显示文本 |
组件修改_是否拥有下拉框文本 | 显示文本 |
拥有状态按钮依次为:
| 序号 | 筛选值 |
|---|---|
0 | all |
1 | owned |
2 | not_owned |
品质筛选组件
| 方法 | 参数 |
|---|---|
添加按钮_选择时装品质 | 序号、品质等级、显示文本 |
组件修改_时装品质下拉框文本 | 显示文本 |
序号 0 固定表示全部品质,对应品质值 -1。其余按钮根据 config.yml 中已加载的品质生成。
当前穿戴组件
| 方法 | 参数 |
|---|---|
添加组件_当前时装槽位 | 序号、类型 |
添加组件_隐藏时装按钮 | 序号、类型、true/false |
组件修改_当前时装槽位隐藏 | 组件名 |
组件修改_当前时装槽位显示 | 组件名 |
当前穿戴组件序号固定为 0 至 7,依次对应 sword、bow、outfit、wings、head、chest、legs、feet。
预设组件
服务端使用以下方法生成预设按钮:
text
添加按钮_时装预设分页参数顺序为 预设序号、显示文本。当前预设的文本前会增加 §a[当前]。
其它固定组件
| 组件或方法 | 用途 |
|---|---|
搭配详情 | 服务端修改该组件的 tip,写入当前预设的穿戴详情。 |
| 发包传入的页码组件 | 翻页成功后,服务端修改该组件的 texts。 |
搭配详情包含品质、类型、时装名称和隐藏状态。隐藏的部位会在文本末尾显示 §7(隐藏)。
PlaceholderAPI 变量
变量功能需要服务器安装并启用 PlaceholderAPI。插件检测到 PlaceholderAPI 后会注册 law 变量扩展,不需要单独下载扩展文件。
支持的类型
以下变量中的 类型 可替换为:
| 类型 | 对应部位 |
|---|---|
sword | 武器 |
bow | 弓箭 |
outfit | 套装 |
wings | 翅膀 |
head | 帽子 |
chest | 上衣 |
legs | 裤子 |
feet | 鞋子 |
all 只适用于拥有数量和总数量变量,不应作为当前穿戴、名称或隐藏状态变量的部位参数。
拥有状态
| 变量 | 返回值 | 说明 |
|---|---|---|
%law_status_时装ID% | 已拥有、未拥有 或剩余秒数 | 查询玩家是否拥有指定时装。 |
返回规则:
| 状态 | 返回内容 |
|---|---|
| 永久拥有 | 已拥有 |
| 正在试穿 | 剩余秒数秒,例如 42秒 |
| 试穿时间刚结束但尚未完成清理 | 0秒 |
| 未拥有 | 未拥有 |
收集数量
| 变量 | 说明 |
|---|---|
%law_owned_类型% | 返回玩家永久拥有的指定类型时装数量。 |
%law_owned_all% | 返回玩家永久拥有的全部时装数量。 |
%law_total_类型% | 返回插件已注册的指定类型时装总数。 |
%law_total_all% | 返回插件已注册的全部时装总数。 |
owned 数量只统计永久时装,不统计正在试穿的限时时装。total 数量来自插件加载的 armourers 配置,不代表 DragonArmourers 中所有存在的皮肤数量。
无效类型的数量变量返回 0。
当前穿戴
| 变量 | 说明 | 无数据时返回 |
|---|---|---|
%law_id_类型% | 返回当前预设中指定类型的时装 ID。 | 空字符串 |
%law_name_类型% | 返回当前预设中指定类型的时装显示名称。 | 空字符串 |
%law_hide_类型% | 返回当前预设中指定类型是否隐藏。 | 无效类型返回空字符串 |
%law_hide_类型% 的正常返回值为:
| 返回值 | 说明 |
|---|---|
true | 当前预设隐藏该类型时装。 |
false | 当前预设显示该类型时装,或尚未记录隐藏状态。 |
当前穿戴变量读取的是玩家正在使用的预设。切换预设后,变量结果也会随之改变。
变量异常返回
| 情况 | 返回值 |
|---|---|
| 玩家对象为空 | 空字符串 |
| 玩家数据尚未载入 | 空字符串 |
| 当前部位没有穿戴时装 | 空字符串 |
| 当前时装 ID 未在插件中注册,查询名称 | 空字符串 |
| 变量前缀能够识别但变量名称不受支持 | §c错误 |
自定义界面注意事项
- 打开界面后先发送
初始化,再允许玩家执行其它操作。 - 发包参数必须保持顺序,服务端直接按参数下标读取数据。
- 按钮点击间隔不得小于
packet-interval,否则操作会被忽略。 - 翻页操作必须传入页码组件名;原页面中不带参数的翻页格式已不适用于当前实现。
- 类型、品质和拥有状态筛选不需要传入按钮组件名,服务端会统一重新生成对应按钮。
- 搜索和筛选会把服务端页码重置为
1,但不会主动修改自定义页码文本。 file-armourers-amount应与界面提供的armourers_slot_序号数量一致。- 预设序号只使用
0至4。 - 显示或隐藏操作中的组件名会原样拼入 DragonCore 方法调用,自定义组件 ID 应保持简单且固定。
- 页面中需要显示拥有状态、穿戴名称或隐藏状态时,可配合
%law_status_时装ID%、%law_name_类型%和%law_hide_类型%使用。