BRRP(Better Runtime Resource Pack,更好的运行时资源包),是可用于在运行时创建游戏资源的前置模组,是基于 ARRP 模组的一个分支。
运行时资源包是在运行时创建的 Minecraft 资源文件,从而避免一些重复的操作。对于存在大量相似方块和物品的模组而言,借助运行时资源包可以极大地减小模组文件的大小。
例如,绝大多数方块的战利品表可以描述为“掉落方块本身”,少数方块需要精准采集才会掉落,而对于台阶方块,破坏双台阶后会掉落两倍的方块。在战利品表中,每个方块都要单独定义一个战利品表 JSON 文件,这是显然非常费神的。又如,几乎每个方块都需要定义方块状态、方块模型和物品模型,其中方块模型可能还不止一个,如果再加上战利品表和配方(若有)的话,每个方块都需要至少 5 个 JSON 文件才能实现完整的功能。而运行时资源包则会让这些内容在运行时生成在游戏内部,不需要打包在模组 JAR 文件中。
运行时资源包和常规的资源包在功能上一致的,常规的资源包(无论是模组自带资源包还是手动安装的资源包或数据包)都可以覆盖运行时资源包内容,亦可以与运行时资源包相互牵连。一个很典型的例子是,方块的模型由运行时资源包定义,而其纹理则是以传统的方式存储在模组文件中的(因为纹理文件并不适合在运行时生成)。
与传统资源包相比,运行时资源包节省了输入输出(I/O),但增加了对象序列化的过程,这是运行时资源包的一个缺点。资源包在生成时,会由游戏内对象转化为字节形式,通常是输出为 JSON,这一过程称为序列化。游戏在读取资源包时,又会重新解析这些字节形式的内容,以产生游戏内的对象,这一过程称为反序列化。传统的资源包中,所有的资源是已经序列化了的,游戏在加载资源包时只需要进行反序列化即可。而运行时资源包需要进行反序列化再序列化。
这里再梳理一遍传统资源包和运行时资源包在游戏内的读取过程:
未来的版本,将会考虑直接生成游戏内的有关对象并直接使用,不经序列化和反序列化的途径。这个理论上已经可以做到,但是如果要作为资源包的形式允许传统的资源包或者数据包覆盖则还需要进行进一步研究才能完成。
本模组(BRRP)可以是 ARRP 的分支,自 1.0.0 版本开始,已经从 ARRP 模组独立出去,不再提供 ARRP 的功能,且理论上可以同 ARRP 共存。
本模组开放源代码,并在 MPLv2 版权协议下发布。