基岩技术教程:3.原始JSON文本
本帖最后由 Cat_Anchor 于 2024-8-14 13:24 编辑前言
这一期,我们来讲基岩版的原始 JSON 文本。这种文本使用 JSON 格式编写,可以用于 /titleraw 命令、/tellraw 命令、NPC 对话、成书、告示牌、物品名称、实体名称、脚本文本等场景。
https://klpbbs.com/static/image/hrline/line5.png
基本格式
基本的原始 JSON 文本很简单,首先是根标签 {}。然后在根标签里加上一个最基本的数组,叫 rawtext,就像这样 {"rawtext":[]}。最后,在数组中加入一个又一个对象——我叫它(文本)组件,就行了。
文本组件的格式是 {"组件名": 值},注意这里的值不仅可以是字符串,还可以是数组、对象之类的东西,所以我没有加引号。多个文本组件可以堆叠,方法是在每个组件之间加入半角逗号 , 让语法正确,组件展示出的内容会相互拼接。
现在给数组里加一个组件,比如 text 组件 {"rawtext":[{"text":"Hello World!"}]},这就是最基础的原始 JSON 文本。
那么这部分将介绍三个文本组件,text、selector和score。
text
text 组件是最基础的文本组件,用于显示一条消息,写法是 {"text":"文本"}。这个消息可以是任何字符,但类似于 " 这种字符需要转义符 \ 转义,也就是写成 \"。还可以换行,使用 \n 代表新的一行。text 组件会被存在的 translate 组件(见下)覆盖。
selector
selector 组件用于通过目标选择器动态显示实体名称,写法是 {"selector":"目标选择器"}。假设我的基岩用户名叫 CatAnchor17,那么使用 {"rawtext":[{"selector":"@s"}]} 就会直接显示 CatAnchor17。如果让我的小号 CatAnchor18 看这条消息,那么就会显示 CatAnchor18。如果选择了未被命名的非玩家实体,那么会显示它的实体名称。此组件添加于 1.16.100.55。
score
score 组件是比较复杂的一个组件,然而只是结构比较复杂,功能并不复杂,那就是显示特定实体的分数,它的值是一个对象,里面有 name、objective 和 value 三个字段。整体的写法是 {"score":{"name":"","objective":"","value":0}}。
其中,name 字段需要填写目标选择器或玩家名称或假名或一个 *。如果是 *,那么会自动指定为阅读者。
objective 字段需要填写计分板的名称。
value 字段可选,需要填写整数。填写之后,无论实际分数如何都会显示为填写的分数。
https://klpbbs.com/static/image/hrline/line2.png
翻译字符串
这部分将介绍剩余的两种组件,translate 和 with。
translate
translate 用于根据本地化键名翻译字符串。由于 MC 支持多种语言,它使用一种叫本地化的操作,让特定的文字可以显示为多种语言。其中,原来的文本叫本地化键名或翻译关键字,而真正显示的就是翻译之后的正常文本。translate 就用于执行这个过程。它的格式为 {"translate":"本地化键名"}。其中,本地化键名必须填写存在的本地化键名。translate 会覆盖同级的 text。
with
with 必须与 translate 一起使用,不能单独出现。有时候,我们本地化文本时不能直接得知具体的文本,比如需要一个玩家名称,那么就需要一些特殊的字符组合把这个地方挖个空,然后真正获取了玩家名称之后再填上。with 就用于执行这个过程,它的格式为 {"with":["文本1","文本2"]} 或 {"with":{"rawtext":[...]}}。没错,with 的值既可以是一个包含字符串的数组,又可以是 rawtext 根标签。
刚才提到的特殊字符组合就是 %s 这样的东西,如果只需要挖一个空,那么大多数情况用 %s 或 %%s。如果同时存在多个 %%s,每个 %%s 与 with 中的值对应,如果找不到对应值,那么显示为空。如果把 %%s 中的 s 替换为 1-9 的数字,比如 %%1,那么这个数字就会成为从数组中寻找的序数,也就是 %%2会寻找第二个值。
https://klpbbs.com/static/image/hrline/line1.png
后记
这一期,我们讲解了基岩版的原始 JSON 文本,下期很可能是 NBT 相关的内容,具体来说,与世界相关。
第二期 第三期 第四期
页: [1]