Skip to content

配置说明

LyLookAt 的配置由主配置 config.ymlgui 目录中的界面配置组成。

  • 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 下的键是界面槽位编号。六行界面的有效槽位通常为 053,配置值必须落在实际界面范围内。

节点类型默认值说明
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 后,插件优先读取目标玩家对应槽位中的真实物品。出现以下情况时,会改为显示 itemnamelore 创建的默认物品:

  • plugin-item 为空。
  • 对应插件接口没有返回物品。
  • 目标槽位为空。
  • 读取结果是空气。

当成功读取到真实物品时,界面直接显示读取到的物品,不再应用当前槽位配置的 itemnamelore

物品来源

plugin-item 使用 # 分隔来源类型及其参数。第三方来源只有在服务器安装对应插件并且其接口可用时才能读取。

来源配置格式说明
DragonCoreDragonCore#槽位名读取目标玩家的龙核缓存槽位。
GermPluginGermPlugin#槽位名读取目标玩家的萌芽身份槽位。
APInventoryAPInventory#分页ID#槽位编号读取目标玩家指定分页中的物品,示例配置标注槽位编号为 053
LyInventoryLyInventory#背包ID#类型通过 LyInventory API 读取指定背包和类型的物品。
LyInventoryReloadLyInventoryReload#背包ID#类型LyInventory 使用相同的读取接口和参数格式。
YeeJewelryYeeJewelry#背包ID#槽位ID读取目标玩家的 YeeJewelry 饰品槽位。
PXRPGPXRPG#类型#背包ID#槽位读取 PXRPG 指定装备容器类型、容器 ID 和槽位。
MinecraftMinecraft#槽位编号读取目标玩家原版玩家背包中的指定槽位。默认配置说明可填写 035
OriginOrigin#MainHand读取目标玩家主手物品。
OriginOrigin#OffHand读取目标玩家副手物品。
OriginOrigin#Helmet读取目标玩家头盔。
OriginOrigin#ChestPlate读取目标玩家胸甲。
OriginOrigin#Legging读取目标玩家护腿。
OriginOrigin#Boots读取目标玩家靴子。
Origin2Origin2#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 支持以下写法:

写法示例说明
英文材质 IDBOOK使用当前服务端能够识别的 Bukkit 材质名。
英文材质 ID 与子 IDBOOK:0使用英文材质名和子 ID。
数字 ID267使用旧版数字物品 ID。
数字 ID 与子 ID160: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:你条件不足'

当前版本限制

项目代码中的界面加载逻辑会在错误的节点层级检查 conditiontrue-resultfalse-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.ymlgui 目录中的所有界面文件:

text
/lla reload

该指令仅 OP 可用。重载时插件还会尝试释放默认的 gui/装备.yml,但不会覆盖服务器上已经存在的同名文件。

界面文件载入失败时,控制台会显示对应文件名并输出异常。常见原因包括:

  • 缺少 slot 配置节。
  • 槽位键不是整数。
  • plugin-item 参数数量不正确。
  • 槽位编号超过当前界面的实际容量。
  • YAML 缩进或列表格式错误。
  • 配置了对应第三方来源,但服务器没有可用的插件接口。