首頁 游戲

Minecraft指令手冊

第一百四十章 真正深入了解NBT-6

Minecraft指令手冊 你好MC 4528 2021-01-02 00:18:41

 ?。ㄕ嬲钊肓私釴BT-6)

  (注意,本章中指出的中文Minecraft Wiki錯誤現(xiàn)已修正)

  在前五章,我們仔細地了解了一下NBT的數(shù)據類型?,F(xiàn)在,我們已經了解得差不多了,那么還剩下什么呢?

  NBT的版本

  ——第三節(jié):NBT的版本

  NBT最早在Indev版本就出現(xiàn)了,但是當時只有0到10這11個標簽可用。

  后來,到了Minecraft Beta1.3,NBT正式有了第一個格式版本:19132

  Minecraft 1.2版本時,Notch引入了Anvil[.mca]文件格式來存儲區(qū)塊,在此之前存儲區(qū)塊的文件格式為Region[.mcr](Minecraft Beta1.3時為存儲區(qū)塊引入的)。而隨著Anvil的引入,NBT的版本正式由19132升級到了19133,雖然只是新加入了一個整形數(shù)組(Int Array:[I])。

  神奇的是,1.12版本時加入Long長整型時并沒有更新NBT格式版本號。

  NBT的版本就是這樣,但它對我們有啥影響呢?

  目前,如果我們要編輯NBT文件,我們除了使用Java版1.13及之后Minecraft內置的SNBT和壓縮后(GZIP壓縮)的NBT文件的轉換器來編輯NBT文件,還可以使用第三方軟件編輯NBT的文件。如果我們使用第三方軟件NBT編輯文件的話,NBT的格式版本此時就有些影響了:

  NBTEdit——19132——Windows

  NBTExplorer——19133——Windows/Mac/Liunx

  NEINedit——19132——Mac

  MineBack Ultimate——19133——Windows

  NBT2YAML——19133——Windows

  webNBT——19133——瀏覽器

  NBT grammar for Synalyze It——19132——Mac

  如上,每個軟件所支持的NBT格式是不同的。只不過,對我們的影響似乎也就這一點。

  ——第四節(jié):SNBT

  上面我有提到一個東西:SNBT,那么SNBT是個什么鬼東西呢?

  其實它并不是一個鬼,而且它并不陌生,我們已經見過它很多很多次了。

  它的全稱就是:String Named Binary Tags(字符串化的二進制命名標簽)

  似乎這么說來還有點陌生。那么就直白點說吧,SNBT就是純文本形式的NBT,且通常用于指令!我們所見到的所有文本形式的NBT都是SNBT!

  ——第五節(jié):NBT?SNBT

  我們現(xiàn)在知道了NBT文件它其實是二進制的,且不同于我們平常所見到的SNBT。那么,我們該怎樣轉化NBT和SNBT呢?

  其實很簡單,上面提到MC社區(qū)里有許多第三方軟件,隨便下一個基本上就可以了。

  但第三方軟件畢竟不是Mojang開發(fā)的。那么Mojang這個官方有開發(fā)嗎?

  答案是肯定的。

  Java版1.13之后,MC服務端就有自帶的數(shù)據生成器。這個數(shù)據生成器有這么幾個功能:

  ①實現(xiàn)NBT(.nbt)?SNBT(.snbt)

 ?、谏稍鏀?shù)據包的全部內容

  ③生成一個列出了所有方塊狀態(tài)、注冊名和完整的原版命令樹的JSON文件

  那么我們該如何啟動它呢?

  很不簡單。首先,我們需要一個Minecraft 1.13版本及以上的服務端,你可以在MCBBS或者是官方啟動器上下載,只不過官方的下載.......你需要一個迅雷。

  下載完后,你可以直接粗暴地雙擊server.jar(服務端),你也可以按照作品相關里的教程自己創(chuàng)建一個.bat文件方便打開:

  @echo off

  color 0

  title A Minecraft Server

  java -Xms2g -Xmx2g -jar server.jar pause

  如果你打開不了,那有3種可能:

  1.你抄錯了上面的指令(方法:細心檢查)

  2.你未安裝JAVA(方法:安裝一個JAVA 8)

  3.你安了個32位的JAVA(方法:卸了,重新裝一個64位的JAVA 8,或把-Xms2g -Xmx2g調成-Xms1g -Xmx1g)

 ?。〞粫腥舜蜷_不了,發(fā)現(xiàn)沒安JAVA,于是下了個32位的JAVA 10,只不過不是脫機的,然后嫌下載慢隨便在網上找了一個。結果JAVA安好了,捆綁軟件也一大堆,瀏覽器主頁還被改了。再次打開仍然打開不了,于是刪了Java 10,去下了個64位的Java 10,這次聰明用脫機。結果發(fā)現(xiàn)系統(tǒng)是32位,不知道怎么弄,弄來弄去還差點把Windows換成了Mac。最后重新買了一臺裝了64位的Windows系統(tǒng)電腦,花了998$。安了64bit JAVA 10,再次打開,發(fā)現(xiàn)還是打開不了。然后才了解到MC是JAVA8的,于是下了Java 8 64bit脫機,結果仍然打不開。最后終于發(fā)現(xiàn)原來打成了:

  @echo off

  color 0

  title A Minecraft Server

  java -Xms2g -Xmx2g -jar server pause)

  回到正題。

  按照作品相關里的教程,我們配置好服務器后(實際上不用配置也可以),這樣子做:

  首先,打開命令提示符(Windows)或終端(Mac)

  打開方法這里就不多敘述了。

  然后復制這一串代碼:

  java -cp server.jar net.minecraft.data.Main

  復制粘貼進去不要立刻執(zhí)行,因為這毛用都沒有,還會顯示:

  (Windows)

  錯誤:找不到或無法加載主類 net.minecraft.data.Main

 ?。∕ac)

  錯誤:找不到或無法加載主類 net.minecraft.data.Main

  原因: java.lang.ClassNotFoundException: net.minecraft.data.Main

  那么該怎么辦呢?

  其實很簡單,你直接輸入進去這系統(tǒng)壓根就找不到server.jar這個文件,所以,這里你就要這樣子:

  打開你的server.jar所在的文件位置,然后直接把整個server.jar文件拖進去,你就會發(fā)現(xiàn)系統(tǒng)自動給你輸入了server.jar的路徑。

  現(xiàn)在好了,你只需要用這段路徑替換原來的server.jar,比如你的server.jar路徑是:

  D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar(Windows)

  /Users/block/Desktop/桌面文件/Server/server.jar(Mac)

  那么你替換之后,就會變成這個樣子:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main(Windows)

  java -cp /Users/block/Desktop/桌面文件/Server/server.jar net.minecraft.data.Main(Mac)

  現(xiàn)在,執(zhí)行,你就成功——走出了第一步。系統(tǒng)找到了這個server.jar,并執(zhí)行了指令,只要你這個server.jar是1.13版本及以上的,那么就會跳出:

  Option Description

  -----------------

  --all Include all generators

  --client Include client generators

  --dev Include development tools

  --help Show the help menu

  --input<String> Input folder

  --output<String> Output folder (default: generated)

  --reports Include data reports

  --server Include server generators

  這是啥意思呢?我們把這一大串放到生草機里去攪拌一下,就會得到:

  選項說明

  -----------------

  --全部

  包括所有發(fā)電機

  --客戶

  包括客戶端生成器

  --開發(fā)

  包括開發(fā)工具

  --救命

  顯示幫助菜單

  --輸入

  輸入文件夾

  --輸出

  輸出文件夾(默認:生成)

  --報告

  包括數(shù)據報告

  --服務器

  包括服務器生成器

  差不多可以看出一些端倪,只不過這仍然太生草了。所以我們需要上一下Minecraft Wiki,得出這些東西的具體用途是:

  --all 生成原版數(shù)據包

  --client 生成assets/minecraft文件夾,包含blockstates和models文件夾

  --dev 用于NBT文件和SNBT文件的相互轉換[需要驗證]

  --help 顯示選項和描述列表

  --input 輸入含有nbt或snbt文件的文件夾

  --output 規(guī)定輸出的目標文件夾,若目標文件夾不存在則自動新建該文件夾(默認為generated)

  --reports 生成reports文件夾,包含biomes文件夾和blocks、commands、registries三個JSON文件

  --server 生成data/minecraft文件夾,包含advancements、loot_tables、recipes、tags四個文件夾

  --validate [需要更多信息]

  現(xiàn)在我們可以嘗試生成一個原版的數(shù)據包,這就需要在控制臺上輸入:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --all(沒錯,只需要在原本的后面加上你要執(zhí)行的指令就可以了),回車運行。

  然后你就會發(fā)現(xiàn)出現(xiàn)了一大串的信息。

  接著,到目錄去查看......

  反正作者這邊什么東西也沒有生成。Minecraft Wiki上還寫著:

  原版數(shù)據包(pack.mcmeta文件除外)將生成在當前文件夾的generated目錄中。

  難不成是打開方式不對?

  來試試其他的功能吧,比如這個--help,看一下會有什么幫助:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --help

  結果......還是這個界面:

  Option Description

  -----------------

  --all Include all generators

  --client Include client generators

  --dev Include development tools

  --help Show the help menu

  --input Input folder

  --output Output folder (default: generated)

  --reports Include data reports

  --server Include server generators

  就很離譜。

  對了,我們最開始不是要轉換文件的嗎?咋弄成這個了?

  好,那現(xiàn)在我們就開始嘗試一下--dev:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --dev --input“D:\Minecraft\Minecraft Server\1.13.2\world“

  然后......

  實際上這是一個錯誤的做法。正確的做法應該這樣子:

  在服務端這個目錄創(chuàng)建一個新的文件夾(實際上也不用創(chuàng)建,創(chuàng)建只是為了更好的把要轉換的文件集中起來),并將其取名為:input

  然后,找到實際上是以NBT存儲的.dat的文件(比如world下的level.dat),將它們丟進去。

  接下來,改這些文件的后綴.dat為.nbt。

  最后,最重要的一點,執(zhí)行:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --dev --input “D:\Minecraft\Minecraft Server\1.13.2\input“

 ?。ㄗ⒁?,空格一定要空,作者最開始時就是少了一個空格,然后就是一堆問題!特別是--input和后面的文件夾路徑中間一定要空!這是個坑?。?p>  然后,當出現(xiàn):

  [xx:xx:xx][main/INFO]: Starting provider: NBT to SNBT

  [xx:xx:xx][main/INFO]: Converted level from NBT to SNBT

  [xx:xx:xx][main/INFO]: NBT to SNBT finished after xxx ms

  恭喜你!你成功了!

  但轉換后的文件去哪了呢?

  答案很簡單:

  C:\Users\XXXXX\generated(Windows)

  /Users/XXXXXX/generated(Mac)

  找到這個目錄,你就會發(fā)現(xiàn)了自己期待已久的:

  .snbt!

  這個文件你現(xiàn)在可以用記事本來打開并修改了。

  但現(xiàn)在問題又來了,我們現(xiàn)在可以使用dev來進行.nbt→.snbt,那該怎么.nbt←.snbt呢?

  很簡單。我們把剛才弄出來的.snbt文件再放進input文件夾,順便刪掉那個.nbt。再度執(zhí)行:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --dev --input “D:\Minecraft\Minecraft Server\1.13.2\input“

  然后你就會發(fā)現(xiàn)這不行。

  為啥呢?Minecraft Wiki上說:

  用于NBT文件和SNBT文件的相互轉換[需要驗證]

  很明顯這里錯了,--dev只能是.nbt→.snbt,并不能.nbt←.snbt。

  那該怎么辦呢?

  使用--client:

  java -cp D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服務端.jar net.minecraft.data.Main --client --input “D:\Minecraft\Minecraft Server\1.13.2\input“

  然后:

  [xx:xx:xx][main/INFO]: Starting provider: SNBT -> NBT

  [xx:xx:xx][main/INFO]: SNBT -> NBT finished after xxx ms

  Minecraft Wiki上這樣介紹--client:

  生成assets/minecraft文件夾,包含blockstates和models文件夾

  很明顯這句話完全錯誤(來自2021-8-5的注:實際上并不是完全錯誤,確實有這功能,只不過還附帶了.nbt←.snbt的功能)。實際上,--client的作用就是.nbt←.snbt?,F(xiàn)在你打開generated,你就會發(fā)現(xiàn).snbt重新被轉換成了.nbt。

  現(xiàn)在我們知道了--dev是.nbt→.snbt,--client是.nbt←.snbt,也發(fā)現(xiàn)了Minecraft Wiki中的錯誤。剩下的內容,我們就以后再研究了,畢竟剩下的不是本章的重點。

  OK那么NBT就講到這了。我們下一章再見。

按 “鍵盤左鍵←” 返回上一章  按 “鍵盤右鍵→” 進入下一章  按 “空格鍵” 向下滾動
目錄
目錄
設置
設置
書架
加入書架
書頁
返回書頁
指南