小小糖果 发表于 2023-9-30 06:48:56

附加包教程:39.NBT - 教程中心 - Minecraft(我的世界)苦力怕论坛

<br /><br /><table cellspacing="0" class="t_table" ><tr><td><font size="6">前言<br /></font></td></tr><tr><td><br />这一期,我们就来简单了解一下NBT。NBT与附加包是两个互相联系的方面,可以实现很多功能。<br /></td></tr><tr><td><img onerror="study_killerrpic(this)" id="aimg_P03k2" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://klpbbs.com/static/image/hrline/line5.png" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /></td></tr><tr><td><font size="6">NBT<br /></font></td></tr><tr><td><br />所谓NBT(Named Binary Tag),命名二进制标签,就是存储在实体、物品和方块实体中的数据。<br />NBT的存储格式与JSON并不相同,要看懂NBT,首先需要十六进制编辑器来查看文件的十六进制数据;然后需要处理基岩版NBT文件头,理解数字读;接着读出根标签的名称(通常是空的且没有作用),再根据表格找到接下来的数据类型;最后才可以整理出信息。这实在太复杂了,所以我们一般用btr编辑NBT。<br />虽然btr在1.16.100后似乎已经不能正确显示区块的地形,然后在1.18更新时API升级到30后又不能读取存档了,它仍然是一个很重要的工具。<br />编辑NBT可以轻松带来很多效果,例如不使用附加包自定义村民交易、物品数据修改(32k之类的)、特殊物品标签(无法损坏物品)、修改方块实体数据和实体数据等等花里胡哨的操作。这也是NBT吸引人的地方,只要勤备份,不要异想天开使游戏崩溃,NBT编辑还是很简单的。<br /><br />最近,我突然想给我的一个存档导入一张地图画。这种事情也有<a href="https://wwqq.lanzouj.com/igd6y16mmrze" rel="external nofollow" onClick="saya_extlink_golink('https://wwqq.lanzouj.com/igd6y16mmrze');return false;" target="_blank">专门的软件</a>(地图画编辑器,密码是afsz),但问题在于,这个软件只能从编号为1的地图开始生成地图画,而恰好我的那个存档有几张重要的地图,我就没办法了。不过,我突然想到,如果先创建新存档,然后导入地图画,再把地图数据迁移到目标存档,就可以了。这就有了这期教程——地图画的跨存档迁移。<br />当然,随便找来一个电脑上的工具,如MCCToolChest,就可以完成这个操作,但我想要在手机上完成这个工作,所以这篇教程完全可以用手机实践。<br /></td></tr><tr><td><img onerror="study_killerrpic(this)" id="aimg_VbggR" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://klpbbs.com/static/image/hrline/line3.png" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /></td></tr><tr><td><font size="6">教程<br /></font></td></tr><tr><td><br />首先,创建一个新存档,把这个存档从Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/里移动到外部games/com.mojang/minecraftWorlds/里,关掉mc,打开软件,按照提示把地图画导入进新存档里。<br />然后,不要动这个新存档。打开要导入地图画的目标存档,新建一张地图,把这张地图放在快捷栏里,但是<font color="red">不要拿着(选中)它</font>,保存目标存档,关闭mc,把目标存档从Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/里移动到外部games/com.mojang/minecraftWorlds/里,打开btr。<br />这样,就能在btr中看到这两个存档了。打开原存档,左滑,然后打开单人数据。<br /><img onerror="study_killerrpic(this)" id="aimg_F9vPj" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://pic.imgdb.cn/item/64eb2679661c6c8e548c8dbd.jpg" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /><br />然后打开根标签,打开Inventory,找到生成的地图画并打开(随便打开一个后看Name一项,应该是minecraft:filled_map),打开tag(也就是物品标签)。<br /><img onerror="study_killerrpic(this)" id="aimg_eAG5w" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://pic.imgdb.cn/item/64eb27ef661c6c8e548cb968.jpg" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /><br />复制map_uuid后面那一长串数字,然后退回到地图页面,左滑,点击最下面的按名称打开NBT。把那一串数字粘贴进去,前面加上前缀“map_”,然后点打开。<br /><img onerror="study_killerrpic(this)" id="aimg_tUdVr" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://pic.imgdb.cn/item/64eb293e661c6c8e548d1c3a.jpg" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /><br />这样,你就打开了这张地图的内部地图数据。可以看到一个打着问号的colors标签,长按并复制它。这个复制的内容即使关掉存档并打开另一个存档也有效,只要不重启btr。<br /><img onerror="study_killerrpic(this)" id="aimg_FPwDp" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://pic.imgdb.cn/item/64eb29e4661c6c8e548d347a.jpg" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /><br />现在打开另一个存档,按照之前的步骤找到物品栏中地图的tag,还是复制它的map_uuid,并按照之前的路子打开内部地图数据。长按并删掉它的colors,然后长按根标签下的红色复合标签,选择“作为子标签粘贴”。保存,退出。<br />现在打开目标存档,<font color="red">千万不要选中放在快捷栏的地图</font>!要直接拿出一个制图台和一片玻璃板,打开制图台,把那张地图放上去,加上玻璃板,锁定地图。地图锁定之后就可以在快捷栏选中,拿起来查看了。这时,原本自然的地形已经变成了你导入的地图画。于是,跨存档迁移地图画成功了。<br /></td></tr><tr><td><img onerror="study_killerrpic(this)" id="aimg_pc547" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://klpbbs.com/static/image/hrline/line2.png" onmouseover="img_onmouseoverfunc(this)" lazyloadthumb="1" border="0" alt="" /></td></tr><tr><td><font size="6">后记<br /></font></td></tr><tr><td><br />这个导入地图画的方法很简单,就是把记录着地图外观的colors数据复制并覆盖掉原先的临时无用数据。全程适用于手机,从此地图画随便迁移。<br />这就是NBT的简单运用了,附加包的开发虽然与NBT表面关系不大,但其实二者是联系的,开发附加包也会用到NBT,尤其是结构方面。<br /><br /><br /><a href="https://klpbbs.com/thread-111747-1-1.html" target="_blank">第三十八期</a> 第三十九期 <a href="https://klpbbs.com/thread-122099-1-1.html" target="_blank">第四十期</a><br>来源:<a href="https://klpbbs.com/thread-116699-1-7.html" target="_blank">https://klpbbs.com/thread-116699-1-7.html</a><br>免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

树上有只熊 发表于 2024-2-16 08:58:48

<br />是的,玩家数据不存储在level.dat中,而是db文件夹中,索引为~local_player。生命值(minecraft:health)和饥饿值(minecraft:player.hunger)等“属性”存储在Attributes中,背包物品在Inventory中,盔甲存储在Armor中。复制这些NBT标签,黏贴并覆盖到目标的玩家数据中,即可把目标玩家的旧数据替换为新数据。

心动警告 发表于 2024-2-15 22:02:31

是否可以利用NBT来将玩家的生命值,饥饿值,背包物品等复制到另一个存档里,在确保二者兼容的情况下
页: [1]
查看完整版本: 附加包教程:39.NBT - 教程中心 - Minecraft(我的世界)苦力怕论坛