开启辅助访问     
收藏本站

站内搜索

搜索

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

[BE教程] 附加包教程:49.拼图结构(一)

 发表于 2024-10-6 10:33:06 来自手机|显示全部楼层|阅读模式 IP:0
本帖最后由 Cat_Anchor 于 2024-11-2 10:20 编辑

前言
上期,我们演示了自定义组件的一些例子。最近,“生成文档”中出现了有关拼图结构的内容,于是写篇教程说明拼图方块到底是什么以及它有什么用。
拼图结构
以前,像林地府邸、海底神殿和村庄这样的结构是硬编码的。林地府邸的内部是随机生成的,村庄的道路必须依附于地形而建,这些功能用硬编码的方式实现很麻烦。后来,拼图结构出现了,解决了这个问题。
拼图结构就是用各种小结构拼起来的大结构,它不仅可以灵活生成结构,还能用处理器动态处理世界上的方块。一个村庄里很可能出现两个一样的房子,这是因为一个拼图结构里的小结构可以出现多次,这样,我们就可以把小结构称为“结构模板”——两个事物像,也可以说“一个模子里刻出来的”,就是这个意思。
如果两个拼图要被拼到一起,那么它们之中的一个要凸出,另一个要凹陷。同样地,如果两个结构模板要被拼起来,那么必须有两个拼图方块分别在两个结构里,一个充当“凸出”的部分,一个充当“凹陷”的部分,这就是拼图方块的作用。(示意图,其中钻石块和绿宝石块代表两个结构模板,拼图方块的摆放方向可能有误。)(顶部示意图,将两个结构模板看成两片拼图,可能更好理解。)
拼图结构的另一个功能是随机生成结构。如果一个村庄只有一种房子,那它一定很单调。如果一片拼图可以对应多片其他拼图,那么一个结构模板就可以生成不同的其他结构模板,拼图结构就不会显得单调了。所以引入一个新概念——模板池。一个模板池里有若干个结构模板,可以理解为一个模板池里的拼图形状都一样,只是样子不一样。如果一个结构模板可以与模板池里的一个结构模板拼接,那么它一定可以与模板池里的其他模板拼接。这样,我们把所有房子类的结构模板组成一个模板池,拼图结构使用模板池时就可以从中随机取出一个结构模板放置,也就是可以放置随机样式的房子。
现在,我们可以把一些的结构模板拼在一起,还可以从模板池里选结构拼接,这就差不多可以建立一个拼图结构了。但是拼图结构总得有个头,不能随便找个模板就开始生成,所以再介绍一个概念——起始模板池。游戏尝试生成结构时,首先放置这个模板池中的结构模板,被放置的结构模板就是起始结构模板。放置的结构中包含的拼图方块会找到与它们契合的下一块拼图,这样就能继续生成了。
拼图方块
拼图方块是用于生成拼图结构的技术性方块。
两个结构模板中的拼图方块如何确定它们是否应该对接?通过名称和目标名称字段。名称就是这个拼图方块的名称,而目标名称就是它要寻找的那个拼图方块的名称,它们应该对接。
拼图方块必须找到另一个可以拼接的拼图方块,结构模板才能被成功放置。因此,所有被对接的拼图方块都应该在结构模板的最外圈,否则不能拼接起来。不过有个例外,如果要在结构模板里面再生成一个结构模板,可以在结构模板内部放置拼图方块,此时要确保生成的结构模板在先前的结构模板之内。
如果我们在一个结构模板里放很多个相同的拼图方块,那么另一个拼图方块拼接这个结构模板时与哪个拼图方块对接?如果一个结构模板里有很多要放置其他结构模板的拼图方块,哪个先放置?为了解决这两个问题,拼图方块里还有两个字段——选择优先级和放置优先级。选择优先级用于确定多个拼图方块被一个拼图方块对接时的优先级,越高越优先。如果优先级一样,那么随机对接。放置优先级用于确定一个结构模板内拼图方块放置结构模板的顺序,越高越先放置。如果优先级一样,那么随机决定放置顺序。
拼图方块和合成器差不多,向上和向下放置时也可以旋转自身。这时出现了一个问题,如果拼图方块向上或向下放置,它连接的结构如何水平旋转?于是加入了一个选项:拼接类型。如果拼接类型选择“固定”,那么拼图方块的旋转值决定上方结构的旋转值。如果选择“可滚动”,那么上方结构放置时会随机旋转。
如果拼图结构都生成完了,拼图方块还在,那就太奇怪了。所以拼图方块里还有一个选项——转变为,用于指定用完的拼图方块要变成什么方块。大部分情况下,拼图方块用完了都要消失,所以填写 minecraft:air,让它变成空气方块。当然,也可以让它转变成其他的方块,比如要生成一个金块,可以保存一个拼图方块作为结构模板,连接时让这个拼图方块转变为金块即可。原版猪灵堡垒就是这么生成某些金块的。
生成拼图
为了生成我们的拼图结构,我们还要做最后一点准备工作:定义生成的规模、生成的位置和一些附加选项。

