告示牌
告示牌
支持使用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
本身不是文本对象,而是NBT
,所以无需使用双引号包围,并且由于JSON文本被双引号包围,请注意里面引号需要转义。
例子:
blockdata ~ ~1 ~ {Text1:"{\"text\":\"Hello World\",\"bold\":true,\"color\":\"dark_green\"}",Text2:"{\"selector\":\"@p\"}"}
如需在同一行内使用多于一个文本对象,请使用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
的形式
如果是Setblock的话,需要指明Text1-Text4的JSON。
不过,如果那行是空的话,可以写null
。
例子:Text4:null
成书
成书亦支持使用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 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"}