Skip to content

条件与槽位

condition 用于判断事件是否满足执行条件。事件中的所有条件都会依次检测,全部通过时执行 true-action,只要有一个条件失败就执行 false-action

条件会在对应的左击、右击或破坏事件触发时检测。事件按配置文件中的顺序执行;使用 return 动作可以中断当前事件后的脚本检测。

条件格式

条件使用字符串列表配置:

yaml
condition:
  - 'papi:{%player_level% * 1 >= 30}'
  - 'permission:{vip.1}'
  - 'roll:{0.25}'
条件写法说明
papi:{表达式}使用 PlaceholderAPI 解析变量,再计算数学或逻辑表达式。
permission:{权限}玩家必须拥有指定权限。
nopermission:{权限}玩家不能拥有指定权限。
roll:{概率}按概率判断,概率值使用 01 的小数。
check_equals_name:{槽位#名称}检查指定槽位的物品名称是否完整匹配。
check_contain_name:{槽位#文本}检查指定槽位的物品名称是否包含文本。
check_equals_lore:{槽位#文本}检查指定槽位是否存在一行完全匹配的 Lore。
check_contain_lore:{槽位#文本}配置文件示例中提供了该写法,但当前实现存在识别问题,不能按预期完成包含判断。

条件逻辑

多个条件

多个条件使用列表配置,插件会按顺序检测。所有条件都通过后,才会选择 true-action

yaml
condition:
  - 'permission:{vip.1}'
  - 'papi:{%player_level% >= 30}'
  - 'roll:{0.25}'
true-action:
  - 'message:&a条件全部满足。'
false-action:
  - 'message:&c条件不满足。'

papi 表达式

papi:{...} 条件会先使用 PlaceholderAPI 解析表达式中的变量,再进行判断。

支持的比较运算符包括:

运算符说明
>大于
<小于
>=大于或等于
<=小于或等于
==等于
!=不等于

支持的逻辑运算符包括:

运算符说明
&&所有连接的表达式都必须为真。
`

数学表达式支持数字、括号以及以下运算符:

  • + 加法
  • - 减法
  • * 乘法
  • / 除法

示例:

yaml
condition:
  - 'papi:{%player_level% * 1 >= 30 && %player_health% > 10}'

表达式中的空格会在计算前移除,字符串字面量可以使用单引号或双引号:

yaml
condition:
  - 'papi:{"%player_name%" == "Steve"}'

使用 papi:{...} 需要服务器安装并启用 PlaceholderAPI。插件配置中的 PlaceholderAPI 为软依赖。

权限条件

yaml
condition:
  - 'permission:{vip.1}'

只有拥有 vip.1 权限的玩家才能通过该条件。

检查玩家没有权限时使用:

yaml
condition:
  - 'nopermission:{vip.1}'

概率条件

yaml
condition:
  - 'roll:{0.25}'

roll 的参数是概率值,范围为 01

参数含义
0不会通过。
1始终通过。
0.25约四分之一概率通过。

条件占位符

条件检测前会替换以下方块信息占位符:

占位符说明
{owner}方块放置者名称。没有有效放置者时替换为 SYSTEM
{id}当前方块配置中的方块 ID。

示例:

yaml
condition:
  - 'papi:{"{owner}" == "%player_name%"}'

{owner}{id} 也会在 true-actionfalse-action 以及放置指令中替换。

可用槽位

物品名称和 Lore 条件使用 来源#参数 指定物品来源。不同来源需要的参数数量不同。

槽位写法说明
DragonCore#槽位名DragonCore 槽位。
GermPlugin#槽位名GermPlugin 槽位。
Minecraft#槽位ID原版玩家背包槽位,示例配置标注范围为 0-36
APInventory#分页ID#槽位IDAPInventory 背包槽位,示例配置标注槽位范围为 0-53
LyInventory#背包ID#类型LyInventory 旧版背包槽位。
LyInventoryReload#背包ID#类型LyInventory 重置版背包槽位。
Origin#MainHand玩家主手。
Origin#OffHand玩家副手。
Origin#Helmet玩家头盔栏。
Origin#ChestPlate玩家胸甲栏。
Origin#Legging玩家护腿栏。
Origin#Boots玩家鞋子栏。

示例:

yaml
condition:
  - 'check_equals_name:{DragonCore#装备槽}'
  - 'check_equals_name:{GermPlugin#饰品槽}'
  - 'check_equals_name:{Minecraft#0}'
  - 'check_equals_name:{APInventory#饰品#3}'
  - 'check_equals_name:{LyInventory#饰品#项链}'
  - 'check_equals_name:{LyInventoryReload#饰品#项链}'
  - 'check_equals_name:{Origin#MainHand#钥匙}'

原版背包槽位

Minecraft 使用原版背包槽位 ID:

yaml
condition:
  - 'check_equals_name:{Minecraft#0#&a钥匙}'

外部背包槽位

APInventory 使用分页 ID 和槽位 ID:

yaml
condition:
  - 'check_equals_name:{APInventory#饰品#3#&b戒指}'

LyInventory 和 LyInventoryReload 使用背包 ID 与类型:

yaml
condition:
  - 'check_equals_name:{LyInventory#饰品#项链#&6项链}'
  - 'check_equals_name:{LyInventoryReload#饰品#项链#&6项链}'

装备栏槽位

Origin 不需要额外的背包参数:

yaml
condition:
  - 'check_equals_name:{Origin#MainHand#&a钥匙}'
  - 'check_equals_name:{Origin#OffHand#&a钥匙}'
  - 'check_equals_name:{Origin#Helmet#&b头盔}'
  - 'check_equals_name:{Origin#ChestPlate#&b胸甲}'
  - 'check_equals_name:{Origin#Legging#&b护腿}'
  - 'check_equals_name:{Origin#Boots#&b鞋子}'

物品名称判断

完整匹配

check_equals_name 要求物品显示名称与指定文本完全一致:

yaml
condition:
  - 'check_equals_name:{Origin#MainHand#&a钥匙}'

如果玩家主手没有物品、物品没有显示名称,或者显示名称不完全一致,条件都会失败。

颜色符号 & 会转换为 Minecraft 颜色代码。例如,&a钥匙 会按绿色的“钥匙”进行匹配。

包含匹配

check_contain_name 只要求物品显示名称包含指定文本:

yaml
condition:
  - 'check_contain_name:{Origin#MainHand#钥匙}'

以下情况会导致条件失败:

  • 槽位没有物品。
  • 物品没有显示名称。
  • 显示名称不包含指定文本。

Lore 判断

完整匹配一行 Lore

check_equals_lore 会检查物品 Lore 列表中是否存在一行与指定文本完全相同的内容:

yaml
condition:
  - 'check_equals_lore:{Origin#MainHand#&7古代遗物}'

该判断不是要求整个 Lore 列表完全一致,而是要求其中至少有一行完全匹配。

如果物品没有 Lore,或者 Lore 中没有完全相同的一行,条件失败。

包含文本的 Lore

配置文件示例提供了以下写法:

yaml
condition:
  - 'check_contain_lore:{Origin#MainHand#古代}'

但当前代码中的判断分支使用了错误的条件前缀:代码重复判断了 check_equals_lore,没有正确识别 check_contain_lore。因此该写法当前不会按“Lore 某一行包含文本”的预期执行,使用前需要先修复插件实现。

true-actionfalse-action

条件通过时执行 true-action

yaml
true-action:
  - 'message:&a你满足了交互条件。'

条件失败时执行 false-action

yaml
false-action:
  - 'message:&c你不满足交互条件。'

不配置 false-action 时,条件失败不会执行动作,事件检测会继续按照方块配置中的后续事件进行。

条件与冷却的关系

事件会先检查方块冷却和事件冷却,再计算 condition。处于冷却状态时,不会进入 true-actionfalse-action,而是显示冷却提示或直接结束本次触发。

事件配置中的 cd-group 默认值为 default。冷却提示通过 cd-message 配置,消息中的 {time} 会替换为剩余秒数。

yaml
events:
  点击方块:
    type: 'right'
    cd-group: 'group'
    cd-message: '&7还需要等待 {time} 秒。'
    condition:
      - 'permission:{vip.1}'
    true-action:
      - 'message:&a交互成功。'

条件失败后的动作

可以在 false-action 中发送提示、执行命令,或使用 return 中断后续事件脚本:

yaml
false-action:
  - 'message:&c你需要手持钥匙才能打开。'
  - 'return'

return 只会中断当前事件处理流程,不会撤销已经执行的动作。