第一百二十三章 JSON的內(nèi)容 下
我們上一章講到了translate,也就是翻譯。我們可以使用游戲里自帶的翻譯標(biāo)識(shí)符來達(dá)成翻譯的效果。
我們在第六十章,基巖版的JSON文本中,講到了translate,也就是翻譯。我們可以使用游戲里自帶的語言文件名稱來達(dá)成翻譯的效果。
等等,是不是有什么不對(duì)的地方?
這兩個(gè)竟然作用一模一樣!連元素名都長得一模一樣!等等,基巖版的translate還有帶一個(gè)with參數(shù),那么難不成.......
沒錯(cuò)!在JAVA版的JSON的translate,也有一個(gè)附加的with參數(shù),作用也和基巖版一樣。
唉不對(duì),有一點(diǎn)不一樣,就是格式和替換符號(hào)不一樣。
在JAVA版的JSON里,with可以識(shí)別translate里的%s(下一個(gè)參數(shù))和%1$s(第一個(gè)參數(shù)),其中%1$s中的1可以替換為其他的數(shù)字,這個(gè)數(shù)字代表著顯示第幾個(gè)參數(shù)。
而with的格式是這樣的:
[{“with“:[{原始JSON文本},對(duì)象]}]
等等?這不就是?套娃?
沒錯(cuò),這的確是可以套娃的:
[{“with“:[{“with“:[{“with“:[{“with“:[{“with“:[{“with“:[{......}]}]}]}]}]}]}]
而這個(gè)with本身的內(nèi)容是一個(gè)列表,按從左到右排列,所以使用%s,第一個(gè)%s顯示第一個(gè),第二個(gè)%s顯示第二個(gè),第三個(gè)%s顯示第三個(gè),以此類推。
那么這個(gè)with到底有什么用?對(duì)哦,作者在第六十章沒講明白唉。那么這里講明白吧。
with的作用,就是可以在translate里插入一段固定的文字,不會(huì)因?yàn)檎Z言的變化而變化。
那么現(xiàn)在來舉個(gè)例子,比如我們要弄一段文字:
<豬>你當(dāng)我是豬嗎?
而其中,“豬”是要翻譯的,如果我們只能使用with和translate,就可以這么做:
{“translate“:“%s%s%s%s“,“with“:[“<“,{“translate“:“entity.minecraft.pig“},“>“,“你當(dāng)我是豬嗎?“]}
這樣子最終得出來的結(jié)果是這樣的:
<豬>你當(dāng)我是豬嗎?
如果調(diào)成英文那么是這樣的:
<Pig>你當(dāng)我是豬嗎?
可能有人已經(jīng)注意到了,作者并沒有直接把entity.minecraft.pig放在第一個(gè)translate里,而是把它放在了with里。這是為什么?
很簡單,放第一個(gè)translate游戲就識(shí)別不出來了,因?yàn)槲覀冞€有%s這些干擾項(xiàng),所以我們只能放出來。
但是如果我的讀者里面有外國人,那么這群外國人肯定會(huì)表示對(duì)這條指令不太滿意,因?yàn)樗麄冋J(rèn)為說的話里面的“豬”字也可以翻譯成英文,那么這該怎么辦呢?
很簡單,可以修改上面的指令變成:、
{“translate“:“%s%s%s%s%2$s%s“,“with“:[“<“,{“translate“:“entity.minecraft.pig“},“>“,“你當(dāng)我是“,“嗎?“]}
然后把游戲調(diào)成英文,再運(yùn)行一次:
<Pig>你當(dāng)我是Pig嗎?
好了,現(xiàn)在這群外國人都已經(jīng)表示對(duì)這條指令滿意了,但是他們對(duì)其喜歡的主播造的橋仍然非常不滿意,于是作者為了讓這群外國人徹底滿意,就造出了一個(gè)橋,這個(gè)橋可以方便河兩岸的村民非?!氨憬荨钡膩硗灰?,這群外國人看到我造的橋特別滿意,于是每人隨手就給了我這本書投了一張推薦票。
好了,這就是translate的全部了,但這不是JSON內(nèi)容元素的全部。在JSON里,還有一個(gè)和translate類似的元素,那就是keybind內(nèi)容元素。
格式和translate差不多,都是要填標(biāo)識(shí)符。而translate是翻譯標(biāo)識(shí)符,keybind是按鍵標(biāo)識(shí)符。
這有什么用?keybind的作用就在于可以非常方便的顯示出游戲的按鍵,把服務(wù)器做得高大上起來。特別是使用keybind,還可以制作出一個(gè)很簡單的新手教程。
而且其顯示內(nèi)容也會(huì)隨著玩家在設(shè)置里更改而更改。
比如:
{“keybind“:“key.inventory“}就是顯示游戲打開背包的按鍵,如果玩家沒有更改,使用默認(rèn)設(shè)置,那么將會(huì)顯示e。
是不是很簡單?對(duì),但是標(biāo)識(shí)符找起來就難了。
為何?如果你去MinecraftWiki找到對(duì)應(yīng)的內(nèi)容,你會(huì)發(fā)現(xiàn)其“鍵位標(biāo)識(shí)符”指向了“控制”詞條,而這個(gè)詞條壓根兒就沒有鍵位標(biāo)識(shí)符。
MinecraftWiki沒有,那么該去哪找呢?
2020年初,MinecraftWiki為了方便中國大陸的用戶查找資料,分別在Bilibili和網(wǎng)易分別設(shè)立了鏡像,網(wǎng)址分別是:
嗶哩嗶哩:wiki.biligame.com/mc/Minecraft_Wiki
網(wǎng)易:mc.163.com/wikigrab/
而嗶哩嗶哩就是一個(gè)真的鏡像映射,內(nèi)容還是Minecraft Wiki。
而網(wǎng)易就不一樣了,還專門重新寫了一個(gè)界面。但是在其他人看來,網(wǎng)易的這波操作讓該MinecraftWiki從有用到有個(gè)錘子用來了一個(gè)一百八十度大反轉(zhuǎn),其他人寧愿去嗶哩嗶哩,也不愿去看看網(wǎng)易的鏡像站。
那么網(wǎng)易的鏡像站就真的沒用了嗎?還真不一定。
在網(wǎng)易的Minecraft Wiki首頁點(diǎn)擊“游戲內(nèi)容”,往下拉一下,你就會(huì)發(fā)現(xiàn)了一個(gè)新的大陸:原創(chuàng)教程!
實(shí)際上這些教程是從Minecraft WIKI那里搬過來的,但網(wǎng)易把其放在了最醒目的地方,加上界面UI的優(yōu)化,使我們可以很容易找到這里。
其中,有一篇教程叫做原始JSON文本,里面詳細(xì)的說明了原始JSON文本的各個(gè)元素,就在這里,我們就可以找到原版的大部分鍵位標(biāo)識(shí)符:
key.forward——向前移動(dòng)——W
key.left——向左移動(dòng)——A
key.right——向右移動(dòng)——D
key.back——向后移動(dòng)——S
key.sneak——潛行——左Shift
key.sprint——疾跑——左ctrl
key.jump——跳躍——space
key.use——使用物品|放置方塊——鼠標(biāo)右鍵
key.attack——攻擊|摧毀——鼠標(biāo)左鍵
key.pickItem——選取方塊——鼠標(biāo)中鍵
key.drop——丟棄所選物品——Q
key.swapHands——交換副手和主手中的物品——F
key.inventory——開啟|關(guān)閉物品欄——E
key.hotbar.[1~9]——快捷欄1到9——1~9
key.saveToolbarActivator——保存物品工具欄——C
key.loadToolbarActivator——加載物品工具欄——X
key.chat——打開聊天欄——T
key.playerlist——玩家列表——Tab
key.command——輸入命令——/
key.fullscreen——全屏顯示切換——F11
key.smoothCamera——切換電影視角——無默認(rèn)按鍵
key.togglePerspective——切換視角——F5
key.screenshot——截圖——F2
key.advancements——進(jìn)度——L
key.spectatorOutlines——高亮旁觀者玩家——無默認(rèn)按鍵
keybind也完了,那么內(nèi)容完了沒有?
還沒完,但也快完了,只剩最后一個(gè):nbt。
nbt也是一個(gè)內(nèi)容元素,使用nbt,可以讀取指定實(shí)體、方塊或命令存儲(chǔ)的NBT其中的某個(gè)值,并把它顯示出來,比如直接顯示出一個(gè)玩家的經(jīng)驗(yàn)值,或者是一頭阿米驢的血量——哦不!阿米驢被服務(wù)器的防刷物品裝置清除了!阿——米——驢——!
只不過這個(gè)內(nèi)容,我們就放到接下來講NBT時(shí)再講吧。
(嘿,作者,JSON怎么換行???)
額,這個(gè)......
“\”這個(gè)符號(hào)叫做“反斜杠”,和“正斜杠”(/)是相反的。在計(jì)算機(jī)語言中,反斜杠通常叫做“轉(zhuǎn)義符號(hào)”,而在轉(zhuǎn)義符號(hào)后面添加一些數(shù)字或字母,是可以有特殊作用的。而JSON本身作為JAVA的一部分,自然而然也可以使用轉(zhuǎn)義符號(hào)。
比如要顯示英文的引號(hào),可以在英文的引號(hào)前面加上一個(gè)\,讓其失去意義,比如:
{“text“:“小明說:\“你好\““}
這樣子,輸出的結(jié)果是:小明說:“你好“,而兩個(gè)轉(zhuǎn)義符號(hào)是一次性物品,轉(zhuǎn)了“成為沒意義的符號(hào)就沒了。
那么如果想要在文本顯示里顯示“\”該怎么辦?
很簡單,在\前面再加一個(gè)\讓轉(zhuǎn)義符號(hào)轉(zhuǎn)前面的轉(zhuǎn)義符號(hào)成為沒意義的轉(zhuǎn)義符號(hào),這樣子就可以顯示了,比如:
{“text“:“\\我去?\\“}
這樣子得出來的結(jié)果是:
\我去?\
懂了吧,那么你應(yīng)該也知道怎么輸出:
知道嗎,轉(zhuǎn)義符號(hào)還可以這么用:{“text“:“\\小明:\“你好\“\\“}
了吧?其實(shí)很簡單:
{“text“:“知道嗎,轉(zhuǎn)義符號(hào)還可以這么用:{\“text\“:\“\\\\小明:\\\“你好\\\“\\\\\“}“}
那么該怎么換行呢?
可以在轉(zhuǎn)義符號(hào)后面添加:
\n(換行)或\r(回車)來換行。
為什么有兩個(gè)呢?
這就要涉及到計(jì)算機(jī)的操作系統(tǒng)了。
我們知道,目前為止,世界上有四大系統(tǒng):
蘋果系統(tǒng)(Mac OS、iPai OS、iPhone OS、IOS什么奇奇怪怪的蘋果旗下系統(tǒng)都統(tǒng)一為蘋果)
安卓系統(tǒng)
Windows
Linux
其中,蘋果系統(tǒng)采用的是\r回車符CR代表換行,Winodws采用的是\r和\n都用,Linux采用的是\n換行符LF換行。所以,如果你在Linux上使用\n且運(yùn)行正常,那么到了蘋果上就可能無法識(shí)別只顯示一個(gè)方框里面顯示LF兩字。蘋果系統(tǒng)換Linux也是同理。而\r也是同理。
所以這就是為什么你在Windows上的Minecraft使用\r換行時(shí)只會(huì)出現(xiàn)一個(gè)方框里面有CR兩字,這就是因?yàn)閃indows的Minecraft可能并不支持\r,只能使用\n,可能換到蘋果系統(tǒng)上就沒問題了,當(dāng)然由于MinecraftJAVA是使用JAVA編的,JAVA又是全平臺(tái),可能是JAVA并不支持\r吧,所以雖然可以選擇\r和\n,但最好還是選擇\n來換行。
但是你以為這就完了嗎?如果你到百度百科上去搜索“轉(zhuǎn)義字符”,找到轉(zhuǎn)義字符詞條,那么你就會(huì)發(fā)現(xiàn)在計(jì)算機(jī)語言當(dāng)中,轉(zhuǎn)義字符的作用不止一點(diǎn):
\a——響鈴(BEL)
\b——退格(BS),將當(dāng)前位置移到前一列
\f——換頁(FF),將當(dāng)前位置移到下頁開頭
\n——換行(LF),將當(dāng)前位置移到下一行開頭
\r——回車(CR),將當(dāng)前位置移到本行開頭
\t——水平制表(HT)(跳到下一個(gè)TAB位置)
\v——垂直制表(VT)
\\——代表一個(gè)反斜線字符''\'
\'——代表一個(gè)單引號(hào)(撇號(hào))字符
\“——代表一個(gè)雙引號(hào)字符
\?——代表一個(gè)問號(hào)
\0——空字符(NUL)
\ddd——1到3位八進(jìn)制數(shù)所代表的任意字符
\xhh——十六進(jìn)制所代表的任意字符、
而其中,除了\n、\r、\\、\“和\'(這個(gè)也可以用,只不過刪了\也是可以的)上面講過了或有同類的,剩下的其中\(zhòng)b、\f、\t在Minecraft中同樣也可以用,只不過和\r一樣,實(shí)際上游戲并不能識(shí)別它們只不過是JSON語法對(duì)了而已,實(shí)踐起來只會(huì)顯示方框里有BS、FF和HT而已。
張三抱著一堆2147483647級(jí)鋒利的劍從刷物品房走了出來,看見王五正在拿著紙和筆專心的做筆記,旁邊還放著一臺(tái)正在工作的電腦。
“奇怪了,王五兄不是最討厭做筆記了嗎,怎么今天像換了個(gè)人似的?!睆埲止局?。
好奇心驅(qū)使著張三放下了手中的一堆劍,轉(zhuǎn)而走到正在專心寫筆記的王五后面。王五似乎并沒有注意到張三來到了他的后面,繼續(xù)在寫東西。
在王五后面的張三定睛一看,發(fā)現(xiàn)王五的筆記上面寫滿了各種密密麻麻的單詞、數(shù)字,好像是什么計(jì)算機(jī)語言?!皼]想到王五竟然會(huì)對(duì)這種東西產(chǎn)生興趣?!睆埲?。
突然間王五伸了一個(gè)懶腰,把在后面的張三下了一大跳。王五聽見后面有動(dòng)靜,轉(zhuǎn)頭一看:“唉,張三兄,你怎么在這里?”
張三平靜了一下心情,說:“我這不是剛剛做完事情,出來看到你王五兄你今天竟然在學(xué)計(jì)算機(jī)語言,覺得稀奇嘛所以過來看一下?!?p> 說著張三指了指放在門口的那一堆附了魔的下界合金劍。
王五看到張三這么說,不禁覺得好笑,回答道:“唉張三兄,你還是太高估我了,我那點(diǎn)連初中都沒上完的頭腦,指望著去學(xué)計(jì)算機(jī)語言?”
“嗯?那么你寫的是什么東西?”張三聽王五這么一說頓時(shí)來了興趣。
“額,這該怎么說呢......哦對(duì)了,”說著王五拿起一把下界合金劍,“比如這把劍,它附魔了2147483647級(jí)的鋒利對(duì)吧?你想知道為什么這個(gè)等級(jí)會(huì)超過32767嗎?”
“額這個(gè)問題不是你最先......”
“我后來加了幾個(gè)大佬的QQ,和他們仔細(xì)研究了好幾天,然后我又去某視頻平臺(tái)上看其他大佬制作的教程,還去看了MCBBS的相關(guān)文章,同時(shí)我還去了MinecraftWiki查找了一下文獻(xiàn),最終的結(jié)果沒有讓我失望,我找到了!”王五得意的說。
“原來在Minecraft1.13版本Mojang把附魔的NBT標(biāo)簽的等級(jí)數(shù)字類型由short短整型改成了int長整形,自然而然附魔的等級(jí)上限就由32767上升到了2147483647!”
“你說什么?”張三聽得一頭霧水,“這和你寫的又有什么關(guān)系?”
“有很大的關(guān)系,”王五壓低了聲音,“你知道腐竹是怎么獲得這把劍的嗎?”
“怎么獲得的?快說!”
“用了指令!加上NBT!”
“?”張三頭上的霧水更多了,“那然后呢?”
“我在網(wǎng)上找到了一位大佬,他給出了如下指令?!闭f著王五打開了他的筆記本,并翻到了第一頁指了其中一行,“吶,就是這個(gè)?!?p> 張三拍散了頭上的霧水,然后把目光轉(zhuǎn)向了王五指著的那一行,只見上面寫著:
/give @s netherite_sword{“Enchantments“:[{“l(fā)vl“:2147483647,“id“:“sharpness“}]}
?。?p> 張三頭上冒出了個(gè)大大的問號(hào):“就是這么簡單?”
王五笑著說:“沒錯(cuò),而且這可以直接在聊天欄輸入并運(yùn)行?!?p> 張三雖然不知道為什么王五會(huì)笑,但他聽王五這么一說,趕緊打開了聊天欄,輸入了王五剛剛提供的那個(gè)指令,并回車:
[未知的命令
/give @s netherite_sword{“Enchantments“:[{“l(fā)vl“:2147483647,“id“:“sharpness“}]}<——此處]
張三:?
王五看張三一臉疑惑的樣子,笑得更加的猖狂了:“哦對(duì)了哈,張三兄?!?p> 張三以為王五又有什么重要的事情來講,打起了10倍的精神準(zhǔn)備迎接接下來的內(nèi)容,以免又是一頭霧水。
“哪會(huì)那么簡單啊哈,你只是完成了第一步而已!接下來,你需要找到末地傳送門,注意是沒激活的!激活的就弄不了了!”王五強(qiáng)忍著笑意裝正經(jīng)說,“然后你需要將一把滿耐久的沒有附魔的下界合金劍丟進(jìn)下面的巖漿,靜靜等待5分鐘,這5分鐘千萬不要?jiǎng)?!到點(diǎn)了后你就需要激活傳送門,然后跳進(jìn)去,你就會(huì)被傳送到一個(gè)神秘的房間,這個(gè)房間里面放滿了神器!我們在管理員手中買到的只不過是最初級(jí)的而已,里面還有更加牛批的!”
“真的?”張三現(xiàn)在恨不得立馬傳送到末地傳送門旁邊。
“千真萬確,我們可是好哥們我咋會(huì)騙你呢?不信你可以現(xiàn)在就啟程?!?p> 張三聽王五這么一說,更加確認(rèn)了王五說的是真的,畢竟是好哥們嘛。于是他操起一把下界合金劍,就進(jìn)入了地獄門.......
“哈哈哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈咳~?!?