Skip to content
iPlugin

菜单打开入口

配置命令、物品、聊天、潜行换手、实体和 NPC 入口,了解各自携带的变量。

bindings 写在菜单文件顶层,别名为 binding、activator、activators。下面的片段都合并到要打开的那个菜单中;保存后按文件更新规则重载。

入口字段

字段类型必填省略行为说明
bindings(binding、activator、activators)对象否不添加任何绑定入口菜单顶层;不影响管理命令或脚本直接打开
command(commands、cmd、cmds)命令名文字、命令对象或它们的列表否不注册绑定命令注册打开本菜单的玩家命令
item(读取别名 items)文字或文字列表否不启用物品入口任意一条物品表达式匹配即可;实际事件使用 item
chat(读取别名 chats)文字或文字列表否不启用聊天入口匹配完整聊天或命令文字,忽略大小写;实际事件使用 chat
shift_f整数,毫秒否不启用按键入口潜行状态切换后按换手键的时间窗口;填写小于 50 的值按 50 处理
entity文字或文字列表否不启用实体入口右键指定实体类型,忽略大小写
adyeshach(读取别名 ady)文字或文字列表否不启用 NPC 入口Adyeshach NPC ID,忽略大小写;实际事件使用 adyeshach

items、chats、ady 能被配置读取,但不会由对应物品、聊天和 NPC 事件触发;请使用 item、chat、adyeshach。命令的四种字段名都能注册命令;同一菜单中同时使用这些命令字段时,定义会合并检查,而不是后者覆盖前者。没有对应入口的字段会被忽略,不会自动成为一个新入口。

命令入口

已有菜单文件的顶层片段
bindings:
  command: hello-menu

保存并重载后,玩家执行 /hello-menu 打开这个菜单;绑定名称不含开头 /。这种打开不要求管理命令权限,也不受其他事件入口的一秒共享间隔限制。

多个命令可写成列表,共同打开当前菜单,但分别定义自己的参数和权限:

bindings:
  command:
    - name: guide
      aliases:
        - menu-guide
    - name: help-menu
      description: '打开同一个帮助菜单'

命令名称与别名会转成小写,别名会去重;命令名不能空白或含空格。同一菜单内任何命令名、别名都不能与另一条定义重名。其他菜单占用相同的 Invero 命令标签时会注册失败;其他插件占用普通标签时,可能只能使用 /invero:<命令名>,按后台冲突提示确定实际入口。

命令字段

命令对象写在 bindings.command 下;只有名称时直接写文字即可。

字段类型必填省略行为说明
name文字是无法注册命令名,不含 /
aliases文字列表否没有别名同一命令的其他名称;不能代替 name
description文字否使用命令名空文字也使用命令名
usage文字否根据名称与参数生成空文字也自动生成;可选参数用方括号,必填参数用尖括号
permission文字否自动使用 invero.command.<小写命令名>.use,首次注册默认所有玩家可用显式填写时,该权限首次注册默认授予 OP;已有权限的授权规则保留
permissionMessage文字否使用服务端命令框架的无权限提示空文字同省略;只影响无权限,不影响参数错误
arguments(argument、args)参数文字或参数对象的列表否不声明参数变量按列表顺序接收;每项文字相当于只填写 id

命令权限仅限制这一条绑定命令。 它不自动限制指南针、聊天、实体或管理命令直接打开同一菜单。需要所有入口共用的打开条件,写在菜单的 events.pre_open,见菜单事件。

命令参数

以下片段让 /profile 默认查看“自己”,也允许输入 /profile Steve,并要求绑定命令权限:

bindings:
  command:
    name: profile
    aliases:
      - my-profile
    description: '打开资料菜单'
    permission: 'invero.profile'
    permissionMessage: '你没有权限打开资料菜单。'
    arguments:
      - id: target
        type: ANY
        optional: true
        default: '自己'
        suggest:
          - 自己
          - Steve

