Fabric 教程
安装
- 启用 log4j 调试信息(英文)
基础
- 约定和术语
- 注册
- 开发工具
物品
方块和方块实体
数据生成
世界生成
命令
事件
实体
流体
Mixin 和 ASM
杂项
Yarn
贡献 Fabric
- FabLabs - 在提交 PR 之前起草新功能的试验场
数据生成是 Fabric API 中的新模块,允许动态生成配方、语言文件、战利品表、进度以及几乎所有带有自定义 provider 的一切。
实现数据生成,请在你的 build.gradle
加入以下内容:
loom { runs { // 添加一个新的 gradle 任务,会运行数据生成 API:“gradlew runDatagenClient” datagenClient { inherit client name "Data Generation" vmArg "-Dfabric-api.datagen" vmArg "-Dfabric-api.datagen.output-dir=${file("src/main/generated")}" vmArg "-Dfabric-api.datagen.strict-validation" runDir "build/datagen" } } } // 将数据生成的文件添加到 jar 中。 sourceSets { main { resources { srcDirs += [ 'src/main/generated' ] } } }
然后,创建一个类并继承 DataGeneratorEntrypoint
,并添加到你的 fabric.mod.json
中:
public class MyModDatagen implements DataGeneratorEntrypoint { @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { // ... } }
这会注册你的数据生成入口点,允许在运行 gradlew runDatagenClient
任务时,调用 onInitializeDataGenerator
。
"entrypoints": { "fabric-datagen": [ "com.fabric.examplemod.MyModDatagen" ] }
这里有一些概述,讲述如何添加提供器,关于每个提供器更加详细的信息,请阅读以下几个页面:
在这个例子中,我们会创建一个标签提供器,因为最容易理解。
首先,在你的 MyModDatagen
类中,创建新的 private static class
并继承 FabricTagProvider<T>
:
如有需要,可以把这个类放到单独的文件中,不过我们建议放在数据生成入口点类中。
private static class MyTagGenerator extends FabricTagProvider<Item> { public MyTagGenerator(FabricDataGenerator dataGenerator) { super(dataGenerator, Registries.ITEM); // 1.19.2 之前的版本用 Registry.ITEM } @Override protected void generateTags() { } }
作为示例,我们会在 generateTags()
中添加一些基本的标签:
// 创建名为“smelly_items”的物品标签。 private static final TagKey<Item> SMELLY_ITEMS = TagKey.of(RegistryKeys.ITEM, new Identifier("tutorial", "smelly_items")); @Override protected void generateTags() { // 创建一个 tag builder,我们添加粘液球、腐肉以及物品标签 minecraft:dirt 中的所有内容。 getOrCreateTagBuilder(SMELLY_ITEMS) .add(Items.SLIME_BALL) .add(Items.ROTTEN_FLESH) .addOptionalTag(ItemTags.DIRT); // 在“generated”文件夹中,会自动生成“assets/tutorial/tags/items/smelly_items.json”。 }
现在,我们需要在你的入口点类的 onInitializeDataGenerator
中的数据生成器中,注册这个提供器。
public class MyModDatagen implements DataGeneratorEntrypoint { @Override public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { fabricDataGenerator.addProvider(MyTagGenerator::new); } }
当我们运行 gradlew runDatagenClient
,我们将会看到生成的文件形式,物品标签 json 应该存在:
{ "replace": false, "values": [ "minecraft:slime_ball", "minecraft:rotten_flesh", { "id": "#minecraft:dirt", "required": false } ] }