Cat_Anchor 发表于 2024-12-7 23:56:33

加入落果的独特功能,更科学的落木楼梯和台阶

距离上次发闲聊帖已经过去了一周,今天我又来更新 Complementary 的制作进度了。


首先,我做完落果了。幸好它背后的代码实际上没有我想象的那么复杂,否则这就不是我能解决的问题了。

那么落果的功能是什么呢?——

https://pic.imgdb.cn/item/6754012bd0e0a243d4df485d.jpg

它可以被扔出去!

扔出的落果砸到方块时会爆发出很多微尘般的粒子效果,发出猛砸的声音并破碎。落果破碎之后就成了破碎的落果,目前它还没有作用。

难道这功能很复杂,需要很多代码吗?当然不是,真正复杂的是落果落地一瞬间的行为很复杂。它可以随机打乱落地区域的特定方块!

比如说,我们在地上铺一片石砖,在旁边再铺一片苔石砖,喜欢的话还可以铺裂纹石砖,雕纹石砖,随便。之后,我们站到各种石砖组成的平台的中心,向脚下砸一个落果,这片区域的石砖就被打乱了,形成了要塞墙壁之类的效果。

https://pic.imgdb.cn/item/675402ecd0e0a243d4df4b9f.jpg

打乱过程中,方块是守恒的,不会因为某些因素,就凭空变出两块石砖而吞掉一块雕纹石砖。如果打乱范围内有别的方块,它会留在原地。

落果打乱方块时,选择的平面是根据击中的平面决定的,所以它不仅能打乱地板,也能打乱天花板和墙壁。

落果不仅可以用手扔,还能用发射器扔!

https://pic.imgdb.cn/item/67540329d0e0a243d4df4c65.jpg

这种落果和玩家扔出的落果没有任何区别,照样可以打乱方块。

除了破碎的落果以外,落果还有一个变种——甜落果。用熔炉、烟熏炉、营火和灵魂营火烧制落果可以获得甜落果。甜落果的唯一用途是食用,因此没有配图。

但就是这么一个不起眼的东西,是我添加整个落木系列的根源。


那是今年 5 月,我随机地看到了一个字符串——“甜日落果”,感觉很好,于是存进便签里。最近我无意地又看到了它,于是打算添加这种东西。首先需要确定是方块还是物品,最后我选择了物品。但就像荧光棒原本可能是方块一样,也许现在的落果也可以是方块。

话说我确定了要添加的新内容——现在的落果——是物品之后,我就开始考虑它的名称和获取方式。我首先想到了获取方式,那就是通过一种植物获得,后来很快确定了这种植物是树,这种树和现在的落果的关系就像橡树和苹果的关系。

之后就是名称了。我刚才一直强调“现在的落果”,是因为那时它还不叫落果,就叫甜日落果。

那么“甜日”的含义是什么?是一种天气,还是一种环境?最后我也想不出来,于是删掉一个字,变成了“甜落果”。现在,“甜”的意思就很好确定了。既然有“甜”落果,那就应该有不甜的落果,就叫落果,于是那种树掉落的果实变成了落果。

现在问题变成了那种树的设定是什么。首先考虑原木的名称,我为它确定的第一个名称是“甜落原木”。后来,由于 ID 不好取,我去掉了“甜”字,加个“树”字,于是变成了现在的落树原木。之后的内容就水到渠成了,我为落树添加了“石化树木”的设定,也加了生成方式……

没错,仅仅为了添加“甜落果”,我就添加了这么多东西,算是为了一碟醋包了一盘饺子。

https://pic.imgdb.cn/item/675469abd0e0a243d4dfd00a.jpg


添加落木,就意味着还原出原版树的所有内容。首先是告示牌、按钮这种方块,我还原不了,虽然之前有个绝妙的点子,但后来被证实不起作用。之后是有一定制作困难或部分无法实现的方块,比如栅栏和楼梯。楼梯属于部分无法实现的方块,因为它需要至少两个碰撞箱(也可能是三个,比如拐角处的楼梯),而我们只能定义一个。至于自定义多个碰撞箱的功能,他们说处于“长期”路线图中。

而栅栏和栅栏门的实现依赖于一个“漏洞”——minecraft:transformation 组件可以将碰撞箱平移或缩放到方块之外。但这种情况下的判定箱有点特殊,如果尝试选择还在原本方块范围内的那部分,会显示完整的判定箱;尝试选择超过原本方块的部分,又选择不到。为了避免这个问题,我不用平移,而是用缩放,再填写一些我计算好的数值,就能完美还原原版栅栏的碰撞箱和判定箱。这个功能还是我写到这里时想到的,原本我用的就是平移,突然我想:“既然能用平移,为什么不用缩放?”

https://pic.imgdb.cn/item/675469c4d0e0a243d4dfd00b.jpg


我还让台阶、楼梯和栅栏门这类方块“更科学”了。如果是 Java 版,四个楼梯放在一起拼凑成一格小空间,是可以做出小型无限水的,而基岩版不行,楼梯中的水不会流向另外一个楼梯。

但我打破了这个限制,现在,基岩版中也可以制作小型无限水了。不仅如此,台阶上的水也会沿着台阶平面流动,而且不会穿过台阶向下流(前提是放的是下半砖)。

https://pic.imgdb.cn/item/67546a70d0e0a243d4dfd042.jpg
https://pic.imgdb.cn/item/675469f5d0e0a243d4dfd01d.jpg
https://pic.imgdb.cn/item/67546a0dd0e0a243d4dfd02c.jpg
https://pic.imgdb.cn/item/67546a32d0e0a243d4dfd03a.jpg
https://pic.imgdb.cn/item/67546a56d0e0a243d4dfd03f.jpg

至于栅栏和栅栏门,它们看起来就不能阻挡水流过,所以它们就真的不能阻挡水流过了。但由于水的渲染特性,大部分水不会渲染,导致流过的水在视觉上空缺了一块。
https://pic.imgdb.cn/item/67546a90d0e0a243d4dfd049.jpg

门也是一样,流动的水会流进门方块里,但不会穿过门板,活板门同理。树叶则可以容纳水,一旦把水放进去,水就不会流出来,除非破坏树叶。

https://pic.imgdb.cn/item/67546be3d0e0a243d4dfd087.jpg
https://pic.imgdb.cn/item/67546bfbd0e0a243d4dfd089.jpg

至此,落木系列中所有不完整方块和一个特例(树叶)与水的交互都被我做好了。对于不完整方块,我的原则就是,尽量让水填充看起来应该填充的部分。


接下来的功能是什么?我打算先拓展一下灯笼——给它加两种不同颜色的变种,之后的计划就是保密的了。

我的原创附加包 Complementary 的第一个测试版预计在 12 月发布。

涂浅儿 发表于 2024-12-8 01:09:41

台阶那个我喜欢!

NO.255 发表于 2024-12-8 00:12:00

!牛逼!还是基岩版!
页: [1]
查看完整版本: 加入落果的独特功能,更科学的落木楼梯和台阶