Skip to content

菜单

修改和自定义个性化菜单的教程。

在本插件中,菜单是向玩家在游戏内显示技能信息的界面。该界面还包括了属性菜单和技能内容、技能升级进度、能力描述。一些菜单可直接使用诸如 /skills/stats 的命令开启,而有些菜单只能通过点击这些菜单中的按钮来打开。

因为菜单更新显著地改变了本插件的配置格式并添加了新的内容,该章节面向使用 Beta 1.3.0 或更高版本的用户。若你还在使用低版本并已熟悉了旧版本的菜单配置格式,那么你需要参阅本维基的下一章节。

文件结构

负责配置菜单的文件位于插件的 AureliumSkills/menus 文件夹下。每个菜单都有其对应的文件,用以控制菜单的显示内容。

变量

本插件的许多文档都使用到了变量,通常以 {变量} 的形式表示。当菜单被开启时,这些变量就会被消息文本中的对应信息所替换。变量对应的文本路径通常在语言文本的 menus.commonmenus.[menu_name],具体名称大致与变量名相似。

但是,部分变量由于其更强的泛用性,而不会出现在消息文本或菜单配置区域。例如,变量 {skill} 就会被技能的名称所替代。

我们非常建议对消息文件里的变量所对应的文本进行改动,这样对保持多语言支持有益。对内建变量本身的修改会使其无效化。

菜单键名

下列键名是菜单配置文件中处于最左侧(没有缩进)的键名(此处称菜单部分)。

  • title - 打开菜单时显示的标题。
  • size - 菜单行数。只能使用 1-6 之间的数字,例如 1 代表一行九格。
  • fill - 填充菜单空白区域的物品名称,具体内容请见菜单格式改动[注1]。
  • items - 用于单个按钮的配置部分。
  • templates - 自定义物品内容及多个示例的部分。
  • options - 部分菜单文件中存在的,用以控制其他自定义设置的部分。

填充物品

填充(fill)区域是决定填充其他物品不使用位置内容的设置。该项通常有两个键名:

  • enabled - 是否启用该功能
  • material - 填充物的材质

填充物品的展示名称会被自动替换为空格,所以物品名称是不可见的。与其他物品相同格式的额外键名可以添加至此,以用来自定义其他的物品数据(见此[注1])。

物品设置区域

物品(item)是用来配置菜单中单个物品的区域。每个子区域都包含物品的唯一ID,即它们的独特名称。在默认菜单中存在的物品名称是保留词,意味着这些名称被插件所使用,用以替换变量名称或拥有其他的功能。自定义物品可以以非保留词的 ID 命名添加,格式与其他的物品相同。见添加自定义物品章节来获取更多信息。

模板设置区域

模板区域用来设置包含多个相同内容的物品,例如技能菜单中显示的物品。模板物品通常有相同的描述和名称,通过其中插入的变量在不同菜单中被区分。模板中的每个内容都包含不同之处,例如技能的种类,以使每个单独的内容显示都不尽相同。下列示例配置显示了一个模板的基本结构。

templates: # 模板设置区域 skill: # 技能菜单模板 farming: # 对于农耕技能菜单,该物品的变化 pos: ... # 该部分仅修改农耕技能的相关物品 material: ... foraging: # 该部分仅修改锻造技能的相关物品 pos: ... material: ... # 不会添加至所有内容的物品任意键名 display_name: ... # 对所有内容生效 lore: ... # 对所有内容生效

鉴于模板仅对已经有定义的物品生效,自定义模板是无效的。

物品

物品同时指物品(items)和模板(templates)区域中的物品,大多数的键对这两者均生效。这里有两个对大多数物品和模板而言必需的键:

  • material - 物品材料名称,例如 dirtdiamond,更多细节见下。
  • pos - 物品所处的菜单位置,可以为以逗号分隔的 行,列 值,或是单个的格子位置数字(处于 1-53 间),更多细节见下。

材料名

材料名称是大多数菜单物品和大部分模板所要求的输入的物品种类定义。在 1.13+ 的 Minecraft,物品的 ID 可通过在游戏内按下 F3+H 并查看对应物品的悬浮框得到,即下方以暗灰色 minecraft: 字样后方的内容。以大写字母开头的小写字母名称同样可被接受。

