# 告示牌
`告示牌`支持使用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\"}"}
```
![N6](https://box.kancloud.cn/dc75191812de340dc696eb70fda56c8c_409x205.png)
如需在同一行内使用多于一个JSON文本,请使用`JSON array`或`extra`
例子:
```
/blockdata ~ ~1 ~ {Text1:"[\"\",{\"text\":\"Hello\",\"color\":\"green\"},{\"text\":\" World\",\"color\":\"red\"}]"}
```
![52](https://box.kancloud.cn/28978ccac1f63fa8a90e32df37d3aae4_400x200.png)
---
最后是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\"}}"}
```
![53](https://box.kancloud.cn/039f08d29f1f8613d63b3ec8a4533182_399x200.png)
![54](https://box.kancloud.cn/b874e021669917180520597bb633c1ed_648x36.png)
值得注意的事项是
玩家右键点击牌子时执行命令,命令的执行坐标以牌子所处位置为起始点 (情况类似与/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"}
```
![56](https://box.kancloud.cn/b8ef9b89dbd7927c48d3bd56b6f3ef0c_292x360.png)
![57](https://box.kancloud.cn/2b32c74fe0f4c908c33d23acf2008799_292x360.png)
---
如需在一页内使用多个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`换行符,所以它将在第二行显示
最终效果为:
![58](https://box.kancloud.cn/aa18d515d8d2e4204d68e34701a19e90_292x360.png)
点击say hi
![59](https://box.kancloud.cn/8975cbf4e3ca1078f2d18f76ee67fd1a_648x19.png)
**请注意**,于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"}
```