Skip to content

配置说明

LyInventory 的配置分为主配置与背包配置:

文件用途
plugins/LyInventory/config.yml控制属性插件、数据保存、槽位映射、全局装备检测、操作冷却和提示文本
plugins/LyInventory/inventory/*.yml定义背包界面、预设物品、装备槽位、解锁条件和槽位指令

示例背包

inventory/示例背包.yml 每次重载都会被插件覆盖,并且不会作为正式背包载入。请复制并重命名后再修改。

主配置 config.yml

属性插件

yaml
attribute-plugin: 'AttributePlus'
说明
AttributePlus将背包装备 lore 载入 AttributePlus
SX-Attribute2使用 SX-Attribute 2.x 接口
SX-Attribute3使用 SX-Attribute 3.x 接口
AttributeSystem将背包装备 lore 载入 AttributeSystem
ItemLoreOrigin将背包装备 lore 交给 ItemLoreOrigin 处理

修改该配置后需要重启服务器。属性会在玩家数据载入、关闭插件背包、放入装备、替换装备或取出装备后刷新,也可以通过 /li refreshattr [玩家] 手动刷新在线玩家的背包属性。

原版背包属性读取

yaml
load-attribute-form-origin-inventory:
  - 0
  - 1

load-attribute-form-origin-inventory-condition:
  0:
    - 'lore:{类型:头盔}'
  1:
    - 'permission:{example.attribute}'

load-attribute-form-origin-inventory 指定玩家原版背包中参与属性读取的槽位,槽位范围为 0-35。该功能仅在 attribute-plugin 设置为 AttributePlus 时生效。

load-attribute-form-origin-inventory-condition 按原版槽位编号配置物品检测条件。对应槽位未配置条件时,只要槽位中存在带 lore 的物品,就会载入该物品的属性。

条件格式说明
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限
name:{文本}物品名称需要包含指定文本
lore:{文本}物品 lore 需要包含指定整行
nolore:{文本}物品 lore 不能包含指定整行

全局 check-put-on-condition 同样会参与原版背包槽位的属性读取检测。

装备时 Lore 替换

yaml
lore-replace:
  '&c装备后绑定': '&6已绑定: &a%player_name%'

lore-replace 使用“原 lore 行到新 lore 行”的映射格式。玩家通过插件背包装备物品时,如果物品中存在与配置键完全相同的 lore 行,插件会替换该行。

  • 配置键和值均支持 & 颜色符。
  • 替换后的文本支持 PlaceholderAPI 变量。
  • 只替换完整匹配的单行 lore,不会替换一行中的部分文本。
  • 插件会克隆事件中的物品后进行替换,不直接修改原物品引用。

DragonCore 槽位映射

yaml
dragoncore-slot-mapping-enable: false

启用后,DragonCore 界面中使用以下标识的槽位会映射到对应插件背包槽位:

text
lyinv_背包ID_槽位ID

DragonCore 槽位配置中的标识格式为:

yaml
identifier: 'lyinv_test_头盔'

其中 test 对应背包配置的 id头盔 对应 slot-set 下的槽位 ID。插件会同步玩家载入时已有的装备,并接管映射槽位的解锁、放入、交换、取出、冷却和属性刷新逻辑。

该监听器在插件启动时注册,修改 dragoncore-slot-mapping-enable 后需要重启服务器。

属性倍率

yaml
attribute-rate-enable: false

attribute-rate-key:
  - '物理伤害'
  - '生命上限'

启用后,插件会读取每个装备槽位的 attribute-rate,对命中 attribute-rate-key 的属性 lore 进行倍率计算。

yaml
slot-set:
  头盔:
    attribute-rate: 1.5
配置说明
attribute-rate-enable是否启用属性倍率处理
attribute-rate-key需要进行倍率计算的属性关键词列表
slot-set.<槽位ID>.attribute-rate当前槽位的属性倍率,默认值为 1.0

计算规则:

  • 1.0 表示保留原属性。
  • 2.0 表示属性数值乘以两倍。
  • 0.5 表示属性数值减半。
  • 只有同时包含指定关键词与数字的 lore 行才会参与计算。
  • 命中行中的数值会按倍率计算,并格式化为两位小数。
  • &§ 后的颜色代码数字不会作为属性数值计算。
  • 彩色属性关键词可以直接使用 § 颜色符配置。

槽位的 attribute-condition 未通过时,该槽位不会载入属性,也不会参与倍率处理。

ItemLoreOrigin 刷新间隔

yaml
ilo-update-task: 20

attribute-plugin 设置为 ItemLoreOrigin 且 ItemLoreOrigin 已加载时,插件会建立异步刷新任务,将背包装备的属性 lore 提交给 ItemLoreOrigin。

ilo-update-task 的单位为 tick,未配置时默认使用 20 tick。

符文属性兼容

yaml
Rune-plugin-enable: false

启用后,插件会读取背包装备中已镶嵌符文提供的属性,并与装备 lore 属性一起提交给当前属性插件。服务器必须同时具备代码所需的符文 API,否则不要启用。

自动保存

yaml
auto-save-interval: 3

auto-save-interval 是自动保存检查间隔,单位为秒。玩家装备、取出物品、解锁槽位或切换龙之时装展示背包后,数据会被标记为待保存,并在自动保存任务中写入存储。

插件还会在玩家退出、被踢、关闭插件背包和插件关闭时保存相关数据。

不建议将间隔设置为 0 或负数,也不建议设置得过长。

禁止穿戴的 Lore

yaml
anti-equip-item-lore:
  - '未绑定'

物品 lore 中存在与列表内容完全相同的单行文本时,插件会拒绝装备该物品。检测忽略英文大小写,并支持将配置中的 & 转换为游戏颜色符。

该配置不是关键词包含检测。例如配置 未绑定 时,lore 行 状态: 未绑定 不属于完全相同的文本。

拒绝装备时使用 message.anti-equip-item-lore 发送提示。

全局装备条件

yaml
check-put-on-condition:
  等级检测:
    contain-lore: '&f装备等级: '
    condition:
      - 'papi:{%player_level% >= <value>} <-> &7该装备需要<value>级才可装备, 你当前%player_level%级了!'

check-put-on-condition 用于根据装备 lore 中的数值执行全局检测。每个检测节点名称只需保持不重复。

配置说明
contain-lore用于定位数值的 lore 前缀,支持 & 颜色符
condition找到非零数值后需要执行的条件列表
<value>从对应 lore 中读取到的数值
<->条件与失败提示的分隔符

可在 condition 中使用:

条件格式说明
papi:{表达式}使用 PlaceholderAPI 变量进行表达式检测
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限

条件失败提示支持 PlaceholderAPI 变量和 <value>。该检测会用于插件背包装备条件,也会参与配置过的原版背包属性读取检测。

空配置节点

插件会直接读取 check-put-on-condition 配置段。请保留该节点;没有全局检测时可以配置为空节点。

yaml
check-put-on-condition: {}

MySQL 存储

MySQL 前置要求

启用 MySQL 存储时必须安装 LyMySQLCore,并确认 LyMySQLCore 已成功连接数据库。该模式依赖 LyMySQLCore 提供的安全加载与保存事件;前置未加载或数据库连接失败时,MySQL 数据读取、保存、同步和相关记录不会正常生效。

yaml
mysql:
  enable: false
  databasename: mc2
  username: mc2
  password: mc1234
  port: 3306
  ip: 127.0.0.1
  custom-property:
    cachePrepStmts: 'true'
配置说明
mysql.enable是否启用 MySQL 存储
mysql.databasename数据库名称
mysql.username数据库用户名
mysql.password数据库密码
mysql.portMySQL 端口,默认 3306
mysql.ipMySQL 地址
mysql.custom-property追加到数据源的自定义连接参数

插件使用连接池管理数据库连接,并固定设置以下连接参数:

参数
useSSLfalse
serverTimezoneUTC
characterEncodingUTF-8
connectTimeout5000 毫秒
socketTimeout30000 毫秒
cachePrepStmtstrue

玩家数据存放在 LyInventory_data 表中,以玩家名称作为主键,装备、槽位解锁状态和龙之时装展示背包会序列化到 data 字段。

如果新版数据表不存在,插件会尝试读取旧版 LyInventory 表,将其中的 namedata 数据迁移到临时表,完成后再改名为 LyInventory_data。多台服务器同时连接同一数据库时,迁移过程会使用 MySQL 命名锁避免重复迁移。

关闭 MySQL 时,玩家数据保存在:

text
plugins/LyInventory/data/玩家UUID.yml

切换 mysql.enable 后需要重启服务器,避免数据监听器与实际存储模式不一致。切换存储方式前应自行备份已有数据。

点击冷却

yaml
click-cooldown: 300
click-cooldown-message: '&7对不起, 操作过快, 请稍后尝试.'
配置说明
click-cooldown背包点击、装备、取出、界面刷新和映射槽位操作的冷却时间,单位为毫秒
click-cooldown-message玩家在冷却期间重复操作时发送的提示

1000 毫秒等于 1 秒。冷却同样用于 Shift 左键自动装备、Shift 左键取回和 DragonCore 映射槽位。

无条件槽位自动解锁

yaml
unlock-empty-condition-slot: true

启用后,玩家打开背包时,未配置 unlock-condition 或条件列表为空的槽位会自动记录为已解锁。

该自动解锁不会执行槽位的 unlock-command,也不会发送解锁成功提示。

打开背包时重新检测装备

yaml
check-replace-condition-on-open: false

启用后,玩家打开背包时,插件会重新检查已装备物品是否仍符合:

  • 槽位的 replace-condition
  • 主配置的 check-put-on-condition
  • 主配置的 anti-equip-item-lore

不再符合条件的装备会尝试退回背包所有者的原版背包,并恢复槽位默认物品。如果玩家原版背包没有空位,该物品会暂时保留在插件背包中。

提示文本

yaml
message:
  inventory-full: '&c背包已满!'
  unlock-fail: '&c解锁失败, 条件不足.'
  unlock-success: '&a解锁成功!'
  not-unlocked-yet: '&c该槽位还没有解锁.'
  anti-equip-item-lore: '&c存在禁止穿戴的lore'
  equip-item-amount-too-large: '&c装备禁止堆叠'
  switch-dragon-armourers-show: '&a切换时装成功.'
  disable-dragon-armourers-show: '&a时装显示关闭.'
  not-take-out: '&c条件不足, 无法取出.'
配置触发场景
message.inventory-full取出装备时玩家原版背包已满
message.unlock-fail槽位解锁条件未全部满足
message.unlock-success槽位成功解锁
message.not-unlocked-yet尝试向未解锁槽位放入装备
message.anti-equip-item-lore物品存在禁止穿戴的 lore 行
message.equip-item-amount-too-large尝试装备数量大于 1 的堆叠物品
message.switch-dragon-armourers-show成功切换龙之时装展示背包
message.disable-dragon-armourers-show关闭龙之时装展示
message.not-take-out装备未满足 take-out-condition

提示文本支持 & 颜色符。

背包配置 inventory/*.yml

基础配置

yaml
id: 'test'
title: '&6示例背包'
size: 6
permission: ''
condition: []
配置说明
id背包唯一 ID,用于指令、变量、API 和槽位映射
title背包标题,支持 & 颜色符
size背包行数,最小 1,最大 6
permission玩家打开自己背包时需要的权限;删除或留空表示不限制
condition打开背包前需要满足的条件列表;删除或留空表示不检测

背包 id 应保持唯一。如果不同文件使用相同 ID,后载入的配置会覆盖已读取的数据。

condition 支持:

条件格式说明
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限

预设物品 default-set

default-set 用于设置边框、按钮、玩家信息等不可存放装备的界面物品。

yaml
default-set:
  边框:
    id: '160:0'
    name: ' '
    lore:
      - ' &7边界 '
    command:
      - 'tell %player_name% 你点击了一下边框'
    slot: '0-8,9,17,18,26,27,35,36,44,45-53'
配置说明
id显示物品 ID,可使用配置文件现有的 物品ID:子ID 格式
name物品名称,支持 & 颜色符
lore物品 lore,支持颜色符和 PlaceholderAPI 变量
command点击后由控制台执行的指令列表,支持 PlaceholderAPI 变量
slot显示位置,多个位置使用逗号分隔,连续位置使用 起始-结束

预设物品只能执行点击指令和触发界面内容刷新,不能作为装备槽位保存物品。

装备槽位 slot-set

yaml
slot-set:
  头盔:
    slot: 22
    id: '160:9'
    name: ' '
    lore:
      - ' &7头盔槽位 '
      - ' &7解锁状态: {unlock}'
    replace-condition:
      - 'lore:{类型:头盔}<->&7该槽位只可放&6头盔&7部位的装备!'
    click-command: []
    replace-command: []
    take-out-command: []
    unlock-condition: []
    unlock-command: []
    attribute-condition: []
    take-out-condition: []
    attribute-rate: 1.0
    mapping-slot: ''

slot-set 下的节点名称就是槽位 ID。槽位 ID 必须在所有背包中保持全局唯一,避免映射和数据操作定位到错误槽位。

配置说明
slot槽位在箱子界面中的数字位置,只能填写一个位置
id未装备物品时显示的默认物品 ID
name未装备物品时显示的名称
lore未装备物品时显示的 lore
{unlock}在默认 lore 中显示 已解锁未解锁
replace-condition允许放入或替换装备的条件
click-command点击槽位时执行的指令
replace-command成功放入或替换装备后执行的指令
take-out-command成功取出装备后执行的指令
unlock-condition解锁槽位需要满足和消耗的条件
unlock-command成功解锁槽位后执行的指令
attribute-condition当前装备参与属性读取需要满足的条件
take-out-condition允许取出或替换当前装备的条件
attribute-rate当前槽位的属性倍率,默认 1.0
mapping-slotGermPlugin 槽位标识,留空表示不映射

放入与替换条件

replace-condition 中的每一项都需要通过。条件后可以使用 <-> 添加失败提示。

yaml
replace-condition:
  - 'lore:{类型:头盔}<->&7该槽位只可放头盔!'
  - 'permission:{equip.helmet}<->&c你没有装备权限!'
条件格式说明
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限
name:{文本}物品名称需要包含指定文本
lore:{文本}物品 lore 需要包含指定整行
nolore:{文本}物品 lore 不能包含指定整行
all-only-name:{名称#数量}所有插件背包中,名称匹配物品必须少于指定数量
all-only-lore:{Lore#数量}所有插件背包中,lore 匹配物品必须少于指定数量
only-name:{背包ID#名称#数量}指定背包中,名称匹配物品必须少于指定数量
only-lore:{背包ID#Lore#数量}指定背包中,lore 匹配物品必须少于指定数量
sz-type:{类型}检测 DragonArmourers 时装类型
hasNbt:{节点}检测物品是否存在指定 NBT 节点,需要 LyCore
nbtCheck:&#123;&#123;节点} 表达式}读取 NBT 节点数值并执行表达式检测,需要 LyCore

sz-type 支持示例配置中确认的类型:

类型时装部位
outfit套装
head帽子
chest衣服
legs裤子
feet鞋子
wings翅膀
sword武器或副手
bow

同一行可以组合多个物品条件:

yaml
replace-condition:
  - 'lore:{类型:头盔}||lore:{类型:帽子}<->&7该槽位只可放头盔或帽子!'
  - 'lore:{类型:头盔}&&lore:{品质:优秀}<->&7该槽位只可放优秀品质头盔!'
连接符说明
&&两侧条件必须同时满足
`

only-name 系列条件中,可以使用固定文本 <item> 表示当前待装备物品的名称:

yaml
replace-condition:
  - 'only-name:{test#<item>#1}'

尖括号内容必须保持原样,不能替换为其他变量格式。

槽位指令

yaml
click-command:
  - 'tell %player_name% 你点击了头盔槽位'
replace-command:
  - 'tell %player_name% 你放入了头盔'
take-out-command:
  - 'tell %player_name% 你取出了头盔'
unlock-command:
  - 'tell %player_name% 你解锁了头盔槽位'
配置执行时机
click-command玩家点击槽位时执行
replace-command装备成功放入或替换后执行
take-out-command装备成功取出后执行
unlock-command槽位成功解锁后执行

这些指令支持 PlaceholderAPI 变量,并由控制台身份执行。配置中不要添加 / 前缀。

解锁条件

yaml
unlock-condition:
  - 'permission:{unlock.头盔}'
  - 'papi:{%player_level% >= 10}'
  - 'item:{解锁石#1}'
  - 'eco:{100}'
  - 'point:{100}'

所有解锁条件通过后,插件才会记录槽位已解锁。物品、金币和点券条件会先完成余额检查,再执行扣除。

条件格式说明是否消耗
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限
item:{物品名称#数量}按名称查找玩家背包中的物品
eco:{数量}通过 Vault 经济服务扣除金币
point:{数量}通过 PlayerPoints 扣除点券

使用 eco 条件时需要 Vault 与可用的经济插件。使用 point 条件时需要 PlayerPoints。

删除 unlock-condition 或配置为空列表表示槽位不需要付费或条件解锁。是否自动记录为空条件的槽位,由主配置 unlock-empty-condition-slot 控制。

属性加载条件

yaml
attribute-condition:
  - 'permission:{attribute.helmet}'
  - 'papi:{%player_level% >= 10}'
  - 'hasName:{test#武器#传说之剑}'
  - 'hasLore:{test#护符#套装: 烈焰}'

只有全部条件通过时,当前槽位装备的 lore 才会提交给属性插件。

条件格式说明
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限
hasName:{背包ID#槽位ID#关键词}指定槽位必须存在装备,且装备名称包含关键词
hasLore:{背包ID#槽位ID#关键词}指定槽位必须存在装备,且至少一行 lore 包含关键词

hasNamehasLore 的关键词支持 PlaceholderAPI 变量与 & 颜色符。目标背包或槽位数据不存在时,条件会判定失败。

取出条件

yaml
take-out-condition:
  - 'permission:{takeout.头盔}'
  - 'papi:{%player_level% >= 10}'
条件格式说明
papi:{表达式}检测 PlaceholderAPI 表达式
permission:{权限}玩家必须拥有指定权限
nopermission:{权限}玩家必须没有指定权限

取出、Shift 左键取回以及使用鼠标物品替换已有装备时,都需要先通过 take-out-condition。条件失败时使用 message.not-take-out 提示。

GermPlugin 槽位映射

yaml
slot-set:
  头盔:
    mapping-slot: '界面槽位标识'

服务器加载 GermPlugin 时,插件会注册 GermPlugin 槽位监听器。mapping-slot 与 GermPlugin GUI 槽位标识相同时,该槽位会使用对应 LyInventory 槽位的解锁、放入检测和槽位指令。

mapping-slot 默认留空。不同装备槽位不要配置相同的映射标识。

背包操作规则

  • 装备物品数量必须为 1,不能直接装备整组堆叠物品。
  • 在玩家原版背包中 Shift 左键物品时,插件会按界面槽位顺序寻找第一个已解锁、为空且满足条件的装备槽位。
  • 在插件背包中 Shift 左键已装备物品时,插件会将物品放回玩家原版背包。
  • 玩家原版背包已满时,Shift 左键取回会被拒绝。
  • 非背包所有者只能查看背包;不是管理员时不能操作他人的插件背包。
  • 拖拽物品进入插件背包会被阻止。
  • 放入、替换和取出装备后会重新计算玩家的背包属性。
  • 关闭插件背包时会保存玩家数据,并在 DragonArmourers 可用时刷新玩家时装外观。