此处 default: '自己' 是示例中显式填写的值,不是参数省略后的内置值。允许使用该命令的玩家输入 /profile Steve 时,{{&target}} 为 Steve;输入 /profile 时为 自己。

字段类型必填省略行为说明
id(key、name、label)文字是参数定义无效打开后使用的变量名;同一命令内非空且不能重复
type文字枚举否ANY使用下表的大写名称
suggest文字列表否没有额外候选ANY 的候选,或 PLAYER / WORLD 的追加候选;数字和布尔类型不使用它
restrict布尔值否false仅对 ANY 生效;为 true 时只能输入候选列表中完全相同的文字
optional布尔值否true为 false 时必须在命令里提供该位置的参数
default文字、数字或布尔值否可选参数未输入时,不提供该变量补入的值统一作为文字;不替代必填位置,也不重新按类型或候选校验
incorrectMessage文字否使用固定的参数错误提示能读取但不生效;填写也不能自定义错误提示
type实际接受的输入
ANY任意文字;只有 restrict: true 时检查 suggest,比较区分大小写;此时空候选会使任何输入都无法通过
DECIMAL能解析为小数的输入
INTEGER能解析为整数的输入
BOOLEAN严格的小写 true 或 false,不接受 1、0、TRUE
PLAYER当前在线玩家名及 suggest 追加文字;按候选精确匹配,不转换为玩家对象
WORLD当前世界名及 suggest 追加文字;按候选精确匹配,不转换为世界对象

输入和默认值进入菜单后都是文字,不会因为 INTEGER 或 BOOLEAN 自动变成对应变量类型。参数按位置填写,不能跳过中间某个参数;将必填参数放在可选参数前。最后一个参数会收下剩余的空格内容,因此不要把它当作禁止多余尾部文字的严格结构。

物品、聊天与按键

bindings:
  item: 'minecraft:compass'
  chat:
    - '打开菜单'
    - '/open-guide'
  shift_f: 800
入口上例的实际触发方式与限制
item用主手指南针进行交互,左右键不单独区分;副手被跳过,已有 Invero 菜单会话时不触发。匹配后取消原交互
chat发送完整的“打开菜单”,或输入完整的 /open-guide;不是包含匹配或正则。匹配后取消原聊天或命令,不再公开发送或继续执行;已被取消的事件不处理
shift_f切换潜行状态后少于 800 毫秒按换手键;进入或退出潜行都会记录时间,不是一直潜行时随时按 F。每次换手会消耗这次记录,匹配后取消换手

800 是上例选择的窗口,不是省略 shift_f 后自动启用的值。换手键使用玩家实际绑定的按键,不要求客户端一定使用字母 F。

物品匹配写法

item 列表中任意一条表达式匹配即可。内置材质匹配使用小写名称,可省略 minecraft:,也可用 material::

bindings:
  item:
    - 'minecraft:compass[name=菜单]'
    - 'material:clock'

第一条要求指南针名称包含“菜单”,第二条匹配时钟。材质条件支持 *(任意材质)、^前缀、后缀$、(包含文字);这些不是完整正则,多个材质标记也不是逐项“且”判断。%标签% 不提供物品标签匹配。

方括号内用逗号分隔条件,所有条件同时满足才算匹配。内置条件键如下:

字段类型必填省略行为说明
name文字条件否不检查名称物品名称包含指定文字,区分大小写;不论书写的运算符是什么,都按包含判断
lore文字条件否不检查 LoreLore 的文字表示包含指定文字,区分大小写;同样固定为包含判断
damage(durability)数值条件否不检查损伤值对比物品损伤值
model(custom-model-data)数值条件否不检查 CustomModelData对比 CustomModelData;物品未设置时按 0
ench(enchant、enchants、enchantment)名称条件否不检查附魔对比某项附魔的名称,不是等级
potion(potions)名称条件否不检查药水对比基础药水或自定义效果的类型名
nbt.<路径>(tag.<路径>)数据条件否不检查该路径对比对应深层 NBT 数据;路径不存在则不匹配
ench.<附魔名>(enchant.<附魔名>、enchantment.<附魔名>)等级条件,目前不可可靠使用否不检查该附魔等级能识别这些键,但当前不按数值等级正确比较,不能用来可靠限制等级

