# JSON文本類型
最基礎的JSON文本類型可被分為4類:
+ text-文本
+ selector-目標選擇器
+ score-分數
+ translate-翻譯
值得注意的是,這4類JSON類型在單個對象(同一段文字)中只能設置一個
不然會互相覆蓋,只有一個能生效(而且我們未必能夠肯定哪個能生效)
關于同時使用多個文本類型的情況,我們會在之后的章節進行討論
## text-文本
text可謂是游戲內最基本的類型
功能十分簡單,顯示你指定的文字
最基本的格式為:
```
"text":"[文本內容]"
```
例如:
```
/tellraw @a {"text":"Hello World"}
```

順帶一提,在內容中插入`\n`可以讓文字換行(只限于`成書`和`tellraw`)
例如:
```
/tellraw @a {"text":"Hello\nWorld"}
```

## selector-目標選擇器
selector的作用如同在命令中使用的目標選擇器(見章節2.2),格式一致
基本格式為
```
"selector":"[目標選擇器]"
```
選擇符就如平時使用一般輸入就可以了
例如:
```
/tellraw @a {"selector":"@p"}
```

如果世界內只有我和一只名為GGG的豬:
```
/tellraw @a {"selector":"@e"}
```

值得注意的是,選擇器參數(即跟隨在選擇符后的[]部分)也可使用:
```
/tellraw @a {"selector":"@e[type=Pig]"}
```

> 注意:
> JSON文本里的選擇器,包括接下來的score中name使用的選擇器,大部分都是以命令執行位置作為原點。
> 如`tellraw`及`title`命令以命令執行點為原點,書本以打開的玩家的位置為原點,只有牌子是以牌子坐標為原點
## score-分數
score用于顯示**特定目標的特定分數**,需要對記分板的知識(詳見之后的章節)。
格式為:
```
"score":{"name":"[對象名]","objective":"[變量名]"}
```
**對象名**即為需要選中的對象,如指定玩家名稱
**分數名**就是來自哪一個記分板變量
例如我們創建了一個名為`test`的記分板變量,里面有兩個玩家:

輸入:
```
/tellraw @a {"score":{"name":"Tester","objective":"test"}}
```

`name`支持選擇符(但不能為多選,如`@a`),我們放置了一個命令方塊,并讓SYL接近他
輸入:
```
/tellraw @a {"score":{"name":"@p","objective":"test"}}
```

`score`在`tellraw`命令中還有一個特殊功能,`name`部分輸入`*`的話
那么觀察者自己將會作為對象,顯示觀察者的分數(這在做地圖的時候十分有用)
例如:
```
/tellraw @a {"score":{"name":"*","objective":"test"}}
```
SYL的視角:

Tester的視角:

### 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=請點擊此段文字
```
然后玩家就能點擊這段文字并觸發命令了。
-----
知道了如何定義內容后,我們就得為我們的內容搞點新意思了。
接下來將會介紹如何為文本對象加入顏色、粗體等樣式