• Forge论坛

导航页

  • 主页
  • 向文档做出贡献
  • 入门
    • 概述
    • 模组文件
    • 规划你的模组结构
    • 版本号
  • 核心概念
    • 注册表
    • 端位(Sides)
    • 事件
    • 模组生命周期
    • 资源
    • 国际化与本地化
  • 方块
    • 概述
    • 方块状态
  • 物品
    • 概述
    • BlockEntityWithoutLevelRenderer
  • 网络
    • 概述
    • SimpleImpl
    • 实体的同步
  • 方块实体
    • 概述
    • BlockEntityRenderer
  • 游戏特效
    • 粒子效果
    • 音效
  • 数据储存
    • Capabilities
    • Saved Data
    • 编解码器(Codecs)
  • 图形用户界面
    • 菜单(Menus)
    • 屏幕(Screens)
  • 渲染
    • 模型扩展
      • 概述
      • 根变换
      • 渲染类型
      • 部分可见度
      • 面数据
    • 模型加载器
      • 概述
      • 烘焙模型
      • 变换
      • 物品重载
  • 资源
    • 客户端资源(Assets)
      • 概述
      • 模型
        • 概述
        • 纹理色调
        • 物品属性
    • 服务端数据(Data)
      • 概述
      • 配方
        • 概述
        • 自定义配方
        • 原料
        • 非数据包配方
      • 战利品表
      • 全局战利品修改器
      • 标签
      • 进度
      • 条件性加载数据
  • 数据生成
    • 概述
      • 现存的文件
      • 生成器模式
      • 数据提供者
    • 客户端资源(Assets)
      • 模型提供者
      • 语言提供者
      • 音效提供者
    • 服务端数据(Data)
      • 配方提供者
      • 战利品表提供者
      • 标签提供者
      • 进度提供者
      • 全局战利品修改器提供者
      • 数据包注册表对象提供者
  • 杂项功能
    • 配置
    • 键盘布局
    • 游戏测试
    • Forge更新检查器
    • 调试分析器
  • 进阶主题
    • 访问转换器
  • 向Forge做出贡献
    • 概述
    • Pull Request准则
  • 旧版本
    • 概述
    • 移植到当前版本

数据生成

数据生成器是以编程方式生成模组的资源(asset)和数据(data)的一种方式。它允许在代码中定义这些文件的内容并自动生成它们,而不必担心细节。

数据生成器系统由主类net.minecraft.data.Main加载。可以传递不同的命令行参数来自定义收集了哪些模组的数据,考虑了哪些现有文件等。负责数据生成的类是net.minecraft.data.DataGenerator。

MDK的build.gradle中的默认配置添加了用于运行数据生成器的runData任务。

现存的文件

对未为数据生成而生成的纹理或其他数据文件的所有引用都必须引用系统上的现有文件。这是为了确保所有引用的纹理都在正确的位置,这样就可以找到并更正拼写错误。

ExistingFileHelper是负责验证这些数据文件是否存在的类。可以从GatherDataEvent#getExistingFileHelper中检索实例。

--existing <folderpath>参数允许在验证文件是否存在时使用指定的文件夹及其子文件夹。此外,--existing-mod <modid>参数允许将加载的模组的资源用于验证。默认情况下,只有普通的数据包和资源可用于ExistingFileHelper。

生成器模式

数据生成器可以配置为运行4个不同的数据生成,这些数据生成是通过命令行参数配置的,并且可以通过GatherDataEvent#include***方法进行检查。

  • Client Assets
  • 在assets中生成仅客户端文件:f方块/物品模型、方块状态JSON、语言文件等。
  • --client, #includeClient
  • Server Data
  • 在data中生成仅服务端文件:配方、进度、标签等。
  • --server, #includeServer
  • Development Tools
  • 运行一些开发工具:将SNBT转换为NBT,反之亦然,等等。
  • --dev, #includeDev
  • Reports
  • 转储所有已注册的方块、物品、命令等。
  • --reports, #includeReports

所有的生成器都可以使用--all包含在内。

数据提供者

数据提供者是实际定义将生成和提供哪些数据的类。所有数据提供者都实现DataProvider。Minecraft对大多数asset和data都有抽象实现,因此模组开发者只需要扩展和覆盖指定的方法。

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

客户端资源(Assets)

  • net.minecraftforge.common.data.LanguageProvider - 针对语言设置;实现#addTranslations
  • net.minecraftforge.common.data.SoundDefinitionsProvider - 针对sounds.json;实现#registerSounds
  • net.minecraftforge.client.model.generators.ModelProvider<?> - 针对[模型];实现#registerModels
    • ItemModelProvider - 针对物品模型
    • BlockModelProvider - 针对方块模型
  • net.minecraftforge.client.model.generators.BlockStateProvider - 针对方块状态JSON以及其方块和物品模型;实现#registerStatesAndModels

服务端数据(Data)

这些类在net.minecraftforge.common.data包之下:

  • GlobalLootModifierProvider - 针对全局战利品修改器;实现#start
  • DatapackBuiltinEntriesProvider - 针对数据包注册表对象;向构造函数传递RegistrySetBuilder

这些类在net.minecraft.data包之下:

  • loot.LootTableProvider - 针对战利品表;向构造函数传递LootTableProvider$SubProviderEntry
  • recipes.RecipeProvider - 针对[配方]以及其解锁的进度;实现#buildRecipes
  • tags.TagsProvider - 针对[标签];实现#addTags
  • advancements.AdvancementProvider - 针对[进度];向构造函数传递AdvancementSubProvider
Built with MkDocs using a custom theme. Hosted by Read the Docs.
Enable Dark Theme