数据生成简介

数据生成器

数据生成器可以通过程序生成模组的资源和数据。开发者能够在代码中定义文件内容并自动生成文件,无需操心具体格式细节。

runData 通过 GatherDataEvent 添加数据提供器;客户端生成 assets,服务端生成 data,已有文件由 ExistingFileHelper 验证。

原创说明图,依据 Forge 1.21.x 官方文档 绘制。

数据生成系统由主类 net.minecraft.data.Main 加载。可以传入不同的命令行参数,定制收集哪些模组的数据、考虑哪些已有文件等。负责数据生成的类是 net.minecraft.data.DataGenerator。MDK 的 build.gradle 默认配置添加了用于运行数据生成器的 runData 任务。

已有文件

对数据生成过程未生成的纹理或其他数据文件的引用,都必须指向系统上已有的文件。这可确保引用的纹理位于正确位置,从而发现并修正拼写错误。

ExistingFileHelper 负责验证这些数据文件是否存在,可通过 GatherDataEvent#getExistingFileHelper 获取实例。

--existing <folderpath> 参数允许将指定文件夹及其子文件夹用于文件存在性验证。--existing-mod <modid> 参数还允许使用已加载模组的资源进行验证。默认情况下,ExistingFileHelper 只能访问原版数据包和资源。

生成器模式

数据生成器可通过命令行参数配置四种数据生成模式,并通过 GatherDataEvent#include*** 方法检查:

模式 用途 参数和检查方法
客户端资源 生成 assets 中仅客户端使用的文件,如方块/物品模型、方块状态 JSON、语言文件等。 --client,#includeClient
服务端数据 生成 data 中仅服务端使用的文件,如配方、进度、标签等。 --server,#includeServer
开发工具 运行开发工具,如 SNBT 与 NBT 互转等。 --dev,#includeDev
报告 导出所有已注册的方块、物品、命令等。 --reports,#includeReports

使用 --all 可包含全部生成器。

数据提供者

数据提供者是实际定义将生成和提供哪些数据的类。所有数据提供者都实现 DataProvider。Minecraft 为大多数资源和数据提供了抽象实现,模组开发者只需继承并重写指定方法。

创建数据生成器时,GatherDataEvent 在模组事件总线上触发,可从事件获取 DataGenerator。使用 DataGenerator#addProvider 创建并注册数据提供者。

客户端资源

服务端数据

以下类位于 net.minecraftforge.common.data 包:

以下类位于 net.minecraft.data 包:

原文:Data Generators。