在 1.12 的 Minecraft 中,部分物品有着附加值(数字),用以定义不同颜色的染色羊毛、玻璃或是不同种类的原木,该数据值以 材料:数据值 的格式加在材料名称末尾。数据值也可在游戏内使用高级工具栏查看,具体是数字 ID 后以 # 开头的一串数字。附加值为 0 的物品无需在配置文本中再次添加。

在模板中,材料既可以在内容分支下定义,也可以在主物品栏目下定义。所决定材料的内容只会在游戏中对应的菜单生效,若定义在主物品栏目下,未指定内容的材料名会以此为准。

物品位置

位置(pos)是决定物品在菜单所处位置的值。该内容下有两种格式的参数可选:

行列格式 该格式的写法通常为 行,列,例如参数 2,3 代表菜单里的第 1 行第 2 列。第一行/列从 0 开始计数。
行范围是 0-5,而列范围则是 0-8。第 0 行是 GUI 界面中最顶端的一行,第 0 列则是 GUI 界面中最左侧的一列。

序号格式 该格式是为 0-53 范围的整数,代表 GUI 中格子的序号。第 0 格在菜单的左上角,从左至右序号递增,从上至下也递增。

显示名称与自定义描述

display_name 参数后的内容决定了物品的显示名称,支持嵌入彩色代码和变量。
lore 参数后的内容决定了物品的描述文本,同样支持嵌入彩色代码和变量。
显示名称与描述键也包含以 {变量} 的形式表示的内建变量。这些变量被预先嵌入文本,以配合插件展示完整功能。消息文本通常也对应消息配置文件中键名相似的内容。

16进制色码 显示名称与描述中也支持使用类似 &#000000MiniMessage 彩色字格式。

物品元数据值

这里有很多种键来定义不同种类的物品元数据。这些键位于物品设置内容,不在 material,而是与该键同级。

附魔
附魔(enchantments)是按照格式排列,存有附魔顺序的一个列表,例如:

enchantments:

  • sharpness 5
  • unbreaking 3

其中使用的名称即为原版游戏使用的附魔名称。

药水数据值
药水数据值(potion_data)部分包含几个子键,用以决定药水的数据。如下列内容所示:

  • type - 药水种类名称,例如 speednight_vision。种类名称需为有效的 Bukkit 药水种类名称(PotionType)(在此处列出)
  • extended - 药水是否有延长时间的效果(原版萤石效果)(默认为 false)
  • upgraded - 药水是否有提升等级的效果(原版红石效果)(默认为 false)

一个 potion_data 区域的示例,带有上述的三个键名:

potion_data: type: night_vision extended: true upgraded: true

自定义效果
自定义效果部分是一个包含多个元素的映射表,用于设置药水的自定义效果(与药水数据值不同)。每个在映射表中的元素均需包含三个键:

  • type - 该效果使用的名称,必须是有效的 Bukkit 药水效果名称(PotionEffectType)(在此处列出)。
  • duration - 药水持续时间,单位为刻(20 刻 = 1 秒)。
  • amplifier - 药水效果等级,填写 0 表示药水效果为 1 级。

下列是一个使用了 custom_effects,包含多个自定义效果(10 秒的抗火 I 和 30 秒的急迫 II):

custom_effects:

  • type: fire_resistance duration: 200 amplifier: 0
  • type: fast_digging duration: 600 amplifier: 1

物品标签
标签(flags)是一个添加至物品的标签列表。物品标签是一些用于隐藏特定内容使其不向玩家显示的数据。下列是一个可在物品配置中使用的有效标签列表:

flags:

  • hide_attributes
  • hide_destroys
  • hide_dye
  • hide_enchants
  • hide_placed_on
  • hide_potion_effects
  • hide_unbreakable

发光
发光(glow)部分是一个填入布尔值的位置,当设置为 true 时,物品可在没有附魔的情况下发光。该操作与添加一个附魔并在该物品上使用 hi de_enchants 标签等价。

头颅数据
头颅数据值(skull_meta)在物品为玩家头颅时可决定头颅的自定义皮肤。该部分设置需包含 uuidbase64url 三个中的一个子键。

