大家还记得这份列表吗?
- 移除blocks.json。
- 发布自定义重力方块的教程文档。
- 同步 Java 版的方块标签。
- 添加改变原版方块战利品表的功能。(短期)
- 使自定义组件可以传参,并使其看起来更像其他组件,很可能需要脚本v2.0.0。(2025 年)
- 添加colormap对自定义方块的支持,例如树叶和草地颜色。(2025 年,中长期)
- 添加数据驱动原版方块模型ID。原版方块模型可能用了一些硬编码功能,也将添加这些功能。(长期)
- 重新添加minecraft:unwalkable和minecraft:immovable这样的组件。
- 通过minecraft:material_instances组件设置方块的纹理变种。(长期)
- 自定义方块音效。(长期)
- 添加“一个方块有多个碰撞箱”的功能。(长期)
- 进一步设置方块红石属性,如定义接收红石信号的反应/发出红石信号。
- 添加onBlockDestroyed触发器。(很久之后)
- 尝试添加beforeOnPlayerInteract触发器。
- 使方块可以含雪或含熔岩。
- 逐渐实现原版所有方块的数据驱动。
去年暑假,他们说了自定义方块的开发计划,我就整理出了上面的列表。
现在我们来看看它们都实现了没有。首先是移除 blocks.json,从现在的情况看,这个文件的作用确实很小,不过是定义方块的音效。当然还有例如 ambient_occlusion_exponent 字段的存在,但这个字段的作用也可以通过 minecraft:material_instances 组件中的字段实现,说明确实在逐步弃用或转移 blocks.json 的功能。最后的结果,有可能是这个文件仅能被原版使用,也可能是完全弃用。他们还说,这是一个艰难的决定,但时间会治愈一切(因此带来的后果)。
接下来是发布自定义重力方块的教程。说实话我从来没试过自定义重力方块,要让我去做这个教程也不一定能做出来。不过我搜索了一下,发现还没有发布自定义重力方块的教程,那么这个大概是不会实现了。
第三个,同步方块标签。最近在方块标签方面确实有很大进步,尤其是可以通过方块标签,让自定义方块可以被原版工具识别并且快速挖掘。当然,还需要同步更多方块标签。
第四个应该还没有实现,我们现在还是没办法更改原版方块的掉落物或战利品表的功能。虽然他们说了是短期,但这个短期不可能是半年,因为后面的一些中期长期的内容都加入了。看起来他们延后了这个功能的加入。
第五个我很关注,自定义组件的传参很重要,如果他们真的加了这个功能,那么我们就不需要定义很多自定义组件来实现一些相对重复的功能。而且他们最近真的提到了这个!就在昨天,2025 年 1 月 31 日,他们更新了学习门户文档,就在这篇文章中,他们写下了这段话:
For example, an upcoming capability - custom components v2 - is now registered from script before block JSON files are loaded, to provide better error messages when errors are found in block JSON files.
翻译如下:
例如,即将推出的功能——自定义组件 v2——现在会在加载方块 JSON 文件之前通过脚本注册,以便在方块 JSON 文件中发现错误时提供更准确的错误信息。
这篇文章主要写了 SAPI 的 v2 概览,包括如何将 v1 代码升级到 v2。在提到 v2 的时序更新时,他们就顺便说了自定义组件的 v2 定义会在方块定义文件加载之前加载。
他们既然都说了“即将推出”,那说明自定义组件的第二代应该快要更新出来了,然后我意识到,我们可以开发一个通用的 API 接口,就像 Java 版的那些模组 API 一样。
在这个通用的 API 接口中,我们可以直接实现各种功能,比如食物食用时添加状态效果,或者实现方块之间的连接,就像无框玻璃一样。
如果真的出现了这样一个 API,我们显然就不用自己去实现那些功能了,可以专注于特定功能的开发。这样的话,我们只需要把这个充当接口 API 的附加包放在整个包堆栈的最底层,然后在它上面加其他附加包即可。
不过现在一切都还没有确定,所以我们继续看那份列表。
第六条是根据 colormap 给自定义方块染色,这显然就是最近 1.21.70.20 更新出来的功能。不过我不知道他们为什么要把这个功能放在 minecraft:map_color 组件下,这个组件不应该是用来定义方块的地图颜色的吗?还是说我理解错了,它真的只是调整地图颜色,而不是给方块染色?我测试了一下,把这个功能用在了棉花糖矮草丛上,但没有看出任何效果,也许它需要方块的纹理是黑白的,不能出现彩色。
第七个实现了一小部分,比如 minecraft:geometry.cross 这样的模型 ID,就是原版草的模型,但是显然还需要数驱更多原版方块的模型 ID。
第八个也是最近添加的功能,虽然还没有添加 minecraft:unwalkable 和 minecraft:immovable,但他们添加了一个全新的类似于这两个组件的组件——minecraft:replaceable。这个组件很特别,它有点像实体组件,就是它必须是一个空对象 {},而不能写 true 或 false。其实这种写法在资源包相机的定义文件中更普遍,如果存在这个组件而且值为 {},那么启用这个功能。如果要禁用这个功能,那就不应该出现这个组件。
之后就没什么实现的了,有模型的方块的纹理变种还没实现,也就是目前所有方块都不能有纹理变种,而这是之前有的功能。自定义方块音效也没什么消息,倒是实体音效搞出了别的名堂。
之后是一个方块多个碰撞箱,如果有这个功能,我们就能完美还原楼梯了,可惜现在没有。他们说的是长期,而现在已经加了根据 colormap 的方块染色,说明这个功能也快到了,再等几个月说不定就加入了。
接下来的红石方面的建议确实很有用,如果有了这个,我的附加包的那些红石机器的卡顿就会少很多。虽然之后那些也很有用,可是没什么可能很快实现,要等到它们的加入,等待时间大概至少是以年为单位的。