首先解释生成的规模。简单来说,拼图结构不能无限生成下去,否则整个世界都会是拼图结构。除没有可以继续执行的拼图方块这种情况外,游戏限制了拼图结构的规模,从起始结构模板开始,在任意方向上,结构模板最多为(规模)个。
比如有这样一个拼图结构:
┏▲
┣■

◆代表起始结构模板(可以通过 start_pool 字段指定),其余字符代表放置的结构模板。那么这个拼图结构的规模就是3,因为从◆算起,最远的是▲,共3个结构模板:┣、┏和▲。
规模是在文件中通过 max_depth 字段定义的,范围是1-20的整数(含),也就是说最多能生成规模为20的拼图结构。

如果你觉得上面的解释还是不好理解,那么来看看我自己做的拼图结构吧。图中,上面那个是保留了拼图方块的,下面那个则没有保留,实际上都一样。
我用三个结构模板做出了我的第一个拼图结构。第一个结构模板是起始结构模板,一个玻璃做的小房子。第二个是玻璃做的走廊,很短,连接各个结构。第三个是不同颜色的染色玻璃做的大厅,连接多个走廊。
我们来计算一下它的规模。注意它的主干,那个多种颜色玻璃组成的房顶就是“大厅”这个结构,它旁边有走廊(也就是紫色部分)。最右侧是起始结构,那个小房子,不算。数一下彩色玻璃区域的个数,8 个,乘上 2,加上最右侧那个走廊,结构模板的数量正好是 17——我设定的值。
至于里面的可疑的沙砾是怎么回事,就要说到处理器(Processors)了。我做了一个将部分空气方块变成可疑的沙砾,并在其中加入战利品表的处理器。

然后是生成的地点。这就与“生成文档”有关了,根据拼图结构的模式文档,可以定义高度图(heightmap_projection 字段)和起始高度(start_height 字段)来决定拼图结构的Y轴位置,也可以通过 biome_filters 字段定义在某个或某些生物群系生成。

最后是一些附加选项,比如通过 terrain_adaptation 字段指定的适应地形选项,还有 step 字段指定的生成阶段选项。如果原版的要塞(有末地传送门房间的那个地下结构)正好与大型洞穴相遇,那么要塞不会暴露出来,会有一层很平整的石头包裹着它(可能是 beard_box)。但试炼密室不一样,它会直接露出来(none)。这就是通过适应地形字段指定的,它有好几种选项,比如 bury,还有 encapsulate。
还可以指定拼图结构在世界生成的哪个阶段生成,这主要影响处理器。这选项就多了,fluid_springs 代表涌泉生成的阶段,lakes 代表湖泊生成的阶段,还有 local_modifications 和 raw_generation 这种看不懂的值,还有好多好多。

说了这么多,要生成一个拼图结构,我们需要首先定义这个拼图结构,根据拼图结构模式文档。然后根据对应的模式文档定义模板池,这样才能成功生成。
后记
这一期,我初步讲解了拼图结构和拼图方块。这个功能已经加入了附加包,我会继续写四期教程,分别介绍模板池、拼图结构、拼图结构集和处理器列表(Processor List)。这期只是讲到了前两个,稍微提到了第四个,根本没提第三个,其实拼图结构集用于指定拼图结构的生成方式。由于处理器(Processors)过于复杂,我可能会把它拆分。如果想要提前看看它们的模式文档,可以看我发的这篇闲聊帖。(排版有点简陋,但是我一编辑就要核审好久,所以凑合看吧。)其中处理器列表的模式文档还是英文,当时我没来得及翻译,不过现在已经译完了。
最后,我们来看一张图片,大致描述了拼图结构。


苦力怕论坛,感谢有您~
 发表于 2024-10-6 14:07:31 来自手机|显示全部楼层 IP:广西
感谢教程
3#2024-10-6 14:07:31回复收起回复
苦力怕论坛,感谢有您~
回复支持

使用道具举报

 发表于 2024-10-6 11:03:50 来自手机|显示全部楼层 IP:山东省
看不懂,想问问这个比结构地物更强吗
2#2024-10-6 11:03:50收起回复
Cat_Anchor2024-10-6 22:34IP:天津
回复举报
比结构地物强太多了,属于可以自定义村庄这种量级的,如果正式加入,附加包的游玩体验肯定会好很多
苦力怕论坛,感谢有您~
回复支持

使用道具举报

本版积分规则

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

QQ群

访问手机版

访问手机版

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

粤公网安备 44200002445329号 | 由 木韩网络 提供支持 | GMT+8, 2024-12-15 21:50

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

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