Skip to content

条件规则

LyInventory 的条件配置用于控制背包打开、物品放入或替换、槽位解锁、属性加载和物品取出。条件通常配置在背包文件的 condition 或槽位文件的对应节点中。

同一个条件列表中的多条条件需要全部满足。任意一条条件不满足,当前操作就会失败。

条件格式

条件通常使用以下格式:

yaml
条件类型:{条件参数}

例如:

yaml
replace-condition:
  - 'permission:{equipment.vip}'
  - 'lore:{类型:头盔}'

颜色代码使用 &,插件读取后会转换为游戏颜色代码。条件参数中的 PlaceholderAPI 变量会在检测时解析。

条件组合

单条配置可以使用 &&|| 组合多个条件:

运算符含义
&&并且,左右两侧条件都必须满足
`
<->分隔条件和失败提示消息

示例:

yaml
replace-condition:
  - 'lore:{类型:头盔}||lore:{类型:帽子}<->&7该槽位只可放入&6头盔&7或&6帽子'
  - 'lore:{品质:优秀}&&permission:{equipment.vip}<->&c需要优秀品质并拥有会员权限'

<-> 前面是实际检测条件,后面是条件不满足时发送给玩家的提示文本。提示文本支持 PlaceholderAPI 变量。

背包打开条件

背包文件中的 condition 用于判断玩家是否可以打开指定背包。该条件配置在背包文件顶层:

yaml
condition:
  - 'papi:{%player_level% > 3}'
  - 'permission:{inventory.open}'

支持的条件类型如下:

条件格式说明
PlaceholderAPI 条件papi:{表达式}解析 PlaceholderAPI 变量,并按表达式判断结果
权限条件permission:{权限节点}玩家拥有指定权限时满足
无权限条件nopermission:{权限节点}玩家没有指定权限时满足

背包的 permission 配置用于判断打开权限,属于背包权限配置,不是 condition 列表中的条件类型。有关背包权限的配置请参考背包配置页面。

放入与替换条件

槽位中的 replace-condition 用于判断玩家手中的物品能否放入或替换该槽位:

yaml
slot-set:
  头盔:
    replace-condition:
      - 'lore:{类型:头盔}<->&c该槽位只允许放入头盔'

基础条件

条件格式说明
PlaceholderAPI 条件papi:{表达式}按玩家变量或其他 PlaceholderAPI 返回值判断
权限条件permission:{权限节点}玩家拥有指定权限时满足
无权限条件nopermission:{权限节点}玩家没有指定权限时满足
名称匹配name:{名称}检测待放入物品的显示名称是否包含指定内容
Lore 匹配lore:{文本}检测待放入物品的 Lore 是否包含指定整行文本
Lore 不匹配nolore:{文本}检测待放入物品的 Lore 中不存在指定整行文本

名称和 Lore 条件使用关键词匹配,不要求完整匹配整段内容。配置颜色代码时需要保留 & 颜色符号。

数量限制条件

数量限制条件用于限制名称或 Lore 相同的物品数量。数量必须写在参数末尾,并使用 # 分隔:

条件格式说明
全部背包名称数量限制all-only-name:{名称#数量}检查玩家全部背包中的指定名称物品数量
全部背包 Lore 数量限制all-only-lore:{Lore#数量}检查玩家全部背包中的指定 Lore 物品数量
指定背包名称数量限制only-name:{背包ID#名称#数量}检查指定 LyInventory 背包中的指定名称物品数量
指定背包 Lore 数量限制only-lore:{背包ID#Lore#数量}检查指定 LyInventory 背包中的指定 Lore 物品数量

示例:

yaml
replace-condition:
  - 'all-only-name:{&6唯一头盔#1}'
  - 'all-only-lore:{&6唯一装备#1}'
  - 'only-name:{test#&6唯一头盔#1}'
  - 'only-lore:{test#&6唯一装备#1}'

only-name 支持使用 <item> 代表当前待放入物品的名称,可用于限制同名物品在指定背包中只能装备指定数量:

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

<item> 不是 PlaceholderAPI 变量,也不需要替换为其他文本。它只能按原样写在 only-name 系列条件中。

DragonArmourers 类型条件

安装并启用 DragonArmourers 后,可以使用 sz-type 检测待放入物品对应的时装类型:

yaml
replace-condition:
  - 'sz-type:{head}'

支持的类型如下:

类型说明
outfit套装
head头部或帽子
chest胸部或衣服
legs腿部或裤子
feet脚部或鞋子
wings翅膀
sword武器或副手
bow

此条件只用于 DragonArmourers 时装物品类型判断。未安装对应前置时不要配置该条件。

LyCore NBT 条件

安装并启用 LyCore 后,可以检测待放入物品的 NBT。NBT 多层节点使用 . 分隔:

yaml
replace-condition:
  - 'hasNbt:{display.owner}'
  - 'nbtCheck:&#123;&#123;display.level} > 3}'
条件格式说明
NBT 节点存在hasNbt:{节点路径}判断物品是否存在指定 NBT 节点
NBT 表达式判断nbtCheck:&#123;&#123;节点路径} 表达式}读取指定 NBT 节点,并按表达式判断数值或内容

nbtCheck 中的 NBT 节点需要使用一对 {} 包裹,节点路径中的多层结构使用 . 分隔。

全局装备检测

配置文件中的 check-put-on-condition 用于增加全局装备检测规则。该规则会在物品放入或替换槽位时执行,适用于按物品 Lore 中的数值统一判断装备等级、需求属性等场景。

yaml
check-put-on-condition:
  等级检测:
    contain-lore: '&f装备等级: '
    condition:
      - 'papi:{%player_level% >= <value>}<->&7该装备需要<value>级才可装备'
配置键说明
check-put-on-condition全局装备检测规则列表
规则名称自定义规则名称,不能重复
contain-lore用于定位装备数值的 Lore 关键词
condition读取数值后执行的条件列表
<value>运行时替换为从匹配 Lore 中读取到的数值

当物品 Lore 中包含 contain-lore 且成功读取到数值时,插件会把该数值替换到条件中的 <value> 后进行检测。条件不满足时,物品不能放入或替换槽位。

condition 支持 papipermissionnopermission 条件,也支持使用 <-> 追加失败提示。

原版背包属性检测

配置文件中的 load-attribute-form-origin-inventory-condition 用于限制原版玩家背包物品是否可以作为属性来源。它只对应 load-attribute-form-origin-inventory 中配置的原版槽位,并且当前实现限制原版槽位编号为 035

yaml
load-attribute-form-origin-inventory:
  - 10

load-attribute-form-origin-inventory-condition:
  10:
    - 'lore:{类型:头盔}'
配置键说明
load-attribute-form-origin-inventory指定需要读取属性的原版背包槽位编号
load-attribute-form-origin-inventory-condition.<槽位编号>指定该原版槽位的装备检测条件

该条件使用与 replace-condition 相同的物品条件检测规则,包括物品名称、Lore、权限、PlaceholderAPI 和全局装备检测规则。条件不满足时,该原版槽位物品不会加载为属性来源。

槽位解锁条件

槽位中的 unlock-condition 用于判断玩家是否可以解锁槽位:

yaml
slot-set:
  头盔:
    unlock-condition:
      - 'permission:{unlock.头盔}'
      - 'papi:{%player_level% >= 10}'
      - 'item:{头盔碎片#1}'
      - 'eco:{100}'
      - 'point:{100}'

支持的条件类型如下:

条件格式说明
PlaceholderAPI 条件papi:{表达式}按玩家变量或其他 PlaceholderAPI 返回值判断
权限条件permission:{权限节点}玩家拥有指定权限时满足
无权限条件nopermission:{权限节点}玩家没有指定权限时满足
物品条件item:{物品名称#数量}检查玩家原版背包中是否拥有指定名称和数量的物品
金币条件eco:{数量}检查玩家 Vault 经济余额是否达到指定数量
点券条件point:{数量}检查玩家 PlayerPoints 点券余额是否达到指定数量

解锁条件的消耗规则

  • papipermissionnopermission 只进行检测,不消耗资源。
  • item 条件在所有解锁条件都通过后扣除指定物品。
  • eco 条件在所有解锁条件都通过后扣除指定金币。
  • point 条件在所有解锁条件都通过后扣除指定点券。
  • 解锁成功后执行槽位的 unlock-command
  • 未配置 unlock-condition,或配置为空列表时,槽位不需要解锁。
  • 配置 unlock-empty-condition-slot: true 时,没有解锁条件的槽位会在打开背包时自动标记为已解锁,且不会执行 unlock-command

eco 需要可用的 Vault 经济服务,point 需要安装并启用 PlayerPoints。缺少对应服务时,不要配置相应条件。

属性条件

槽位中的 attribute-condition 用于判断该槽位装备的属性是否加载到已配置的属性插件:

yaml
attribute-condition:
  - 'permission:{attribute.set}'
  - 'papi:{%player_level% >= 10}'
  - 'hasName:{test#头盔#套装头盔}'
  - 'hasLore:{test#胸甲#套装部件}'

支持的条件类型如下:

条件格式说明
PlaceholderAPI 条件papi:{表达式}按玩家变量或其他 PlaceholderAPI 返回值判断
权限条件permission:{权限节点}玩家拥有指定权限时满足
无权限条件nopermission:{权限节点}玩家没有指定权限时满足
名称联动条件hasName:{背包ID#槽位ID#名称关键字}检查指定背包指定槽位中的装备名称是否包含关键字
Lore 联动条件hasLore:{背包ID#槽位ID#Lore关键字}检查指定背包指定槽位装备的任意 Lore 行是否包含关键字

hasNamehasLore 用于跨背包、跨槽位联动。例如,当前槽位的属性可以要求另一个背包的指定槽位已经装备指定名称或 Lore 的物品。

指定的背包缓存不存在、槽位没有装备物品、物品没有对应名称或 Lore 时,条件不满足。

属性条件只影响属性加载,不影响物品是否可以放入槽位,也不影响物品是否可以取出槽位。

取出条件

槽位中的 take-out-condition 用于判断玩家能否取出已装备物品:

yaml
take-out-condition:
  - 'permission:{equipment.takeout}'
  - 'papi:{%player_level% >= 10}'

支持的条件类型如下:

条件格式说明
PlaceholderAPI 条件papi:{表达式}按玩家变量或其他 PlaceholderAPI 返回值判断
权限条件permission:{权限节点}玩家拥有指定权限时满足
无权限条件nopermission:{权限节点}玩家没有指定权限时满足

取出条件会在以下操作中检查:

  • 从普通 Bukkit 背包界面取出槽位物品。
  • 使用 Shift 点击从槽位取出物品。
  • 使用鼠标物品替换槽位中的已有物品。
  • 通过 DragonCore 映射槽位取出或替换物品。

条件不满足时,插件会阻止取出操作,并发送 message.not-take-out 配置的提示消息。

放入时的额外限制

除槽位条件和全局装备检测外,配置文件还可以设置统一的放入限制:

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

anti-equip-item-lore 中的 Lore 使用整行匹配。待放入物品包含其中任意一行 Lore 时,物品不能装备,并发送 message.anti-equip-item-lore 配置的提示消息。

插件还会禁止一次装备数量大于 1 的堆叽物品。该限制适用于普通背包界面、Shift 点击自动匹配槽位以及映射槽位操作,提示消息使用 message.equip-item-amount-too-large

打开背包时重新检测

配置文件中的 check-replace-condition-on-open 用于决定打开背包时是否重新检查已经装备的物品:

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

启用后,插件会在打开背包前重新检查已装备物品的 replace-condition、全局装备检测和禁止装备 Lore。已不满足条件的物品会尝试退回玩家原版背包,并从对应槽位移除。

如果玩家原版背包没有空位,插件不会移除该物品。

条件相关前置

功能前置或服务
papi 条件和变量解析PlaceholderAPI
eco 金币条件Vault 以及可用的经济服务
point 点券条件PlayerPoints
sz-type 时装类型条件DragonArmourers
NBT 条件LyCore
属性条件生效配置的属性插件,例如 AttributePlus、SX-Attribute2、SX-Attribute3、AttributeSystem 或 ItemLoreOrigin

如果使用 MySQL 存储玩家背包数据,必须安装 LyMySQLCore,并且数据库连接成功后,MySQL 存储及相关玩家数据功能才会生效。数据库连接失败时,插件不会使用 MySQL 连接保存或读取玩家数据。