开启辅助访问      

站内搜索

搜索
热搜: 下载 1.19 1.20

Minecraft(我的世界)苦力怕论坛

[BE教程] 附加包教程:39.NBT

发表于 2023-9-30 06:48:56 来自手机 | 显示全部楼层 |阅读模式 IP:山西省
本帖最后由 Cat_Anchor 于 2023-12-2 22:42 编辑

前言

这一期,我们就来简单了解一下NBT。NBT与附加包是两个互相联系的方面,可以实现很多功能。
NBT

所谓NBT(Named Binary Tag),命名二进制标签,就是存储在实体、物品和方块实体中的数据。
NBT的存储格式与JSON并不相同,要看懂NBT,首先需要十六进制编辑器来查看文件的十六进制数据;然后需要处理基岩版NBT文件头,理解数字读;接着读出根标签的名称(通常是空的且没有作用),再根据表格找到接下来的数据类型;最后才可以整理出信息。这实在太复杂了,所以我们一般用btr编辑NBT。
虽然btr在1.16.100后似乎已经不能正确显示区块的地形,然后在1.18更新时API升级到30后又不能读取存档了,它仍然是一个很重要的工具。
编辑NBT可以轻松带来很多效果,例如不使用附加包自定义村民交易、物品数据修改(32k之类的)、特殊物品标签(无法损坏物品)、修改方块实体数据和实体数据等等花里胡哨的操作。这也是NBT吸引人的地方,只要勤备份,不要异想天开使游戏崩溃,NBT编辑还是很简单的。

最近,我突然想给我的一个存档导入一张地图画。这种事情也有专门的软件(地图画编辑器,密码是afsz),但问题在于,这个软件只能从编号为1的地图开始生成地图画,而恰好我的那个存档有几张重要的地图,我就没办法了。不过,我突然想到,如果先创建新存档,然后导入地图画,再把地图数据迁移到目标存档,就可以了。这就有了这期教程——地图画的跨存档迁移。
当然,随便找来一个电脑上的工具,如MCCToolChest,就可以完成这个操作,但我想要在手机上完成这个工作,所以这篇教程完全可以用手机实践。
教程

首先,创建一个新存档,把这个存档从Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/里移动到外部games/com.mojang/minecraftWorlds/里,关掉mc,打开软件,按照提示把地图画导入进新存档里。
然后,不要动这个新存档。打开要导入地图画的目标存档,新建一张地图,把这张地图放在快捷栏里,但是不要拿着(选中)它,保存目标存档,关闭mc,把目标存档从Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/里移动到外部games/com.mojang/minecraftWorlds/里,打开btr。
这样,就能在btr中看到这两个存档了。打开原存档,左滑,然后打开单人数据。

然后打开根标签,打开Inventory,找到生成的地图画并打开(随便打开一个后看Name一项,应该是minecraft:filled_map),打开tag(也就是物品标签)。

复制map_uuid后面那一长串数字,然后退回到地图页面,左滑,点击最下面的按名称打开NBT。把那一串数字粘贴进去,前面加上前缀“map_”,然后点打开。

这样,你就打开了这张地图的内部地图数据。可以看到一个打着问号的colors标签,长按并复制它。这个复制的内容即使关掉存档并打开另一个存档也有效,只要不重启btr。

现在打开另一个存档,按照之前的步骤找到物品栏中地图的tag,还是复制它的map_uuid,并按照之前的路子打开内部地图数据。长按并删掉它的colors,然后长按根标签下的红色复合标签,选择“作为子标签粘贴”。保存,退出。
现在打开目标存档,千万不要选中放在快捷栏的地图!要直接拿出一个制图台和一片玻璃板,打开制图台,把那张地图放上去,加上玻璃板,锁定地图。地图锁定之后就可以在快捷栏选中,拿起来查看了。这时,原本自然的地形已经变成了你导入的地图画。于是,跨存档迁移地图画成功了。
后记

这个导入地图画的方法很简单,就是把记录着地图外观的colors数据复制并覆盖掉原先的临时无用数据。全程适用于手机,从此地图画随便迁移。
这就是NBT的简单运用了,附加包的开发虽然与NBT表面关系不大,但其实二者是联系的,开发附加包也会用到NBT,尤其是结构方面。


苦力怕论坛,感谢有您~
回复

使用道具 举报

 楼主| 发表于 2024-2-16 08:58:48 来自手机 | 显示全部楼层 IP:山西省
HuaV 发表于 2024-2-15 22:02
是否可以利用NBT来将玩家的生命值,饥饿值,背包物品等复制到另一个存档里,在确保二者兼容的情况下 ...

是的,玩家数据不存储在level.dat中,而是db文件夹中,索引为~local_player。生命值(minecraft:health)和饥饿值(minecraft:player.hunger)等“属性”存储在Attributes中,背包物品在Inventory中,盔甲存储在Armor中。复制这些NBT标签,黏贴并覆盖到目标的玩家数据中,即可把目标玩家的旧数据替换为新数据。
3# 2024-2-16 08:58:48 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持 1

使用道具 举报

发表于 2024-2-15 22:02:31 | 显示全部楼层 IP:广西
是否可以利用NBT来将玩家的生命值,饥饿值,背包物品等复制到另一个存档里,在确保二者兼容的情况下
2# 2024-2-15 22:02:31 回复 收起回复
苦力怕论坛,感谢有您~
回复 支持

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

本站
关于我们
联系我们
坛史纲要
官方
哔哩哔哩
技术博客
下载
网易版
安卓版
JAVA
反馈
意见建议
教程中心
更多
捐助本站
QQ群
QQ群

QQ群

访问手机版

访问手机版

手机版|小黑屋|系统状态|klpbbs.com

粤公网安备 44200002445329号 | 由 木韩网络 提供云服务 | GMT+8, 2024-5-6 12:24

声明:本站与Mojang以及微软公司没有从属关系

Powered by Discuz! X3.4 粤ICP备2023071842号