配置说明
LyLookAt 的配置由主配置 config.yml 和 gui 目录中的界面配置组成。
config.yml:设置潜行右键玩家时自动打开的界面。gui/*.yml:定义界面标题、行数、展示槽位、物品来源和点击动作。/lla reload:重新读取主配置与全部界面配置,仅 OP 可执行。
界面配置会递归读取 plugins/LyLookAt/gui 目录下的所有 .yml 文件。界面标题、默认物品名称、Lore、条件和动作中的变量由 PlaceholderAPI 解析,因此应安装并正常启用 PlaceholderAPI。
主配置
主配置文件路径为 plugins/LyLookAt/config.yml。
| 节点 | 默认值 | 说明 |
|---|---|---|
shift-right-open-gui | 装备 | 玩家潜行并右键另一名玩家时打开的界面 ID。填写的值需要对应某个界面文件中的 id。填写空字符串可关闭该交互入口。 |
yaml
# 玩家潜行并右键其他玩家时打开的界面 ID
shift-right-open-gui: '装备'修改后执行 /lla reload 使配置生效。
界面文件
默认界面文件为 plugins/LyLookAt/gui/装备.yml。可以在 gui 目录及其子目录中添加多个 .yml 文件,每个文件定义一个独立界面。
基础节点
| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
id | 字符串 | 无 | 界面 ID,用于 shift-right-open-gui 和 /lla look [玩家] [界面ID]。不同界面应使用不同 ID。 |
title | 字符串 | 当前界面的 id | 箱子界面标题,支持颜色代码和 PlaceholderAPI 变量。变量以上述命令或交互选中的目标玩家为解析对象。 |
size | 整数 | 6 | 界面行数。插件会按 size × 9 创建箱子界面。 |
slot | 配置节 | 无 | 界面槽位列表。键名为箱子界面的槽位编号。 |
yaml
id: '装备'
title: '&0查看装备: &n&l%player_name%'
size: 6
slot:
0:
plugin-item: 'Origin#MainHand'
item: '267:0'
name: '&f主手物品'界面打开时,标题和各槽位内容使用目标玩家的变量进行解析。查看者关闭界面后,本次查看目标记录会被清除。
槽位配置
slot 下的键是界面槽位编号。六行界面的有效槽位通常为 0 至 53,配置值必须落在实际界面范围内。
| 节点 | 类型 | 默认值 | 说明 |
|---|---|---|---|
plugin-item | 字符串 | 空字符串 | 从目标玩家的原版背包、装备栏或受支持插件槽位读取物品。留空、读取失败或目标槽位为空气时使用默认物品。 |
item | 字符串 | 160:0 | 默认物品材质,支持英文材质 ID、旧版数字 ID,以及带子 ID 的 材质:子ID 写法。 |
name | 字符串 | 空字符串 | 默认物品名称,支持 & 颜色代码和 PlaceholderAPI 变量。 |
lore | 字符串列表 | 空列表 | 默认物品 Lore,支持 & 颜色代码和 PlaceholderAPI 变量。 |
action | 配置节 | 无 | 按点击类型配置要执行的动作。 |
yaml
slot:
8:
item: 'BOOK:0'
name: '&f玩家信息'
lore:
- '&7名称: &b%player_name%'
- '&7等级: &b%player_level%'
- ''
- '&a[左键刷新]'
action:
LEFT:
- 'update'默认物品回退
配置 plugin-item 后,插件优先读取目标玩家对应槽位中的真实物品。出现以下情况时,会改为显示 item、name 和 lore 创建的默认物品:
plugin-item为空。- 对应插件接口没有返回物品。
- 目标槽位为空。
- 读取结果是空气。
当成功读取到真实物品时,界面直接显示读取到的物品,不再应用当前槽位配置的 item、name 和 lore。
物品来源
plugin-item 使用 # 分隔来源类型及其参数。第三方来源只有在服务器安装对应插件并且其接口可用时才能读取。
| 来源 | 配置格式 | 说明 |
|---|---|---|
| DragonCore | DragonCore#槽位名 | 读取目标玩家的龙核缓存槽位。 |
| GermPlugin | GermPlugin#槽位名 | 读取目标玩家的萌芽身份槽位。 |
| APInventory | APInventory#分页ID#槽位编号 | 读取目标玩家指定分页中的物品,示例配置标注槽位编号为 0 至 53。 |
| LyInventory | LyInventory#背包ID#类型 | 通过 LyInventory API 读取指定背包和类型的物品。 |
| LyInventoryReload | LyInventoryReload#背包ID#类型 | 与 LyInventory 使用相同的读取接口和参数格式。 |
| YeeJewelry | YeeJewelry#背包ID#槽位ID | 读取目标玩家的 YeeJewelry 饰品槽位。 |
| PXRPG | PXRPG#类型#背包ID#槽位 | 读取 PXRPG 指定装备容器类型、容器 ID 和槽位。 |
| Minecraft | Minecraft#槽位编号 | 读取目标玩家原版玩家背包中的指定槽位。默认配置说明可填写 0 至 35。 |
| Origin | Origin#MainHand | 读取目标玩家主手物品。 |
| Origin | Origin#OffHand | 读取目标玩家副手物品。 |
| Origin | Origin#Helmet | 读取目标玩家头盔。 |
| Origin | Origin#ChestPlate | 读取目标玩家胸甲。 |
| Origin | Origin#Legging | 读取目标玩家护腿。 |
| Origin | Origin#Boots | 读取目标玩家靴子。 |
| Origin2 | Origin2#MainHand | 使用旧版 Bukkit 接口读取目标玩家当前手持物品。 |
示例:
yaml
slot:
0:
plugin-item: 'Origin#MainHand'
item: 'IRON_SWORD:0'
name: '&f主手物品'
1:
plugin-item: 'Minecraft#0'
item: 'STONE:0'
name: '&f背包第 0 槽物品'
2:
plugin-item: 'APInventory#饰品#3'
item: 'BARRIER:0'
name: '&c该槽位为空'
3:
plugin-item: 'PXRPG#装备类型#背包ID#槽位ID'
item: 'BARRIER:0'
name: '&c未读取到物品'plugin-item 的参数数量必须符合对应来源格式。缺少 # 分隔参数或填写无法解析的槽位编号可能导致界面加载或打开时报错。
默认物品格式
item 支持以下写法:
| 写法 | 示例 | 说明 |
|---|---|---|
| 英文材质 ID | BOOK | 使用当前服务端能够识别的 Bukkit 材质名。 |
| 英文材质 ID 与子 ID | BOOK:0 | 使用英文材质名和子 ID。 |
| 数字 ID | 267 | 使用旧版数字物品 ID。 |
| 数字 ID 与子 ID | 160:15 | 使用旧版数字 ID 和子 ID。 |
yaml
slot:
6:
item: '160:15'
name: '&f填充'插件包含旧版数字 ID 与新旧英文材质名的兼容转换。无法识别材质时,物品构建逻辑会保留默认石头材质,因此应优先使用当前服务端可识别的材质名称。
点击类型
action 下的键名必须与 Bukkit 点击类型名称一致。项目默认配置列出了以下类型:
| 点击类型 | 说明 |
|---|---|
LEFT | 左键点击。 |
SHIFT_LEFT | 按住 Shift 左键点击。 |
RIGHT | 右键点击。 |
SHIFT_RIGHT | 按住 Shift 右键点击。 |
MIDDLE | 鼠标中键点击。 |
NUMBER_KEY | 使用数字键点击。 |
DOUBLE_CLICK | 双击。 |
DROP | 丢弃键点击。 |
CONTROL_DROP | 按住 Ctrl 使用丢弃键。 |
CREATIVE | 创造模式相关点击。 |
插件会取消查看界面中的物品移动操作。只有配置在当前槽位中的点击类型才会执行动作。
yaml
slot:
7:
item: '397:3'
name: '&f打招呼'
lore:
- '&a[点击]'
action:
LEFT:
- 'tell:target:你好, 我是%player_name%'
MIDDLE:
- 'tell:me:我点了中键'
RIGHT:
- 'tell:me:你点击了右键'动作配置
一个点击类型可以按列表顺序配置多个动作。
| 动作 | 说明 |
|---|---|
update | 重新读取目标玩家的物品并刷新当前界面槽位。 |
close | 关闭查看者当前打开的界面,并停止执行当前动作列表中的后续动作。 |
tell:target:内容 | 向被查看的目标玩家发送消息。消息变量使用查看者作为 PlaceholderAPI 解析对象。 |
tell:me:内容 | 向打开界面的查看者发送消息。消息变量使用查看者作为 PlaceholderAPI 解析对象。 |
command_console:target:指令 | 由控制台执行指令,指令变量使用目标玩家解析。 |
command_console:me:指令 | 由控制台执行指令,指令变量使用查看者解析。 |
command_op:target:指令 | 由查看者临时以 OP 身份执行指令,指令变量使用目标玩家解析。执行后恢复查看者原来的 OP 状态。 |
command_op:me:指令 | 由查看者临时以 OP 身份执行指令,指令变量使用查看者解析。执行后恢复查看者原来的 OP 状态。 |
command:target:指令 | 由查看者以普通玩家身份执行指令,指令变量使用目标玩家解析。 |
command:me:指令 | 由查看者以普通玩家身份执行指令,指令变量使用查看者解析。 |
clone | 将当前槽位构建出的物品复制到查看者背包,仅查看者为 OP 时生效。 |
yaml
slot:
7:
item: 'PLAYER_HEAD:0'
name: '&f操作'
action:
LEFT:
- 'tell:target:&a你好,我是 %player_name%'
- 'tell:me:&a消息已发送'
RIGHT:
- 'command_console:target:say %player_name%'
SHIFT_RIGHT:
- 'close'动作目标
tell 和三种指令动作的第二段参数只处理以下两个值:
| 目标 | 说明 |
|---|---|
target | 当前正在被查看的玩家。 |
me | 打开界面的查看者。 |
动作使用冒号分隔参数。当前实现只读取分割后的目标和第一段内容,因此消息或指令正文不应再包含额外的半角冒号 :。
指令填写规则
指令动作中直接填写指令正文,不要添加 /:
yaml
slot:
10:
item: 'PAPER:0'
name: '&f执行指令'
action:
LEFT:
- 'command_console:target:say %player_name%'
RIGHT:
- 'command:me:spawn'command_op 会暂时修改查看者的 OP 状态。该动作具有较高权限,应只配置在可信界面中,并通过服务器权限和界面开放方式限制使用范围。
条件动作
项目中的条件判断器支持以下条件格式:
| 条件 | 说明 |
|---|---|
papi:{表达式} | 先解析 PlaceholderAPI 变量,再判断表达式结果。 |
permission:{权限节点} | 查看者必须拥有指定权限。 |
nopermission:{权限节点} | 查看者必须没有指定权限。 |
多个条件按“全部满足”处理,只要任意条件不满足,就应进入 false-result。
项目提供的配置格式如下:
yaml
slot:
8:
item: 'BOOK:0'
name: '&f玩家信息'
action:
RIGHT:
condition:
- 'papi:{%player_level% > 0}'
- 'permission:{vip.1}'
true-result:
- 'update'
false-result:
- 'tell:me:你条件不足'当前版本限制
项目代码中的界面加载逻辑会在错误的节点层级检查 condition、true-result 和 false-result,与默认配置展示的嵌套格式不一致。因此,在当前证据对应的 1.0.1 实现中,上述条件动作可能被读取为空动作列表,无法按预期执行。普通动作列表不受此问题影响。
PAPI 表达式
条件判断器支持以下运算:
| 类型 | 运算符 | 说明 |
|---|---|---|
| 数值比较 | >、<、>=、<= | 比较数字或数学表达式。 |
| 相等比较 | ==、!= | 可比较数字,也可比较使用单引号或双引号包裹的字符串。 |
| 逻辑与 | && | 两侧条件都成立时通过。 |
| 逻辑或 | || | 任意一侧条件成立时通过。 |
| 数学运算 | +、-、*、/、() | 用于数值比较两侧的算术表达式。 |
| 布尔值 | true | 没有比较运算符时,仅 true 会被判断为成立。 |
yaml
condition:
- 'papi:{%player_level% >= 10}'
- 'papi:{%player_level% > 10 && %player_level% < 50}'
- 'papi:{"%player_name%" == "Steve"}'papi 条件会以打开界面的查看者作为变量解析对象。需要读取当前目标玩家变量时,可以使用 LyLookAt 注册的 %lla_lookat_name% 或 %lla_lookat_变量%,相关格式见变量页面。
完整界面示例
yaml
id: '装备'
title: '&0查看装备: &n&l%player_name%'
size: 6
slot:
0:
plugin-item: 'Origin#MainHand'
item: '267:0'
name: '&f主手物品'
1:
plugin-item: 'Origin#OffHand'
item: '272:0'
name: '&f副手物品'
2:
plugin-item: 'Origin#Helmet'
item: '298:0'
name: '&f头盔'
3:
plugin-item: 'Origin#ChestPlate'
item: '299:0'
name: '&f胸甲'
4:
plugin-item: 'Origin#Legging'
item: '300:0'
name: '&f护腿'
5:
plugin-item: 'Origin#Boots'
item: '301:0'
name: '&f靴子'
6:
item: '160:15'
name: '&f填充'
7:
item: '397:3'
name: '&f打招呼'
lore:
- '&a[左键发送消息]'
- '&c[右键关闭界面]'
action:
LEFT:
- 'tell:target:你好, 我是%player_name%'
- 'tell:me:消息已发送'
RIGHT:
- 'close'
8:
item: 'BOOK:0'
name: '&f玩家信息'
lore:
- '&7名称: &b%player_name%'
- '&7等级: &b%player_level%'
- ''
- '&a[点击刷新]'
action:
LEFT:
- 'update'重载说明
执行以下指令可以重新读取 config.yml 和 gui 目录中的所有界面文件:
text
/lla reload该指令仅 OP 可用。重载时插件还会尝试释放默认的 gui/装备.yml,但不会覆盖服务器上已经存在的同名文件。
界面文件载入失败时,控制台会显示对应文件名并输出异常。常见原因包括:
- 缺少
slot配置节。 - 槽位键不是整数。
plugin-item参数数量不正确。- 槽位编号超过当前界面的实际容量。
- YAML 缩进或列表格式错误。
- 配置了对应第三方来源,但服务器没有可用的插件接口。