第一百二十三章 JSON的内容 下
我们上一章讲到了translate,也就是翻译。我们可以使用游戏里自带的翻译标识符来达成翻译的效果。
我们在第六十章,基岩版的JSON文本中,讲到了translate,也就是翻译。我们可以使用游戏里自带的语言文件名称来达成翻译的效果。
等等,是不是有什么不对的地方?
这两个竟然作用一模一样!连元素名都长得一模一样!等等,基岩版的translate还有带一个with参数,那么难不成.......
没错!在JAVA版的JSON的translate,也有一个附加的with参数,作用也和基岩版一样。
唉不对,有一点不一样,就是格式和替换符号不一样。
在JAVA版的JSON里,with可以识别translate里的%s(下一个参数)和%1$s(第一个参数),其中%1$s中的1可以替换为其他的数字,这个数字代表着显示第几个参数。
而with的格式是这样的:
[{“with“:[{原始JSON文本},对象]}]
等等?这不就是?套娃?
没错,这的确是可以套娃的:
[{“with“:[{“with“:[{“with“:[{“with“:[{“with“:[{“with“:[{......}]}]}]}]}]}]}]
而这个with本身的内容是一个列表,按从左到右排列,所以使用%s,第一个%s显示第一个,第二个%s显示第二个,第三个%s显示第三个,以此类推。
那么这个with到底有什么用?对哦,作者在第六十章没讲明白唉。那么这里讲明白吧。
with的作用,就是可以在translate里插入一段固定的文字,不会因为语言的变化而变化。
那么现在来举个例子,比如我们要弄一段文字:
<猪>你当我是猪吗?
而其中,“猪”是要翻译的,如果我们只能使用with和translate,就可以这么做:
{“translate“:“%s%s%s%s“,“with“:[“<“,{“translate“:“entity.minecraft.br /ig“},“>“,“你当我是猪吗?“]}
这样子最终得出来的结果是这样的:
<猪>你当我是猪吗?
如果调成英文那么是这样的:
<Pig>你当我是猪吗?
可能有人已经注意到了,作者并没有直接把entity.minecraft.br /ig放在第一个translate里,而是把它放在了with里。这是为什么?
很简单,放第一个translate游戏就识别不出来了,因为我们还有%s这些干扰项,所以我们只能放出来。
但是如果我的读者里面有外国人,那么这群外国人肯定会表示对这条指令不太满意,因为他们认为说的话里面的“猪”字也可以翻译成英文,那么这该怎么办呢?
很简单,可以修改上面的指令变成:、
{“translate“:“%s%s%s%s%2$s%s“,“with“:[“<“,{“translate“:“entity.minecraft.br /ig“},“>“,“你当我是“,“吗?“]}
然后把游戏调成英文,再运行一次:
<Pig>你当我是Pig吗?
好了,现在这群外国人都已经表示对这条指令满意了,但是他们对其喜欢的主播造的桥仍然非常不满意,于是作者为了让这群外国人彻底满意,就造出了一个桥,这个桥可以方便河两岸的村民非常“便捷”的来往交易,这群外国人看到我造的桥特别满意,于是每人随手就给了我这本书投了一张推荐票。
好了,这就是translate的全部了,但这不是JSON内容元素的全部。在JSON里,还有一个和translate类似的元素,那就是keybind内容元素。
格式和translate差不多,都是要填标识符。而translate是翻译标识符,keybind是按键标识符。
这有什么用?keybind的作用就在于可以非常方便的显示出游戏的按键,把服务器做得高大上起来。特别是使用keybind,还可以制作出一个很简单的新手教程。
而且其显示内容也会随着玩家在设置里更改而更改。
比如:
{“keybind“:“key.inventory“}就是显示游戏打开背包的按键,如果玩家没有更改,使用默认设置,那么将会显示e。
是不是很简单?对,但是标识符找起来就难了。
为何?如果你去MinecraftWiki找到对应的内容,你会发现其“键位标识符”指向了“控制”词条,而这个词条压根儿就没有键位标识符。
MinecraftWiki没有,那么该去哪找呢?
2020年初,MinecraftWiki为了方便中国大陆的用户查找资料,分别在Bilibili和网易分别设立了镜像,网址分别是:
哔哩哔哩:wiki.biligame.com/mc/Minecraft_Wiki
网易:mc.163.com/wikigrab/
而哔哩哔哩就是一个真的镜像映射,内容还是Minecraft Wiki。
而网易就不一样了,还专门重新写了一个界面。但是在其他人看来,网易的这波操作让该MinecraftWiki从有用到有个锤子用来了一个一百八十度大反转,其他人宁愿去哔哩哔哩,也不愿去看看网易的镜像站。
那么网易的镜像站就真的没用了吗?还真不一定。
在网易的Minecraft Wiki首页点击“游戏内容”,往下拉一下,你就会发现了一个新的大陆:原创教程!
实际上这些教程是从Minecraft WIKI那里搬过来的,但网易把其放在了最醒目的地方,加上界面UI的优化,使我们可以很容易找到这里。
其中,有一篇教程叫做原始JSON文本,里面详细的说明了原始JSON文本的各个元素,就在这里,我们就可以找到原版的大部分键位标识符:
key.forward——向前移动——W
key.left——向左移动——A
key.right——向右移动——D
key.back——向后移动——S
key.sneak——潜行——左Shift
key.sbr /rint——疾跑——左ctrl
key.jumbr /——跳跃——sbr /ace
key.use——使用物品|放置方块——鼠标右键
key.attack——攻击|摧毁——鼠标左键
key.br /ickItem——选取方块——鼠标中键
key.drobr /——丢弃所选物品——Q
key.swabr /Hands——交换副手和主手中的物品——F
key.inventory——开启|关闭物品栏——E
key.hotbar.[1~9]——快捷栏1到9——1~9
key.saveToolbarActivator——保存物品工具栏——C
key.loadToolbarActivator——加载物品工具栏——X
key.chat——打开聊天栏——T
key.br /layerlist——玩家列表——Tab
key.command——输入命令——/
key.fullscreen——全屏显示切换——F11
key.smoothCamera——切换电影视角——无默认按键
key.togglePersbr /ective——切换视角——F5
key.screenshot——截图——F2
key.advancements——进度——L
key.sbr /ectatorOutlines——高亮旁观者玩家——无默认按键
keybind也完了,那么内容完了没有?
还没完,但也快完了,只剩最后一个:nbt。
nbt也是一个内容元素,使用nbt,可以读取指定实体、方块或命令存储的NBT其中的某个值,并把它显示出来,比如直接显示出一个玩家的经验值,或者是一头阿米驴的血量——哦不!阿米驴被服务器的防刷物品装置清除了!阿——米——驴——!
只不过这个内容,我们就放到接下来讲NBT时再讲吧。
(嘿,作者,JSON怎么换行啊?)
额,这个......
“\”这个符号叫做“反斜杠”,和“正斜杠”(/)是相反的。在计算机语言中,反斜杠通常叫做“转义符号”,而在转义符号后面添加一些数字或字母,是可以有特殊作用的。而JSON本身作为JAVA的一部分,自然而然也可以使用转义符号。
比如要显示英文的引号,可以在英文的引号前面加上一个\,让其失去意义,比如:
{“text“:“小明说:\“你好\““}
这样子,输出的结果是:小明说:“你好“,而两个转义符号是一次性物品,转了“成为没意义的符号就没了。
那么如果想要在文本显示里显示“\”该怎么办?
很简单,在\前面再加一个\让转义符号转前面的转义符号成为没意义的转义符号,这样子就可以显示了,比如:
{“text“:“\\我去?\\“}
这样子得出来的结果是:
\我去?\
懂了吧,那么你应该也知道怎么输出:
知道吗,转义符号还可以这么用:{“text“:“\\小明:\“你好\“\\“}
了吧?其实很简单:
{“text“:“知道吗,转义符号还可以这么用:{\“text\“:\“\\\\小明:\\\“你好\\\“\\\\\“}“}
那么该怎么换行呢?
可以在转义符号后面添加:
\n(换行)或\r(回车)来换行。
为什么有两个呢?
这就要涉及到计算机的操作系统了。
我们知道,目前为止,世界上有四大系统:
苹果系统(Mac OS、iPai OS、iPhone OS、IOS什么奇奇怪怪的苹果旗下系统都统一为苹果)
安卓系统
Windows
Linux
其中,苹果系统采用的是\r回车符CR代表换行,Winodws采用的是\r和\n都用,Linux采用的是\n换行符LF换行。所以,如果你在Linux上使用\n且运行正常,那么到了苹果上就可能无法识别只显示一个方框里面显示LF两字。苹果系统换Linux也是同理。而\r也是同理。
所以这就是为什么你在Windows上的Minecraft使用\r换行时只会出现一个方框里面有CR两字,这就是因为Windows的Minecraft可能并不支持\r,只能使用\n,可能换到苹果系统上就没问题了,当然由于MinecraftJAVA是使用JAVA编的,JAVA又是全平台,可能是JAVA并不支持\r吧,所以虽然可以选择\r和\n,但最好还是选择\n来换行。
但是你以为这就完了吗?如果你到百度百科上去搜索“转义字符”,找到转义字符词条,那么你就会发现在计算机语言当中,转义字符的作用不止一点:
\a——响铃(BEL)
\b——退格(BS),将当前位置移到前一列
\f——换页(FF),将当前位置移到下页开头
\n——换行(LF),将当前位置移到下一行开头
\r——回车(CR),将当前位置移到本行开头
\t——水平制表(HT)(跳到下一个TAB位置)
\v——垂直制表(VT)
\\——代表一个反斜线字符''\'
\'——代表一个单引号(撇号)字符
\“——代表一个双引号字符
\?——代表一个问号
\0——空字符(NUL)
\ddd——1到3位八进制数所代表的任意字符
\xhh——十六进制所代表的任意字符、
而其中,除了\n、\r、\\、\“和\'(这个也可以用,只不过删了\也是可以的)上面讲过了或有同类的,剩下的其中\b、\f、\t在Minecraft中同样也可以用,只不过和\r一样,实际上游戏并不能识别它们只不过是JSON语法对了而已,实践起来只会显示方框里有BS、FF和HT而已。
张三抱着一堆2147483647级锋利的剑从刷物品房走了出来,看见王五正在拿着纸和笔专心的做笔记,旁边还放着一台正在工作的电脑。
“奇怪了,王五兄不是最讨厌做笔记了吗,怎么今天像换了个人似的。”张三嘀咕着。
好奇心驱使着张三放下了手中的一堆剑,转而走到正在专心写笔记的王五后面。王五似乎并没有注意到张三来到了他的后面,继续在写东西。
在王五后面的张三定睛一看,发现王五的笔记上面写满了各种密密麻麻的单词、数字,好像是什么计算机语言。“没想到王五竟然会对这种东西产生兴趣。”张三想。
突然间王五伸了一个懒腰,把在后面的张三下了一大跳。王五听见后面有动静,转头一看:“唉,张三兄,你怎么在这里?”
张三平静了一下心情,说:“我这不是刚刚做完事情,出来看到你王五兄你今天竟然在学计算机语言,觉得稀奇嘛所以过来看一下。”
说着张三指了指放在门口的那一堆附了魔的下界合金剑。
王五看到张三这么说,不禁觉得好笑,回答道:“唉张三兄,你还是太高估我了,我那点连初中都没上完的头脑,指望着去学计算机语言?”
“嗯?那么你写的是什么东西?”张三听王五这么一说顿时来了兴趣。
“额,这该怎么说呢......哦对了,”说着王五拿起一把下界合金剑,“比如这把剑,它附魔了2147483647级的锋利对吧?你想知道为什么这个等级会超过32767吗?”
“额这个问题不是你最先......”
“我后来加了几个大佬的QQ,和他们仔细研究了好几天,然后我又去某视频平台上看其他大佬制作的教程,还去看了MCBBS的相关文章,同时我还去了MinecraftWiki查找了一下文献,最终的结果没有让我失望,我找到了!”王五得意的说。
“原来在Minecraft1.13版本Mojang把附魔的NBT标签的等级数字类型由short短整型改成了int长整形,自然而然附魔的等级上限就由32767上升到了2147483647!”
“你说什么?”张三听得一头雾水,“这和你写的又有什么关系?”
“有很大的关系,”王五压低了声音,“你知道腐竹是怎么获得这把剑的吗?”
“怎么获得的?快说!”
“用了指令!加上NBT!”
“?”张三头上的雾水更多了,“那然后呢?”
“我在网上找到了一位大佬,他给出了如下指令。”说着王五打开了他的笔记本,并翻到了第一页指了其中一行,“呐,就是这个。”
张三拍散了头上的雾水,然后把目光转向了王五指着的那一行,只见上面写着:
/give @s netherite_sword{“Enchantments“:[{“lvl“:2147483647,“id“:“sharbr /ness“}]}
?
张三头上冒出了个大大的问号:“就是这么简单?”
王五笑着说:“没错,而且这可以直接在聊天栏输入并运行。”
张三虽然不知道为什么王五会笑,但他听王五这么一说,赶紧打开了聊天栏,输入了王五刚刚提供的那个指令,并回车:
[未知的命令
/give @s netherite_sword{“Enchantments“:[{“lvl“:2147483647,“id“:“sharbr /ness“}]}<——此处]
张三:?
王五看张三一脸疑惑的样子,笑得更加的猖狂了:“哦对了哈,张三兄。”
张三以为王五又有什么重要的事情来讲,打起了10倍的精神准备迎接接下来的内容,以免又是一头雾水。
“哪会那么简单啊哈,你只是完成了第一步而已!接下来,你需要找到末地传送门,注意是没激活的!激活的就弄不了了!”王五强忍着笑意装正经说,“然后你需要将一把满耐久的没有附魔的下界合金剑丢进下面的岩浆,静静等待5分钟,这5分钟千万不要动!到点了后你就需要激活传送门,然后跳进去,你就会被传送到一个神秘的房间,这个房间里面放满了神器!我们在管理员手中买到的只不过是最初级的而已,里面还有更加牛批的!”
“真的?”张三现在恨不得立马传送到末地传送门旁边。
“千真万确,我们可是好哥们我咋会骗你呢?不信你可以现在就启程。”
张三听王五这么一说,更加确认了王五说的是真的,毕竟是好哥们嘛。于是他操起一把下界合金剑,就进入了地狱门.......
“哈哈哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈咳~。”