今天我完成了月考,为了庆祝,我发布了万象添补的最后一个 Alpha 版——0.0.14。
接下来就是这个附加包的 Beta 阶段,会有 0.x.x 这样的版本号,此时最后一位不会增长太多。下方是 0.1.0 的内容。
草阶


最近他们添加了根据生物群系给自定义方块染色的功能(也有人称为“着色”,但是我会用“染色”这个词),为了测试相关功能,我加入了草方块的台阶形式。
现在六面包裹着草的方块可以用苔藓块代替,我再加入六面草方块似乎就没什么必要了。于是我加入了草阶,与一般的台阶不同,它只能放在方块的下半部分。
我是不愿意做台阶的,也不愿意做去皮原木的功能——要给落木去皮,需要把落木放进切石机里。这两者看似没什么共性,落木本来就石化了,放进切石机似乎无可厚非;但是它们之下隐藏着一个根本问题,那就是我不喜欢给过多方块做交互,或者说我需要避免给很多方块加上交互的事件。因为一旦给方块加上了这个事件,我们拿着任何东西(甚至空手)点击方块,都会被视为与这个方块的互动,从而忽略拿着方块物品时放下方块的行为。这样,我们就没法连续放台阶(平台)或者放原木(柱子)了,我只好避免这种情况,然而台阶又是必需品,所以只能等他们去解决。
虚空液体转运


我一直想为万象添补加入一点工业化设备,但是又不能太工业(我也没那个能力),于是怎么解决工业机器能解决的问题成了难题。其中最显著的问题之一就是液体的运输,虽然原版似乎没什么需要大量液体的地方。
液体运输,那无非就是入口、管道和出口的组合。入口就是水泵之类的东西,能把世界中的液体方块弄消失,然后以数据的形式存储起来。管道就是管道,运输液体的装置(其实我觉得如果在输出端没有抽气装置而让管道自动运输液体是很不合理的,但如果加上这个特性,要考虑的就太多了,所以这也是无奈之举),现在有了生物群系染色,管道的效果会更好。但是我一直找不到一种合理高效的方式去实现管道,这主要是因为它涉及区块加载问题。
如果 MC 是真实世界,我们自然不用考虑什么区块加载——甚至连区块都不会存在。但是 MC 以数字形式存在,我们需要消耗资源去模拟世界,这样的话会有很多问题,但是我们可以通过一些方法回避。
到了管道这里,我真的不知道怎么处理了。我经常把模拟距离设为 4 区块,就 64 * 64 的区域,还用得着专门建设管道运输吗?如果有管道,那它一定能跨越未加载区块运输。在 Java 版,开发者可以试试探索新的数据格式,但是在基岩版,在接口严重受限的基岩版,我想不到什么解决方案。
于是最后,我的方案就是:彻底移除管道。准确地说,是一开始就不打算加入管道。这样的话,只有输入端和输出端在工作,在两个地方创建两个常加载区域就好了。于是出现了这个方块,虚空液体接口。

由于基岩版接口限制,我们没法创建方块实体,所以我还需要加入一种物品来储存输入端和输出端的对应关系。这就是虚空液体之星的由来。

虚空液体之星的界面是这样的:

在需要抽取液体的地方放一个虚空液体接口,在虚空液体之星上输入一个 X Y Z 坐标,确保这个坐标上有另一个虚空液体接口。之后就要把虚空液体之星放到虚空液体接口上方任意容器的第一个槽位之中,再给这个接口通上红石能量,就好了。
它的吸取范围是一个圆锥,圆锥的高度根据红石能量的强度决定,圆锥的母线与水平地面(大概)固定成 45 度角。为此我还加入了一个新的自定义命令,liftcone,可以将指定范围的圆锥提升到空中。后来我又加了 liftpyramid,这样就可以创建棱锥了。还有 liftprism,这样棱柱也有了,圆柱和台体都可以通过一些简单的操作得到。
其实虚空液体转运系统的代码很简陋,甚至不支持跨维度运输。这个附加包肯定也还有很多漏洞,我打算专门开一个生存档去测试这个附加包。这招是之前添补时期用过的,非常好用。
传送水晶改进
之后我还写了一些代码,实现了传送水晶的同名传送功能,现在可以通过指定名称创建复杂传送通路了。传送水晶很特别,因为它可以保持周围区块常加载,在机器旁边放一个,即使离开很远也能继续运转。因为传送水晶而存在的常加载区域会被 /tickingarea list 列出,提示文本是:“实体中有 \<数量\> 个带 tick_world 组件的常加载区域。”我估计大多数玩家都没见过这样的命令提示。我不知道这个有没有上限,或者如果达到了上限会怎么处理,不过我知道常加载区域太多的话一定很卡。
我已经把这个附加包的开发工作推进了一段,如果不出意外,暑假时应该就能发出点可以玩的东西来了,不过不保证是正式版。