样式格式
这个页面是 MiniMessage/Format (opens new window) 的部分翻译,做了一些格式的修改和额外的说明。
插件开发者推荐将其与旧版本颜色代码替换算法 (opens new window)配合使用。
# 格式
MiniMessage 语言使用标签,所有你需要做的均以标签定义。标签均有一个起始标签和一个终止标签(不过 <reset>
是个例外)。
起始标签是必选的(显而易见),但终止标签在不开启 strict
模式的情况下可以省略。
以下示例看起来大不相同,但最终在视觉上是一致的。
<yellow>你好<blue>世界<yellow>!
<yellow>你好<blue>世界</blue>!
<yellow>你好</yellow><blue>世界</blue><yellow>!</yellow>
对于没有内容的标签,可以使用 <标签名/>
格式来自动结束。采用这种格式,即使在 struct
模式下,也不应该提供单独的结束标签 (</标签名>
)。
所有标签名都是区分大小写的,以减少可能存在的冲突。但我们推荐所有标签名均使用小写(或者至少要保持格式一致)。
一些标签拥有参数,看起来就像这样:<标签名:参数>内容</标签名>
。举个例子:
<hover:show_text:"<red>test:TEST">TEST
<click:run_command:test>TEST
如你所见,这里有时包含文本组件("<red>test:TEST"
),有时包含数字、字符串,或其它类型。请参考文档下文。
单引号('
)和双引号("
)可交替使用。我们推荐前后保持一致,尽管为了减少转义引号,在使用某些参数时切换引号类型可能更合理一点。
任何会产生影响的、有意义的符号均可以被转义。
- 在纯文本中,标签开头符号(
<
)可以在前面加一个捺斜杠(\
)来转义。 - 在引号中的字符串,同样可以转义引号(
'
或"
)。 - 在其它地方,转义字符都可以在相关的地方进行转义。
- 为了处理起来简单,在未加引号的标签参数中不能进行转义
- 在不支持转义的地方,转义字符会按原文一样被跳过
- 在支持转义的地方,两个转义符号
\\
可输出一个\
默认的标签会尝试转换成文本组件,以与原版进行兼容,但会对部分元素进行一些缩减。使用 Minecraft Wiki (opens new window) 进行对原版文本组件系统的参考,可能会很有帮助。特别是像点击事件和鼠标悬停事件之类组件的参数。
MiniMessage网页编辑器 (opens new window) 可以让你在本地测试 MiniMessage 文字,而无需打开一个 Minecraft 实例。这会在你学习时对你有所帮助,比如将文档中的实例放到编辑器中进行预览。
# strict 模式
默认情况下,MiniMessage 是非常宽容的,无效的标签将会直接忽略。所有输入文字的起始标签都不需要与之对应的终止标签,它们会自动关闭(添加终止标签)。
应用程序可选开启 strict 模式,这将禁止使用 <reset>
,并且要求所有起始标签都以反向的顺序进行关闭(添加终止标签)。任何使用 MiniMessage 的应用程序都应该向终端用户说清楚,程序使用了哪种语言变体(是否开启 strict 模式)。
# 标准标签
这里有一些 MiniMessage 自带且默认启用的标签。
# 颜色
十六进制颜色在 Minecraft 1.16 加入
下一部分的颜色
标签
<颜色名称>
参数
颜色名称
,可使用任何 Minecraft 颜色常量:black
,dark_blue
,dark_green
,dark_aqua
,dark_red
,dark_purple
,gold
,gray
,dark_gray
,blue
,green
,aqua
,red
,light_purple
,yellow
,white
。
dark_grey
可用于替代dark_gray
,同样地,grey
可用于替代gray
。
十六进制颜色同样受支持,格式为#RRGGBB
。
示例
<yellow>你好<blue>世界</blue>!
<red>这是一个<green>测试!
<#00FF00>R G B!
# 颜色(详细)
十六进制颜色在 Minecraft 1.16 加入
以更详细的方式指定颜色
标签
<color:颜色名字或十六进制>
别名
<colour>
,<c>
参数
颜色名称或十六进制
可使用任何上述的值(即颜色名字或十六进制颜色)
示例
<color:yellow>你好<color:blue>世界</color:blue>!
<color:#FF5555>这是一个<color:#55FF55>测试!
# 阴影颜色
在 Minecraft 1.21.4 加入
下一部分的阴影颜色
标签
<shadow:颜色名字或十六进制:[透明度浮点数]>
<!shadow>
作为禁用阴影的别名(等效于<shadow:#00000000>
)
参数
颜色名字或十六进制
颜色的名字,或者十六进制字符串,格式为#RRGGBB
或#RRGGBBAA
[透明度浮点数]
浮点数值,范围从0到1,重设阴影的透明度。可选项,默认为 0.25,当颜色的 Alpha 值已给定时该选项无效。
示例
<shadow:yellow>你好<shadow:aqua:0.5>世界</shadow>!
<shadow:#FF5555>这是一个<shadow:#55FF55>测试!
<shadow:#000000FF><b>这这
# 装饰
下一部分的文字装饰
标签
<装饰名[:false]>
或者<!装饰名>
作为翻转装饰开关的别名
参数
装饰名
为任何 Minecraft 支持的装饰 | 含义 | 装饰 | 别名 | | --- | --- | --- | | 加粗 |bold
|b
| | 斜体 |italic
|em
或者i
| | 下划线 |underlined
|u
| | 删除线 |strikethrough
|st
| | 乱码 |obfuscated
|obf
|
示例
<underlined>这是<bold>很重要的</bold>!
# 重置
关闭所有已打开的标签,即作为前面所有起始标签的终止标签作用,重置颜色、装饰等等。重置标签没有终止标签。
在 strict 模式下,重置标签禁止使用。
标签
<reset>
参数
- 无
示例
<yellow><bold>你好<reset>世界!
# 点击
copy_to_clipboard
在 Minecraft 1.15 加入
允许在用户点击文本组件执行操作
标签
<click:行为:值>
参数
行为
点击事件的类型,可用类型详见这里 (opens new window)值
特定点击事件类型的参数,请参考 Minecraft Wiki (opens new window)
示例
<click:run_command:/send>点击</click>查看世界种子
点击<click:copy_to_clipboard:哈哈你烂透了>这里</click>复制你的分数!
警告
自从 1.19.1 启用了聊天签名以来,客户端不支持执行需要签名参数的命令了,比如 /say
或者 /tell
,以免服务器代客户端发送已签名的聊天消息。
# 鼠标悬停
允许在用户的鼠标悬停到文本组件时显示点什么
标签
<hover:行为:值>
参数
行为
鼠标悬停事件的类型,可用类型详见这里 (opens new window)值
特定鼠标悬停事件类型对应的参数,见下表: | 含义 | 行为 | 值 | | 显示文本 |show_text
|文本
(一个 MiniMessage 字符串) | | 显示物品 |show_item
|类型[:数量[:标签]]
(一个物品类型的键,可选设定物品的数量和NBT标签) | | 显示实体 |show_entity
|类型:UUID[:名字]
(一个实体类型的键ID,还有实体的UUID,可选设定实体自定义名称) |
示例
<hover:show_text:'<red>test'>TEST
# 按键绑定
在 Minecraft 1.12 加入
允许显示玩家绑定的相应按键
标签
<key:操作类型>
参数
操作类型
按键绑定的ID,比如跳跃
示例
按下 <red><key:key.jump></red> 跳跃!
# 可翻译文本
允许根据玩家使用的语言,显示 Minecraft 国际化消息
标签
<lang:键:值1:值2>
别名
<tr>
,<translate>
参数
键
文本翻译键值X
可选值,用于变量(它们会加到文本组件中的with
标签)
示例
你应该获取一个<lang:block.minecraft.diamond_block>!
<lang:commands.drop.success.single:'<red>1':'<blue>Stone'>!
# 插入文字
在 Minecraft 1.8 加入
允许Shift+左键点击文本组件时插入文字到聊天栏输入框
标签
<insertion:文字>
参数
文字
要插入的文字
示例
Shift点击 <insertion:测试>这里</insertion> 插入文字!
# 彩虹
需要使用十六进制颜色,在 Minecraft 1.16 加入
预设的渐变色文字
标签
<rainbow:[!][相位]>
参数
相位
可选!
让彩虹颜色反向
示例
<yellow>Woo: <rainbow>||||||||||||||||||||||||</rainbow>!
<yellow>Woo: <rainbow:!>||||||||||||||||||||||||</rainbow>!
<yellow>Woo: <rainbow:2>||||||||||||||||||||||||</rainbow>!
<yellow>Woo: <rainbow:!2>||||||||||||||||||||||||</rainbow>!
# 渐变
需要使用十六进制颜色,在 Minecraft 1.16 加入
渐变颜色的文字
标签
<gradient:[颜色1]:[颜色...]:[相位]>
参数
- 一个从1到N个颜色的列表,十六进制颜色和颜色名字均可使用,并且有可选的相位参数(范围-1到1)以允许你将渐变到处偏移,方便制作动画
示例
<yellow>Woo: <gradient>||||||||||||||||||||||||</gradient>!
<yellow>Woo: <gradient:#5e4fa2:#f79459>||||||||||||||||||||||||</gradient>!
<yellow>Woo: <gradient:#5e4fa2:#f79459:red>||||||||||||||||||||||||</gradient>!
<yellow>Woo: <gradient:green:blue>||||||||||||||||||||||||</gradient>!
# 过渡
需要使用十六进制颜色,在 Minecraft 1.16 加入
从各个颜色中过渡,与渐变类似,只不过横向颜色都是一致的,重点是通过相位来选择颜色。
标签
<transition:[颜色1]:[颜色...]:[相位]>
参数
- 一个从1到N个颜色的列表,十六进制颜色和颜色名字均可使用,并且有可选的相位参数(范围-1到1)以允许你将渐变到处偏移,方便制作动画
示例
<transition:#00ff00:#ff0000:0>|||||||||</transition>
<transition:white:black:red:[相位]>你好世界 [相位]</transition>
(请尝试替换[相位]
为0-1的值,都输出一遍就知道用法了)
# 字体
允许你更改文字的字体
标签
<font:键>
参数
- 字体的键,默认命名空间为
minecraft
示例
默认 <font:uniform>Uniform <font:alt>Alt </font> Uniform
<font:myfont:custom_font>使用来自材质包的自定义字体
# 换行
插入一个换行符
标签
<newline>
别名
br
参数
- 无
示例
让我在这插入 <newline>一个换行符
<hover:show_text:'<red>鼠标悬停<newline><green>还带换行符'>文字有<newline>换行
# 选择器
在 Minecraft 1.8 加入,且在
text-minimessage:4.11.0
加入
插入一个选择器组件
标签
<selector:选择器[:分隔符]>
别名
sel
参数
选择器
要插入的选择器模式分隔符
(可选)要插入到选择器输出数值之间的内容
示例
你好 <selector:@e[limit=5]>,我是 <selector:@s>!
# 分数
在 Minecraft 1.8 加入,且在
text-minimessage:4.13.0
加入
插入一个记分板分数组件
注意
分数组件需要在服务器上渲染才能让客户端看见,这是平台特有操作。
标签
<score:名字:目标>
参数
名字
记分板名字,或者在接收者上下文的一个选择器目标
目标分数所在记分板的目标名
示例
你已赢得 <score:rymiel:gamesWon/> 场游戏!
# NBT
在 Minecraft 1.14 加入,且在
text-minimessage:4.13.0
加入
插入一个NBT组件。标签的语法旨在让使用原版 Minecraft 的 /data
命令的人熟悉。
注意
已生产的NBT组件需要在服务器上渲染才能让客户端看见,这是平台特有操作。
标签
<nbt:block|entity|storage:id:路径[:分隔符][:interpret]>
别名
data
参数
block|entity|storage
要读取的数据的来源 —— 一个block
(方块)实体,一个entity
(实体)选择器,或者命令storage
(储存)容器id
方块NBT组件的位置,实体选择器NBT组件,或者命令储存NBT组件的键(资源路径)路径
数据源下的NBT路径分隔符
数据源有多个返回结果(主要是实体NBT)时,多个数值之间的分隔符号interpret
输入这个,则返回结果会再去解析成 JSON 组件