首页 男生 游戏竞技 Minecraft指令手册

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

Minecraft指令手册 你好MC 7947 2024-07-09 15:29

  (真正深入了解NBT-6)

  (注意,本章中指出的中文Minecraft Wiki错误现已修正)

  在前五章,我们仔细地了解了一下NBT的数据类型。现在,我们已经了解得差不多了,那么还剩下什么呢?

  NBT的版本

  ——第三节:NBT的版本

  NBT最早在Indev版本就出现了,但是当时只有0到10这11个标签可用。

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

  Minecraft 1.2版本时,Notch引入了Anvil[.mca]文件格式来存储区块,在此之前存储区块的文件格式为Region[.mcr](Minecraft Beta1.3时为存储区块引入的)。而随着Anvil的引入,NBT的版本正式由19132升级到了19133,虽然只是新加入了一个整形数组(Int Array:[I])。

  神奇的是,1.12版本时加入Long长整型时并没有更新NBT格式版本号。

  NBT的版本就是这样,但它对我们有啥影响呢?

  目前,如果我们要编辑NBT文件,我们除了使用Java版1.13及之后Minecraft内置的SNBT和压缩后(GZIP压缩)的NBT文件的转换器来编辑NBT文件,还可以使用第三方软件编辑NBT的文件。如果我们使用第三方软件NBT编辑文件的话,NBT的格式版本此时就有些影响了:

  NBTEdit——19132——Windows

  NBTExbr /lorer——19133——Windows/Mac/Liunx

  NEINedit——19132——Mac

  MineBack Ultimate——19133——Windows

  NBT2YAML——19133——Windows

  webNBT——19133——浏览器

  NBT grammar for Synalyze It——19132——Mac

  如上,每个软件所支持的NBT格式是不同的。只不过,对我们的影响似乎也就这一点。

  ——第四节:SNBT

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

  其实它并不是一个鬼,而且它并不陌生,我们已经见过它很多很多次了。

  它的全称就是:String Named Binary Tags(字符串化的二进制命名标签)

  似乎这么说来还有点陌生。那么就直白点说吧,SNBT就是纯文本形式的NBT,且通常用于指令!我们所见到的所有文本形式的NBT都是SNBT!

  ——第五节:NBT⇄SNBT

  我们现在知道了NBT文件它其实是二进制的,且不同于我们平常所见到的SNBT。那么,我们该怎样转化NBT和SNBT呢?

  其实很简单,上面提到MC社区里有许多第三方软件,随便下一个基本上就可以了。

  但第三方软件毕竟不是Mojang开发的。那么Mojang这个官方有开发吗?

  答案是肯定的。

  Java版1.13之后,MC服务端就有自带的数据生成器。这个数据生成器有这么几个功能:

  ①实现NBT(.nbt)⇄SNBT(.snbt)

  ②生成原版数据包的全部内容

  ③生成一个列出了所有方块状态、注册名和完整的原版命令树的JSON文件

  那么我们该如何启动它呢?

  很不简单。首先,我们需要一个Minecraft 1.13版本及以上的服务端,你可以在MCBBS或者是官方启动器上下载,只不过官方的下载.......你需要一个迅雷。

  下载完后,你可以直接粗暴地双击server.jar(服务端),你也可以按照作品相关里的教程自己创建一个.bat文件方便打开:

  @echo off

  color 0

  title A Minecraft Server

  java -Xms2g -Xmx2g -jar server.jar br /ause

  如果你打开不了,那有3种可能:

  1.你抄错了上面的指令(方法:细心检查)

  2.你未安装JAVA(方法:安装一个JAVA 8)

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

  (会不会有人打开不了,发现没安JAVA,于是下了个32位的JAVA 10,只不过不是脱机的,然后嫌下载慢随便在网上找了一个。结果JAVA安好了,捆绑软件也一大堆,浏览器主页还被改了。再次打开仍然打开不了,于是删了Java 10,去下了个64位的Java 10,这次聪明用脱机。结果发现系统是32位,不知道怎么弄,弄来弄去还差点把Windows换成了Mac。最后重新买了一台装了64位的Windows系统电脑,花了998$。安了64bit JAVA 10,再次打开,发现还是打开不了。然后才了解到MC是JAVA8的,于是下了Java 8 64bit脱机,结果仍然打不开。最后终于发现原来打成了:

  @echo off

  color 0

  title A Minecraft Server

  java -Xms2g -Xmx2g -jar server br /ause)

  回到正题。

  按照作品相关里的教程,我们配置好服务器后(实际上不用配置也可以),这样子做:

  首先,打开命令提示符(Windows)或终端(Mac)

  打开方法这里就不多叙述了。

  然后复制这一串代码:

  java -cbr / server.jar net.minecraft.data.Main

  复制粘贴进去不要立刻执行,因为这毛用都没有,还会显示:

  (Windows)

  错误:找不到或无法加载主类 net.minecraft.data.Main

  (Mac)

  错误:找不到或无法加载主类 net.minecraft.data.Main

  原因: java.lang.ClassNotFoundExcebr /tion: net.minecraft.data.Main

  那么该怎么办呢?

  其实很简单,你直接输入进去这系统压根就找不到server.jar这个文件,所以,这里你就要这样子:

  打开你的server.jar所在的文件位置,然后直接把整个server.jar文件拖进去,你就会发现系统自动给你输入了server.jar的路径。

  现在好了,你只需要用这段路径替换原来的server.jar,比如你的server.jar路径是:

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

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

  那么你替换之后,就会变成这个样子:

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

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

  现在,执行,你就成功——走出了第一步。系统找到了这个server.jar,并执行了指令,只要你这个server.jar是1.13版本及以上的,那么就会跳出:

  Obr /tion Describr /tion

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

  --all Include all generators

  --client Include client generators

  --dev Include develobr /ment tools

  --helbr / Show the helbr / menu

  --inbr /ut&ambr /;ambr /;ambr /;lt;String&ambr /;ambr /;ambr /;gt; Inbr /ut folder

  --outbr /ut&ambr /;ambr /;ambr /;lt;String&ambr /;ambr /;ambr /;gt; Outbr /ut folder (default: generated)

  --rebr /orts Include data rebr /orts

  --server Include server generators

  这是啥意思呢?我们把这一大串放到生草机里去搅拌一下,就会得到:

  选项说明

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

  --全部

  包括所有发电机

  --客户

  包括客户端生成器

  --开发

  包括开发工具

  --救命

  显示帮助菜单

  --输入

  输入文件夹

  --输出

  输出文件夹(默认:生成)

  --报告

  包括数据报告

  --服务器

  包括服务器生成器

  差不多可以看出一些端倪,只不过这仍然太生草了。所以我们需要上一下Minecraft Wiki,得出这些东西的具体用途是:

  --all 生成原版数据包

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

  --dev 用于NBT文件和SNBT文件的相互转换[需要验证]

  --helbr / 显示选项和描述列表

  --inbr /ut 输入含有nbt或snbt文件的文件夹

  --outbr /ut 规定输出的目标文件夹,若目标文件夹不存在则自动新建该文件夹(默认为generated)

  --rebr /orts 生成rebr /orts文件夹,包含biomes文件夹和blocks、commands、registries三个JSON文件

  --server 生成data/minecraft文件夹,包含advancements、loot_tables、recibr /es、tags四个文件夹

  --validate [需要更多信息]

  现在我们可以尝试生成一个原版的数据包,这就需要在控制台上输入:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --all(没错,只需要在原本的后面加上你要执行的指令就可以了),回车运行。

  然后你就会发现出现了一大串的信息。

  接着,到目录去查看......

  反正作者这边什么东西也没有生成。Minecraft Wiki上还写着:

  原版数据包(br /ack.mcmeta文件除外)将生成在当前文件夹的generated目录中。

  难不成是打开方式不对?

  来试试其他的功能吧,比如这个--helbr /,看一下会有什么帮助:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --helbr /

  结果......还是这个界面:

  Obr /tion Describr /tion

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

  --all Include all generators

  --client Include client generators

  --dev Include develobr /ment tools

  --helbr / Show the helbr / menu

  --inbr /ut Inbr /ut folder

  --outbr /ut Outbr /ut folder (default: generated)

  --rebr /orts Include data rebr /orts

  --server Include server generators

  就很离谱。

  对了,我们最开始不是要转换文件的吗?咋弄成这个了?

  好,那现在我们就开始尝试一下--dev:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --dev --inbr /ut“D:\Minecraft\Minecraft Server\1.13.2\world“

  然后......

  实际上这是一个错误的做法。正确的做法应该这样子:

  在服务端这个目录创建一个新的文件夹(实际上也不用创建,创建只是为了更好的把要转换的文件集中起来),并将其取名为:inbr /ut

  然后,找到实际上是以NBT存储的.dat的文件(比如world下的level.dat),将它们丢进去。

  接下来,改这些文件的后缀.dat为.nbt。

  最后,最重要的一点,执行:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --dev --inbr /ut “D:\Minecraft\Minecraft Server\1.13.2\inbr /ut“

  (注意,空格一定要空,作者最开始时就是少了一个空格,然后就是一堆问题!特别是--inbr /ut和后面的文件夹路径中间一定要空!这是个坑!)

  然后,当出现:

  [xx:xx:xx][main/INFO]: Starting br /rovider: 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)

  找到这个目录,你就会发现了自己期待已久的:

  .snbt!

  这个文件你现在可以用记事本来打开并修改了。

  但现在问题又来了,我们现在可以使用dev来进行.nbt→.snbt,那该怎么.nbt←.snbt呢?

  很简单。我们把刚才弄出来的.snbt文件再放进inbr /ut文件夹,顺便删掉那个.nbt。再度执行:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --dev --inbr /ut “D:\Minecraft\Minecraft Server\1.13.2\inbr /ut“

  然后你就会发现这不行。

  为啥呢?Minecraft Wiki上说:

  用于NBT文件和SNBT文件的相互转换[需要验证]

  很明显这里错了,--dev只能是.nbt→.snbt,并不能.nbt←.snbt。

  那该怎么办呢?

  使用--client:

  java -cbr / D:\Minecraft\Minecraft Server\1.13.2\我的世界1.13.2官方服务端.jar net.minecraft.data.Main --client --inbr /ut “D:\Minecraft\Minecraft Server\1.13.2\inbr /ut“

  然后:

  [xx:xx:xx][main/INFO]: Starting br /rovider: SNBT -&ambr /;ambr /;ambr /;gt; NBT

  [xx:xx:xx][main/INFO]: SNBT -&ambr /;ambr /;ambr /;gt; NBT finished after xxx ms

  Minecraft Wiki上这样介绍--client:

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

  很明显这句话完全错误(来自2021-8-5的注:实际上并不是完全错误,确实有这功能,只不过还附带了.nbt←.snbt的功能)。实际上,--client的作用就是.nbt←.snbt。现在你打开generated,你就会发现.snbt重新被转换成了.nbt。

  现在我们知道了--dev是.nbt→.snbt,--client是.nbt←.snbt,也发现了Minecraft Wiki中的错误。剩下的内容,我们就以后再研究了,毕竟剩下的不是本章的重点。

  OK那么NBT就讲到这了。我们下一章再见。

目录
设置
手机
书架
书页
评论