运行时数据生成系统(整合包作者)
运行时数据生成系统是矿石魔种中举足轻重的一个核心系统,它可以基于数据生成器批量生成数据包或资源包文件,并通过 生成包处理器自动注入进游戏里。
对于整合包作者来说,它是一个 "一个脚本就能处理几百条配方" 的神器。
核心概念
生成包处理器 - PackHandler
生成包处理器管理一个目录形式的数据包或资源包,负责读取生成器定义、触发生成流程、维护中间缓存,并将最终结果写入包目录。对整合包作者来说, 可以把它理解为“承载生成流程的包容器”。
数据生成器 - DataGenerator
数据生成器是具体的数据生成规则。它定义要针对哪一组内容进行遍历、生成出的文件应写入什么路径,以及文件内容应如何组织。 整合包作者日常接触到的生成器文件,本质上就是对这类规则的声明。
模板 - Template
模板是生成器中用于描述输出结构的模板对象。无论是生成文件的路径,还是文件本体的内容,都可以通过模板来声明。模板中可以包含占位符表达式, 从而在生成时根据当前条目的数据动态拼出最终结果。
占位符解析器 - Placeholder
占位符解析器是模板可使用的数据访问接口。它定义了模板中哪些字段可以被引用,以及这些字段如何被解析和展开。对于整合包作者来说, 可以把它理解为模板里的“可用变量与取值规则”;模板中的 ${...} 表达式最终就是由它来完成填充的。
生成条目 - Data Generator Entry
数据生成的模板数据提供条目,它决定了你在模板中能够调用哪些数据。它所构成的集合称为生成条目集(Data Generator Registry)。
用户的工作流
1. 确定数据属性
首先,我们要确认要生成的数据属于数据包文件还是资源包文件。这决定了我们将要基于哪一个生成包处理器。
对于数据包文件,我们需要进入数据生成包处理器,它所管理的目录包位于模组数据根目录下的 datapack。
对于资源包文件,我们需要进入资源生成包处理器,它所管理的目录包位于模组数据根目录下的 resourcepack。
确定好了之后,我们进入目录包的 generator 文件夹开展我们的工作。
2. 确定生成条目集
我们要明确 “为什么东西批量生成数据”。矿石魔种内置了三个条目集:
- 果实作物
croparia:crops:所有激活的果实作物。 - 巨果作物
croparia:melons:所有激活的巨果作物。 - 元素
croparia:elements:所有元素类型。
3. 确定数据生成器类型
数据有很多种组合方式,下面我们介绍本模组为解决多样的组合方式而提供的几种数据生成器:
- 数据生成器
croparia:generator:为每一个生成条目生成一个独立的产物,如果有两个产物的目标位置重叠,则后生成的产物会覆盖先生成的产物。 最常用,也是默认的生成器类型。 - 聚合生成器
croparia:aggregated:将相同目标位置的生成产物聚合的生成器。常用于标签数据。 - 语言生成器
croparia:lang:与聚合生成器类似,但专门为语言文件设计,仅可用于可翻译的生成条目。
4. 编写数据生成器
根据想要的效果,编写数据生成器文件。在先前确定的生成包处理器下的 generator 文件夹中创建一个 toml(推荐),cdg 或 json 文件即可开始实际编写。
具体的编写教程见创建数据生成器。
5. 运行与测试
当你成功编写了一个数据生成器后,就可以用指令 /croparia|cropariaServer generator query [生成包处理器 ID] [数据生成器名称] 查询到。
如果查询不到(没有补全提示),则说明生成器存在问题,查阅日志可以获取更详细的信息。
如果一切正常,你就能在目录包的 assets 或 data 文件夹中找到生成产物。进一步的效果需要自行在游戏中测试。
修改/禁用内置数据生成器
使用 /croparia|cropariaServer generator dumpBuiltin [生成包处理器 ID] [数据生成器名称] 导出数据生成器即可修改。
添加或修改 enabled = false 即可禁用这个数据生成器。