# 告示牌
`告示牌`支持使用JSON文本定義上面的文字,并且有三種指令可以自定義告示牌,分別為`give`命令(獲得物品形式的`告示牌`),`setblock`命令(直接放置),和`blockdata`命令(修改已有`告示牌`)
格式分別為:
```
/give @p sign 1 0 {BlockEntityTag:{NBT}}
```
```
/setblock [x] [y] [z] minecraft:standing_sign/minecraft:wall_sign [數據值] [舊方塊處理方式] {NBT}
```
```
/blockdata [x] [y] [z] {NBT}
```
其中`告示牌`的`NBT`格式如下:
```
{Text1:"{JSON文本}",Text2:"{JSON文本}",Text3:"{JSON文本}",Text4:"{JSON文本}"}
```
`Text1/2/3/4`分別代表牌子的每一行的內容(在使用`entitydata`命令時,如果相關行內容不需編輯,可以不寫相關行數的NBT)
請注意,由于`Text1/2/3/4`本身不是JSON文本,而是`NBT`,所以無需使用雙引號包圍,并且由于JSON文本被雙引號包圍,請注意里面引號需要轉義
例子:
```
/blockdata ~ ~1 ~ {Text1:"{\"text\":\"Hello World\",\"bold\":true,\"color\":\"dark_green\"}",Text2:"{\"selector\":\"@p\"}"}
```

如需在同一行內使用多于一個JSON文本,請使用`JSON array`或`extra`
例子:
```
/blockdata ~ ~1 ~ {Text1:"[\"\",{\"text\":\"Hello\",\"color\":\"green\"},{\"text\":\" World\",\"color\":\"red\"}]"}
```

---
最后是CE在牌子的應用
牌子的每一行都可以設置一個CE,即一個牌子最多可設置4個CE
但每一行的CE只能設置在主項,設置在分項的CE是無效的
例如:
```
/blockdata ~ ~1 ~ {Text1:"{\"text\":\"say 1\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say 1\"}}",Text2:"{\"text\":\"say 2\",\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say 2\"}}"}
```


值得注意的事項是
玩家右鍵點擊牌子時執行命令,命令的執行坐標以牌子所處位置為起始點 (情況類似與/execute [點擊者] [告示牌坐標] [命令])
- 所以當涉及到選擇符的命令,例如**/say @e[c=2]** ,這個命令將會以牌子為選擇實體的起始點,這個情況下會選中距離牌子最近的兩個實體
- 而同樣的,使用了相對坐標,例如**/setblock ~ ~ ~ minecraft:stone**,則會以牌子作為相對坐標的起始點,這個情況下會將牌子替換為石頭
- **特別注意**,`c=1`這個選擇器參數有特別處理,該參數無論如何都會選中點擊者,如**/say @e[c=1]** 必定會選中點擊者,不管中間有多少實體距離`告示牌`比點擊者更近
**亦請注意**,于1.12以后的版本,由于NBT語法分析器的改動,若需要在牌子中使用`unicode-萬國碼`,即`\u`,需要對其反斜杠進行轉義,即寫成`\\u`的形式
# 成書
成書亦支持使用JSON文本定義書本的內容,獲得方式只有一個,使用`/give`命令
格式為:
```
/give @p written_book [數量] 0 {pages:["{JSON文本}","{JSON文本}",......],title:"[成書名稱]",author:"[作者]"}
```
`數量`,`成書名稱`和`作者`不多作解釋,而!(list)[list]`pages`這個NBT 里面的每一個JSON文本都代表一頁的內容
例如:
```
/give @p written_book 1 0 {pages:["{\"text\":\"page 1\"}","{\"text\":\"page 2\"}"],title:"Book",author:"SYL"}
```


---
如需在一頁內使用多個JSON文本,自然需要使用`JSON array`
并且`成書`也支援CE和HE
例如:
```
/give @p written_book 1 0 {pages:["[\"\",{\"text\":\"say hi\",\"underlined\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say hi\"}},{\"text\":\"\nhello\",\"bold\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"world\"}}]"],title:"Book",author:"SYL"}
```
分解以上命令說明
- 主項為`\"\"`,即空白的主項
- 第二項為"say hi",點擊后讓玩家執行`/say hi`
- 第三項為"\nhello",懸浮在文字上顯示`world`
- 需要注意的是,第三項內容前有`\n`換行符,所以它將在第二行顯示
最終效果為:

點擊say hi

**請注意**,于1.12以后的版本,由于NBT語法分析器的改動,若需要在牌子中使用`unicode-萬國碼`或`換行符`,即`\u`和`\n`,需要對其反斜杠進行轉義,即寫成`\\u`以及`\\n`的形式
以上命令若需在1.12后使用,請使用以下版本:
```
/give @p written_book 1 0 {pages:["[\"\",{\"text\":\"say hi\",\"underlined\":true,\"clickEvent\":{\"action\":\"run_command\",\"value\":\"/say hi\"}},{\"text\":\"\\nhello\",\"bold\":true,\"hoverEvent\":{\"action\":\"show_text\",\"value\":\"world\"}}]"],title:"Book",author:"SYL"}
```