条件与槽位
condition 用于判断事件是否满足执行条件。事件中的所有条件都会依次检测,全部通过时执行 true-action,只要有一个条件失败就执行 false-action。
条件会在对应的左击、右击或破坏事件触发时检测。事件按配置文件中的顺序执行;使用 return 动作可以中断当前事件后的脚本检测。
条件格式
条件使用字符串列表配置:
yaml
condition:
- 'papi:{%player_level% * 1 >= 30}'
- 'permission:{vip.1}'
- 'roll:{0.25}'| 条件写法 | 说明 |
|---|---|
papi:{表达式} | 使用 PlaceholderAPI 解析变量,再计算数学或逻辑表达式。 |
permission:{权限} | 玩家必须拥有指定权限。 |
nopermission:{权限} | 玩家不能拥有指定权限。 |
roll:{概率} | 按概率判断,概率值使用 0 到 1 的小数。 |
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 的参数是概率值,范围为 0 到 1:
| 参数 | 含义 |
|---|---|
0 | 不会通过。 |
1 | 始终通过。 |
0.25 | 约四分之一概率通过。 |
条件占位符
条件检测前会替换以下方块信息占位符:
| 占位符 | 说明 |
|---|---|
{owner} | 方块放置者名称。没有有效放置者时替换为 SYSTEM。 |
{id} | 当前方块配置中的方块 ID。 |
示例:
yaml
condition:
- 'papi:{"{owner}" == "%player_name%"}'{owner} 和 {id} 也会在 true-action、false-action 以及放置指令中替换。
可用槽位
物品名称和 Lore 条件使用 来源#参数 指定物品来源。不同来源需要的参数数量不同。
| 槽位写法 | 说明 |
|---|---|
DragonCore#槽位名 | DragonCore 槽位。 |
GermPlugin#槽位名 | GermPlugin 槽位。 |
Minecraft#槽位ID | 原版玩家背包槽位,示例配置标注范围为 0-36。 |
APInventory#分页ID#槽位ID | APInventory 背包槽位,示例配置标注槽位范围为 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-action 与 false-action
条件通过时执行 true-action:
yaml
true-action:
- 'message:&a你满足了交互条件。'条件失败时执行 false-action:
yaml
false-action:
- 'message:&c你不满足交互条件。'不配置 false-action 时,条件失败不会执行动作,事件检测会继续按照方块配置中的后续事件进行。
条件与冷却的关系
事件会先检查方块冷却和事件冷却,再计算 condition。处于冷却状态时,不会进入 true-action 或 false-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 只会中断当前事件处理流程,不会撤销已经执行的动作。