uuid 是需要使用皮肤玩家的 UUID。base64 是一串材质的 base64 码。url 则是 minecraft.net 官网下对应的皮肤链接。

下方是一个使用本功能的配置示例,你只需要三个子键中的一个。

skull_meta: uuid: 6302a69e-9995-4f95-b2cd-d37b8ab875c9 base64: eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNjIxMTk3ZTUzYzFhYjExMmU2ODA3OWQzYzgzZmE0NzE0Yzc3YTgzZDA2MjFhMjlkNzYyZTk5ZTlmZWFhZTRkNSJ9fX0= url: http://textures.minecraft.net/texture/621197e53c1ab112e68079d3c83fa4714c77a83d0621a29d762e99e9feaae4d5

耐久值
耐久值(durability)用于设置物品的耐久值,可设定的值范围取决于物品的最大耐久(0 意味着物品即将损坏)。

NBT 数据
使用 nbt 部分配置可将 NBT 数据添加至物品。该设置支持复杂 NBT 结构,并会自动检测输入的数据种类。

注册物品 ID
注册物品 ID(key)用于指代在游戏中通过命令 /skills item register 注册的物品。在该项设置后,material 和其他数据都会无效。该设置适合对游戏中已创建的物品或过于复杂的物品使用。

自定义模型数据

可在 NBT 数据区域以下方格式添加自定义模型数据:

some_item: nbt: CustomModelData: 123

该内容跟随原版储存自定义模型数据的格式。

点击操作

点击操作可用于在玩家点击菜单物品的时候触发自定义操作。这包括了执行命令、关闭菜单、打开另一个菜单等更多操作。

触发种类
这里有多种插件能识别的操作类型(括号中的为配置文本实际使用的内容):

  • 鼠标单击(on_click
  • 鼠标左键点击(on_left_click
  • 鼠标右键点击(on_right_click
  • 鼠标中键点击(on_middle_click
  • 键盘 Q 键(on_drop

触发操作用于命名玩家以特定动作点击时触发操作的列表名称。例如,当玩家点击菜单物品时,配置中对应 on_click 部分的内容都会被激活。

种类
当你创建的物品下包含了触发种类的名称,点击操作就需要以映射列表的形式添加。
每个操作都需要预先决定种类,无论是 command(执行命令)或是 menu(打开菜单)。

命令
执行命令操作时,执行方(executor,可以为控制台(console)或玩家(player))和执行命令的内容为必填项。控制台(console)身份会从后台为玩家执行命令,而玩家(player)身份则通过玩家本身执行命令(会检查玩家是否拥有相应权限,若无则不会执行)。
执行的命令(command)内容不需要带斜杠。支持在命令参数中填入内建变量和 PlaceholderAPI 的变量。

菜单
菜单操作与菜单跳转有关。你必须要在使用对应的操作前指定操作参数,如下列表所示:

  • open - 打开本插件内的其他菜单。
  • close - 关闭当前菜单
  • next_page - 若可以,那么移动到菜单的下一页。
  • previous_page - 若可以,那么移动到菜单的上一页。

开启(open)操作必须指定菜单名称(menu)值,用以表示索要打开菜单的内部名称(该名称通常以下划线代替空格的小写名称表示)
开启(open)、下一页(next_page)和上一页(previous_page)有一个额外的 properties 内容用以设定菜单行为,该部分较为深奥,除非你深挖源代码,否则你应该不会知道这部分设置的作用。

示例
以鼠标单击激活的命令操作,通过控制台执行的示例:

some_item: on_click: - type: command executor: console command: say hi

仅在鼠标右键单击时激活关闭菜单操作的示例:

some_item: on_right_click: - type: menu action: close

使用同一个触发器的多个单击操作(按顺序执行)示例:

some_item: on_click: - type: command executor: player command: shop - type: command executor: console command: say Player opened shop

自定义菜单物品

全新的物品可通过在 items 下添加以物品名称命名的设置部分来创建。自定义物品不能为已经存在的内建物品名称。
自定义物品的格式与其他物品完全相同(包括 material、pos、display_name、lore 等)。对这些物品设置自定义点击操作,或是插入 PlaceholderAPI 的变量都是可以的。