Minecraft(我的世界)中文论坛

标题: [1.10]structure NBT格式研究

作者: pca006132    时间: 2016-5-20 20:02
标题: [1.10]structure NBT格式研究
本帖最后由 pca006132 于 2017-1-22 12:26 编辑

本次研究的structure为minecraft内置的,位置为xxx.jar\assets\minecraft\structures。由于这个格式并不是txt模式,因此需要特殊方法才能检索,建议使用NBT Explorer

———————————


从这里我们可以看到,structure的文件有六个标签:
-blocks: 这是一个列表格式的标签,里面的子标签为compound格式,存有每个方块的位置及数值(下方将会详细介绍)
-entities: 这也是一个列表格式的标签,这里暂时没法进行研究
-palette: 这是一个列表格式的标签,里面的子标签为compound格式,存有方块id及方块属性(下方将会详细介绍)
-size: 这是一个列表格式的标签,里面的子标签为整数(int)格式,分别储存该结构的x、y、z大小
-author: 这是一个字串格式的标签,数值应该是作者的名字?暂时未能发现有任何用途
-version: 这是一个整数(int)格式的标签,未发现有任何用途

———————————


这是entity里面的一个compound(感谢@chyx)
里面有三个标签:
- nbt: 储存着实体的nbt
- blockPos: 储存着实体所在方块坐标(xyz, int)
- pos: 储存着实体的精确位置(xyz, double)
nbt里面的格式和一般实体的格式一样,里面有uuid、pos等等的nbt,不过uuid及pos就会被游戏无视


*详见五楼, by chyx
———————————


这是blocks里面的一个compound,可以看见有三个标签:
-nbt: compound, 储存着那个方块的nbt
-pos: list(子标签为三个int), 储存着那个方块的x、y、z坐标(相对于原点,也就是储存/加载的时候指定的位置)
-state: int, 储存方块的资料(数据值、方块id),数值为相应方块在palette里的索引值(从0开始),下面将会提供一个例子
———————————

这是palette里面的一个compound,可以看见有两个标签:
-Properties: 方块属性,储存着比如朝向等特殊的方块属性,估计就是材质的那个属性,也就是数据值的一部分
-Name: 方块id,储存着方块的种类

———————————
xxx.nbt(为了方便编写,我用了json格式,并且简化了一点,只写出需要看的)

state为0的就是palette里第一个方块,也就是空气
state为1的就是palette里第二个方块,也就是石头
state为2的就是palette里第三个方块,也就是白色的玻璃
所以这个结构就是(从上而下): 白色的玻璃、石头、空气

———————————奇奇怪怪的分隔线———————————

这研究还是很稚嫩,因为我完全没办法去实践我的猜测...而且研究的时间也很短(今天刚开始)。所以以后会慢慢增加内容的了希望各位能够明白structure的格式,如果有错漏/不足之处,还请指出,我会尽快修改
如果有不明白的话,也欢迎询问,我会尽力回答你们的问题

[groupid=546]Command Block Logic[/groupid]
作者: chyx    时间: 2016-5-21 00:43
不是我泼冷水 现任某大区版主和某新闻版版主在1.9快照时期就研究过这个了
作者: chyx    时间: 2016-5-21 00:43
标题: https://bugs.mojang.com/browse/MC-102052
本帖最后由 chyx 于 2016-5-21 04:54 编辑

当然确实改了一点 但不是很大 没达到面目全非的程度不过确实是一个不错的教程 点赞


其实我更希望他们把https://bugs.mojang.com/browse/MC-9553修了

作者: 840196733mw    时间: 2016-5-21 08:09
说好的死呢 为何又出来了? (手动滑稽)
http://www.mcbbs.net/thread-567250-1-1.html 此贴 一开始就表示了准备神隐

这是打算回归了?

不管是不是 反正pca还在CBL新手群出现就对了
作者: chyx    时间: 2016-5-21 21:05
本帖最后由 chyx 于 2016-5-21 21:13 编辑


这是jar中自带实体的一个例子
可以看见在nbt文件中直接就有entities的list
里面是无名字的compound
每个compound是结构中的一个实体(这幅图是村民和僵尸)
里面再有着blockPos pos 和nbt三个tag看起来blockPos 是实体所在方块的坐标 pos是精确的坐标
nbt内容跟存档格式完全一样
但很明显 至少里面的uuid和Pos是被游戏忽略的(从这里能看出seargedp是在哪里建的雪屋的例子然后用结构方块保存的)
我在1.9的时候试过 游戏里的雪屋里的僵尸和村民的uuid和这个文件里的不同
(可以看到 僵尸的z值的小数部分很长 但村民就在方块正中间 可能是seargedp在保存前僵尸想够村民或者searge不慎碰了一下僵尸)



作者: 回调然后他    时间: 2016-5-22 14:57
恩,不错,不得也不错
作者: 回调然后他    时间: 2016-5-22 15:02
回调然后他 发表于 2016-5-22 14:57
恩,不错,不得也不错

当然我是仰视你们的