Cat_Anchor 发表于 2023-3-4 12:22:50

附加包教程:26.结构

本帖最后由 Cat_Anchor 于 2023-3-5 08:02 编辑




前言



现在我们来讲讲结构。



https://klpbbs.com/static/image/hrline/line5.png


结构



打开行为包根目录,打开structures文件夹,这里用于存储结构。结构是以.mcstructure结尾的nbt文件,一般是导出结构时产生的。
当你在电脑平台运行MC基岩版时,你会发现结构方块的UI里原先只有保存和重置按钮,现在多了一个导出的按钮。这个按钮在手机版上不存在,但可以通过修改UI文件调出这个按钮。论坛上有别人做的附加包,可以调出这个按钮。在论坛里搜一下就好了,我不方便直接放出链接。但要注意,在1.17之前的版本,导出按钮不起作用,也就是说这个功能还没有适配手机。
装好你下载的附加包以后,打开结构方块的UI,你应该也有这个导出按钮了。框选好结构,填好而且记住你的结构名称,然后按下导出按钮。你会被引导到一个保存文件的页面。这时,你保存的文件就是以.mcstructure结尾的结构文件。
然后把这个文件扔进行为包根目录下的structures文件夹。这时,通过在一个新存档里装载你的附加包,你应该可以在那里加载你刚才导出的结构了,结构名称要对。
在最新版本里,结构方块在加载模式下还有一个导入按钮,点击导入按钮可以选择.mcstructure文件直接导入。
这就是结构的相关知识。我之所以把结构放到地物之前,是因为之后有一个专门放置结构的地物。



https://klpbbs.com/static/image/hrline/line6.png


限制



结构也有一定的限制。这主要体现在大小不能超过64*维度总高度*64上。在1.18之前,大小限制是64*256*64(最多1048576方块);在1.18及以后,大小限制是64*384*64(最多1572864方块)。
但在下界,只能是64*128*64;在末地则是64*256*64。由此可以看出,官方只对长和宽作了64个方块的限制,却没有对高度的限制。
因此,我推测,在数据驱动主世界高度的世界,结构方块的高度限制是数据驱动的主世界高度。显而易见,在主世界高度值为-512到512时,总高度就是1024。因此,在这个世界中,结构方块的限制就是64*1024*64(最多可以保存惊人的4194304个方块)。这就是极限了。



https://klpbbs.com/static/image/hrline/line2.png


然而...



真的是极限吗?

首先,我想到了这可能是UI的限制。打开原版的结构方块UI文件,搜索64,但没有找到任何我满意的结果。这时,我心头一凉,64个方块的限制很可能不是UI造成的。但我仍然注意到原版的结构大小输入框只能输入3位数(任何大于64的数会被转换为64,任何不是数字的东西会被转换为1),我把这个限制改成了10位数。进入游戏,是能输入9999999999了,但是一松开键盘,数字就变成了64。这时,我转换了思路。
这个限制大概是在手动输入上的,如果我不手动输入,让别的东西替我输入大于64的值不就行了嘛!于是我想到了角落模式的结构方块。根据操作流程,我成功搞出了第一个大于64格的结构,大小是84*27*8。这大大鼓舞了我,使我看到了希望。但这种方法也有缺点,需要保存的区块一直加载着。在保存超大建筑时,必须添加常加载区域,这又是一个难点。最后,我还是放弃了这种方法。
结构方块是方块实体,它可以存储自身的设置。也就是说,假设我们读取结构方块的方块实体数据,可以编辑某些特定的字段来修改要保存的结构大小!至于用于修改的应用程序,那当然是btr了。但问题在于,1.16.100以后,btr居然不能读取区块中的方块实体数据了!诚然,我可以把结构导出为.mcstructure,然后在电脑上用nbt编辑器打开它;但我想要在手机上编辑它,除非有十六进制编辑器,否则基本上不行。其他方法都太过麻烦,但我还是找到了一个好办法。
我们可以用结构方块保存任何方块或实体(玩家除外),包括另一个结构方块。虽然btr不能直接读取区块中的方块实体数据,它却可以读取世界中保存的结构数据!



https://klpbbs.com/static/image/hrline/line8.png


操作方法



