# JSON文本类型
最基础的JSON文本类型可被分为4类:
+ text-文本
+ selector-目标选择器
+ score-分数
+ translate-翻译
值得注意的是,这4类JSON类型在单个对象(同一段文字)中只能设置一个
不然会互相覆盖,只有一个能生效(而且我们未必能够肯定哪个能生效)
关于同时使用多个文本类型的情况,我们会在之后的章节进行讨论
## text-文本
text可谓是游戏内最基本的类型
功能十分简单,显示你指定的文字
最基本的格式为:
```
"text":"[文本内容]"
```
例如:
```
/tellraw @a {"text":"Hello World"}
```
![1](https://box.kancloud.cn/1b5b72c53fb3af46db42fe8a2d1d613e_648x18.png)
顺带一提,在内容中插入`\n`可以让文字换行(只限于`成书`和`tellraw`)
例如:
```
/tellraw @a {"text":"Hello\nWorld"}
```
![2](https://box.kancloud.cn/b6d829a5fdaa5f35c98c2c18690e93a7_648x36.png)
## selector-目标选择器
selector的作用如同在命令中使用的目标选择器(见章节2.2),格式一致
基本格式为
```
"selector":"[目标选择器]"
```
选择符就如平时使用一般输入就可以了
例如:
```
/tellraw @a {"selector":"@p"}
```
![4](https://box.kancloud.cn/7f0c24f74bfbb84b40dd565910bad086_648x19.png)
如果世界内只有我和一只名为GGG的猪:
```
/tellraw @a {"selector":"@e"}
```
![5](https://box.kancloud.cn/913694f1b49a0fcfeb59655c9e53d66a_648x19.png)
值得注意的是,选择器参数(即跟随在选择符后的[]部分)也可使用:
```
/tellraw @a {"selector":"@e[type=Pig]"}
```
![6](https://box.kancloud.cn/7d9993ab35246442ba90a5ac9b306496_648x18.png)
> 注意:
> JSON文本里的选择器,包括接下来的score中name使用的选择器,大部分都是以命令执行位置作为原点。
> 如`tellraw`及`title`命令以命令执行点为原点,书本以打开的玩家的位置为原点,只有牌子是以牌子坐标为原点
## score-分数
score用于显示**特定目标的特定分数**,需要对记分板的知识(详见之后的章节)。
格式为:
```
"score":{"name":"[对象名]","objective":"[变量名]"}
```
**对象名**即为需要选中的对象,如指定玩家名称
**分数名**就是来自哪一个记分板变量
例如我们创建了一个名为`test`的记分板变量,里面有两个玩家:
![7](https://box.kancloud.cn/2a372f9ca84525b74a87df166a211aa3_124x56.png)
输入:
```
/tellraw @a {"score":{"name":"Tester","objective":"test"}}
```
![9](https://box.kancloud.cn/586aaea0263868e324ccae4f6ff239bc_648x18.png)
`name`支持选择符(但不能为多选,如`@a`),我们放置了一个命令方块,并让SYL接近他
输入:
```
/tellraw @a {"score":{"name":"@p","objective":"test"}}
```
![8](https://box.kancloud.cn/fbbce3fd32fff9f551ed6824a0928764_648x18.png)
`score`在`tellraw`命令中还有一个特殊功能,`name`部分输入`*`的话
那么观察者自己将会作为对象,显示观察者的分数(这在做地图的时候十分有用)
例如:
```
/tellraw @a {"score":{"name":"*","objective":"test"}}
```
SYL的视角:
![8](https://box.kancloud.cn/fbbce3fd32fff9f551ed6824a0928764_648x18.png)
Tester的视角:
![9](https://box.kancloud.cn/586aaea0263868e324ccae4f6ff239bc_648x18.png)
### translate-翻译文件(不常用)
translate其实就是在文本JSON里引用翻译文件的文字,格式为:
```
"translate":"翻译识别器"
```
如
```
"translate":"chat.link.warning"
```
然而翻译文件的文字可以有参数(那些`%s`),这个时候我们就可以用with来传入参数(顺序对应翻译文件内的`%s`),格式为:
```
"with":[参数字串列表]
```
如
```
假设翻译文件中有一行为
custom.a=第一个参数: %s,第二个参数: %s
JSON文本为
{"translate":"custom.a","with":["a","b"]}
输出则为
第一个参数: a,第二个参数: b
```
---
translate除了能够用作翻译以外,亦能用作检查资源包,如
```
{"translate":"custom.1","clickEvent":{"action":"run_command","value":"/say 用了自定义的材质包"}}
```
原版很明显是没有`custom.1`这个翻译识别器的,故此没加载资源包的用户看到的就是一片空白,也没法点击。而地图的自定义资源包则能够添加此翻译识别器,如
```
custom.1=请点击此段文字
```
然后玩家就能点击这段文字并触发命令了。
-----
知道了如何定义内容后,我们就得为我们的内容搞点新意思了。
接下来将会介绍如何为文本对象加入颜色、粗体等样式