除名称与 Lore 固定包含判断外,可写 =、!=、>、>=、<、<=,以及 键(值一|值二)。数值大小比较的方向是配置值与物品值比较:例如 damage>10 实际检查 10 > 物品损伤值,不是“损伤值大于 10”。未支持的条件键不匹配。

显示图标使用的外部物品 source 不等于这里的匹配命名空间;内置匹配不提供各物品插件 ID 的自动识别。不要把 itemsadder:某ID 等显示来源写法直接当作已经支持的入口条件。

实体入口

bindings:
  entity:
    - VILLAGER
    - WANDERING_TRADER

右键这两种实体时打开当前菜单,填写实体类型而不是显示名;单个类型可直接写 entity: VILLAGER。副手触发与已取消的事件会被跳过,匹配本身不取消原实体交互。

Adyeshach NPC 入口

安装并启用 Adyeshach 后,按 NPC ID 配置:

bindings:
  adyeshach:
    - menu_guide
    - help_guide

主手交互任意一个 ID 即可打开,不填写 NPC 显示名。该入口不取消原 NPC 交互;只写别名 ady 不会由事件触发。

入口变量

这些变量在对应入口打开菜单时传入,可在文字中用 {{&变量名}} 读取。物品和实体本身是对象,不等同于其名称或 ID。

打开方式变量内容
绑定命令arguments 定义的各个 id实际输入或显式默认值;没有额外的命令名变量
聊天或命令文字匹配activator_message玩家实际提交的完整文字,保留原大小写与 /
物品交互activator_item此次交互的物品对象
实体交互activator_entity被交互的实体对象
实体交互activator_entity_is_npc布尔值;仅识别“玩家类型但不在在线玩家列表”的实体,不是通用 NPC 插件检测
实体交互activator_entity_uuid实体 UUID
实体交互activator_entity_type实体类型名
实体交互activator_entity_location_x、activator_entity_location_y、activator_entity_location_z两位小数的坐标文字
实体交互activator_entity_name自定义名;没有时使用实体名称
Adyeshach 交互activator_ady交互的 NPC ID
潜行换手无额外变量不提供时间差或按键变量

其他入口不会自动获得上述变量。管理打开可用分号格式显式传值,见命令;通用玩家信息见占位符。

其他打开方式与变量保留

打开方式变量行为
/invero menu open / /menu open只传显式 arguments,不会补绑定命令默认值
动作 menu open <ID>不保留原菜单临时变量;可用 with '键=值;键=值' 传入
动作 menu switch <ID>(menu open_ctx)保留当前会话变量,再用 with 中的同名值覆盖
输入成功后的 reopen重开原菜单并携带输入流程保留的变量;取消不会自动走成功重开
已加载菜单重载后重开携带旧会话变量,但会重新建立窗口和面板状态
其他插件通过菜单接口打开变量由调用方传入,不自动套用绑定命令参数

脚本打开还可用 for <准确在线玩家名> 指定目标,省略时使用当前玩家;显式目标不存在时会回退到当前脚本玩家。脚本菜单 ID 区分大小写。菜单跳转见导航示例,输入流程见输入收集。

多入口同时存在

物品、聊天、潜行换手、实体、Adyeshach 事件共用每名玩家约一秒的触发间隔;没有匹配到菜单的尝试也可能占用这个间隔。同一事件匹配多个菜单时只尝试其中一个,不提供固定优先顺序。pre_open 拒绝打开也不会继续尝试下一个匹配菜单,已被取消的聊天、物品或换手行为不会因此恢复。

所有打开方式仍经过菜单打开条件;已有菜单会话创建不足约 200 毫秒时,紧接着再次打开也会被忽略。这与事件入口共享的一秒间隔不是同一个限制。

Last updated on