首先,放置一个结构方块,这个结构方块就是你要修改大小的那一个。然后再放置一个结构方块,用这个结构方块保存之前那个结构方块,名字就随便叫一个,我这里叫它mystructure:test好了。对了,保存时记得在下面把保存模式改成“保存到磁盘”,不然你的结构一会儿就丢失了。
然后保存并退出,接着彻底关闭MC。打开btr,打开刚才的存档。在1.18及以后,可能需要把存档从/storage/emulated/0/Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/存档/ 移动到 /storage/emulated/0/games/com.mojang/minecraftWorlds/存档/,才能在btr中看到你的存档。或者使用路径修复版MC,能直接看到你的存档。(注:最好备份存档。)
然后打开btr,打开你的存档,进入。接下来要打开侧边栏。可以选择从左向右滑动来打开,在btr1.9.4版本中也可以直接双击地图打开。
https://pic.imgdb.cn/item/63fabb3df144a0100766a35a.jpg
在侧边栏找到“按名称打开NBT”。
https://pic.imgdb.cn/item/63fabb51f144a0100766b80c.jpg
点击它,输入“structuretemplate_mystructure:test”,然后点击打开。(注:其中的mystructure:test就是刚才保存的名字。)
https://pic.imgdb.cn/item/63fabb67f144a0100766cd2d.jpg
然后按照图片展开NBT,来到block_entity_data(方块实体数据)下。
https://pic.imgdb.cn/item/63fabb7bf144a0100766e4fe.jpg
然后你会看到如下图所示的一堆东西,重点看红色方框里的东西。这就是以x,y,z为标准的结构大小。你可以随便修改它,想多大就多大,但最大是2147483647。图中,我把它修改成了375*127*375。
https://pic.imgdb.cn/item/63fabb99f144a01007670476.jpg
我再放一张图片,展示了NBT的整体结构。
https://pic.imgdb.cn/item/63fabba4f144a010076712ae.jpg
好了,点击右下角保存,然后退出。把修改过的存档从/storage/emulated/0/games/com.mojang/minecraftWorlds/存档/ 移动到 /storage/emulated/0/Android/data/com.mojang.minecraftpe/games/com.mojang/minecraftWorlds/存档/,打开游戏,加载名为mystructure:test的结构。会加载出来一个结构方块。打开它吧,看看里面的数值被你改得多夸张。
不过修改时要小心,因为打开结构方块时右侧会有整体预览图,渲染了结构里的所有方块,而且同时渲染太多方块会导致崩溃。这不是官方的问题,纯粹是设备性能不足的问题。你可以尝试编辑UI,把特殊渲染去掉,这样应该会好一些。
利用这种方法可以保存超大结构,而且保存时不需要所有区块都加载。但加载时就需要了,如果尝试把结构放置在未加载区块,系统会提示“结构放置的请求已加入计划队列,将在指定区域完全加载后执行”。这时你就要加载那些区块,然后系统会瞬间加载你的结构。在加载结构时,选择以动画形式加载会减少一部分卡顿。可以选择逐层加载,或者逐个方块加载。
在导出结构时,过大的结构会导致导出程序出现一些问题。拿375*127*375的大小举例,这会使游戏崩溃一次,第二次会正常导出,但是需要大约30秒。导出的文件大小约是130MB,但压缩后却连1MB都不到。使用导入功能加载这个超大结构,抛开未加载的区块不谈,也会导致一小部分问题,例如加载的结构不完整等。
假设主世界没有高度限制,那么用这种方法最大能保存的结构大小是2147483647*2147483647*2147483647,方块数量将会达到恐怖的9903520300447984150353281023(约9.9乘10的27次方)个方块。这相当于可玩的主世界中的四分之一的方块。仅需保存4次,就可以保存下整个可玩的主世界。主世界还有不可玩的区域,那就是无限的了。



https://klpbbs.com/static/image/hrline/line1.png


总结



这一期,我们学完了结构的导出和导入,以及超大结构技术。也可以在外部编辑结构(注:只能在电脑端使用)。下一期,我们就要讲地物了。





第二十五期 第二十六期 第二十七期

呼啸泰坦 发表于 2024-6-1 18:30:43

我朋友之前搞出过突破结构方块限制,似乎b站有教程

罒夏灬 发表于 2024-6-23 06:14:51


手机上找不到structure文件夹
页: [1]
查看完整版本: 附加包教程:26.结构