跳到主要内容

条件判断

面板、组件、按钮和其他面板元素都可以使用条件判断控制是否显示或可被访问。条件判断使用的是自定义语法构建的逻辑语句,用于检查玩家名称、权限、值等内容。

通过这些逻辑表达式,你可以根据服务器的状态或玩家数据来动态控制面板的行为。条件判断支持PlaceholderAPI占位符,以此从其他插件获取所需数据。


条件的原理

在任何使用conditions的地方(如面板或组件上),你都可以定义一个逻辑表达式,用于决定这个对象是否可用。

若条件判断结果为true,这个对象将显示或可交互;若结果为false,则会被隐藏或跳过。

条件按从左到右的顺序解析,并且支持:

  • 逻辑运算符:$AND$OR$NOT
  • 比较运算符:$EQUALS$ATLEAST$HASPERM
  • 括号分组(仅支持单层嵌套)

格式和空格的使用是严格受限的。条件必须严格遵循下方的简单示例所示的格式。

注意

比较条件中不支持空格。如果占位符返回的内容包含空格,这些空格都会被转换为下划线。


简单示例

检查玩家名称是否是“Halogly”并且他是否拥有gamemode.creative权限:

conditions: "%player_name% $EQUALS Halogly $AND %player_name% $HASPERM gamemode.creative"

与上述相同,但他现在需要不具有这个权限才能通过:

conditions: "%player_name% $EQUALS Halogly $AND $NOT %player_name% $HASPERM gamemode.creative"

使用括号分组检查:玩家名称不能为“Halogly”并且不具有指定权限:

conditions: "$NOT (%player_name% $EQUALS Halogly $AND %player_name% $HASPERM gamemode.creative)"

使用多个表达式的复杂条件判断:

conditions: "$NOT (%player_name% $EQUALS Halogly $AND 400 $ATLEAST 500) $AND ($NOT %player_name% $EQUALS Steve $OR %player_name% $HASPERM gamemode.creative)"

实际使用示例

下面的示例展示了如何利用条件判断为面板中的物品添加条件逻辑。在此示例中,我们设置了一个物品,它可以让玩家通过支付一定的费用从等级二升级到等级三。系统会根据玩家是否拥有等级三、是否已具备等级二前置条件、以及金额是否充足,来动态显示这四个物品。

layout:
'4':
- already_rank_three # 已达到等级三
- no_rank_before_three # 未达到等级二
- buy_rank_three # 购买等级三
- not_enough_rank_three # 升级条件不足

items:
already_rank_three:
material: 'LIGHT_BLUE_WOOL'
name: '<aqua><bold>lv3'
conditions: '%player_name% $HASPERM rank.level.3'
lore:
- '<dark_aqua>[!] 你已经位于此等级了。'
no_rank_before_three:
material: 'RED_WOOL'
conditions: '$NOT %player_name% $HASPERM rank.level.2'
name: '<red><bold>lv3'
lore:
- "<dark_red>[!] 你需要先位于前一等级。"
buy_rank_three:
material: 'LIME_WOOL'
name: '<green><bold>lv3'
lore:
- '<dark_green>[!] 支付5000元'
conditions: '%vault_eco_balance% $ATLEAST 5000'
actions:
requirements:
- '[vault] 5000'
commands:
- '[sound] ENTITY.PLAYER.LEVELUP'
- '[msg] <reset>'
- '[msg] <reset> <gold><bold>恭喜你,<white>%player_name%<gold>'
- '[msg] <white> 你已成功升级到<aqua>lv3'
- '[msg] <reset>'
- '[console] lp user %player_name% permission set rank.level.3 true'
- '[refresh] 3'
not_enough_rank_three:
material: 'RED_WOOL'
name: '<red><bold>lv3'
lore:
- "<dark_red>[!] 你至少需要5000元才能升级。"

运算符

用法:$NOT

对后面的条件进行取反。也可用括号包裹一组条件进行整体取反。

用法:$AND

要求左右两侧条件必须同时成立

用法:$OR

要求左右两侧条件至少有一个成立


比较符

等于

用法:$EQUALS

比较两个值是否相等,不区分字母大小写。

conditions: '%player_name% $EQUALS Halogly'

大于等于

用法:$ATLEAST

比较两个数值。当第一个数值大于等于第二个数值时成立。

conditions: '%player_health% $ATLEAST 10'

权限判断

用法:$HASPERM

检查指定玩家是否具有指定权限。

conditions: '%player_name% $HASPERM commandpanels.open'

注意
  • 条件表达式仅支持单层括号,嵌套括号将无法正常解析。
  • 存在语法错误或无效条件时,会在控制台输出错误信息,或在使用时始终判定条件不成立。

条件的使用场景

条件判断可在面板的多个场景中使用,包括:

  • 面板层面:控制面板的访问权限。
  • 组件层面:控制单个按钮或组件的显示与隐藏。
  • 对话框元素:根据条件显示输入框或文本块。
  • 基岩面板或物品按钮:根据用户状态动态显示内容。