第134章JSON的内容上
我们都知道在json里面可以使用text来输入文本。
而且我们也知道在基岩版显示文本的地方是可以写目标选择器的。
那么有没有什么办法能不能帮助我们在java版在json使用目标选择器呢?
有!
这就是:selector元素。
selector元素属于内容类别。内容元素能有什么作用?在minecraft的json中,一个json要生效,必须要每个对象都至少有一个内容元素,比如text就是内容元素。
那么selector该怎么用?
很简单,比如:
/tellraw@a{“selector“:“@p“}
这样子写,然后游戏就会根据元素内的内容来转义,分析这个目标选择器,最终得出来这个目标选择器的意思:显示最近的玩家。
好了,然后游戏就要找到距离执行地点最近的玩家,然后就向全服广播:
卢本伟牛逼
当然,就算你不填目标选择器也可以,因为游戏仍然把它认为是目标选择器,比如:
/tellraw@a{“selector“:“我靠“}
然后游戏就会寻找名为“我靠”的玩家,但实际上并没有这个玩家。
最后游戏找不到,干脆就不干了,直接给你显示一个空空如也的消息。
但如果真有叫做“我靠”的玩家,那么游戏就会正常显示这个名叫“我靠”的玩家的名字。
对了,还会显示前后缀。
当然,selector还不高级,接下来我们来更高级一些:
score(内容类别)——记分板元素
这个score可以显示玩家的指定计分项分数,让你的服务器更加的高级。
score也很简单,其格式大概是这个样子的:
{“score“:{“name“:“目标选择器“,“objective“:“计分项名“}}
(嘿作者,你不是说大括号里不能套大括号吗?怎么现在就出现了?)
(额,凡事都有例外嘛)
我相信各位都看得懂这个格式吧,现在我们举个例子:
/tellraw@a{“score“:{“name“:“@s“,“objective“:“绿宝石“}}
这样子,执行后在场的所有玩家都会知道自己有多少绿宝石了。
然鹅,name不光可以填目标选择器,还可以填*号!
这个*号是什么作用呢?
@s类似,也是显示自己的分数,只不过为了准确,还要在显示前面加上“读者”二字。
为何?待会你就明白了。
其实score不光是name和objevctive这两个子元素,还有一个子元素:value。
这个value填不填都没关系,反正填了之后,这个objective就失效了,值就固定显示这个value的值。神奇的是,这个value竟然支持数字(不带引号)和字符串。
至于mojang为什么要添加这个元素,可能是因为方便后期编辑吧。
对了,注意一下,一个对象里只能有一个内容元素,所以你不可能在一个对象里同时写上两个text,不然游戏只会显示其中一个元素。
我们知道,游戏内是可以选择语言的,因为各个地方的语言都是不一样的。minecraft也不例外,里面有很多可选的语言,起码可以满足全球大部分人了。
既然游戏都要这样,那么出名的minecraft服务器也要这样,就算不支持那些奇怪的语言,起码也要支持英文和中文繁体。
那么我们自己开的服务器该怎么翻译?
很简单:使用json里的translate元素就可以了。
translate元素也是属于内容元素,但它和其他元素不一样的是,它并不是完全固定的,而是会根据玩家选择的语言来自动翻译。
看到这你可能会说:minecraft还可以翻译英文中文?
其实并不是这样的,实际上minecraft没有内置的翻译软件,所以translate你只能填翻译标识符。
什么是翻译标识符?
翻译标识符可以指定游戏里的一个特定物品,比如“石头”,它的标识符是:
block.minecraft.stone
其中,block是它的类别,minecraft是它的命名空间,stone是它的id。
把它放进translate里:
{“translate“:“block.minecraft.stone“}
运行。