User Tools

Site Tools


zh_cn:tutorial:datagen_setup

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
zh_cn:tutorial:datagen_setup [2022/09/04 06:08] – created solidblockzh_cn:tutorial:datagen_setup [2024/04/15 03:10] (current) – [手动启用数据生成] 更新,同步en solidblock
Line 1: Line 1:
 ====== 数据生成入门 ====== ====== 数据生成入门 ======
  
-数据生成是 Fabric API 中的新模块,允许动态生成配方、语言文件、战利品表、进度以及几乎所有带有自定义 provider 的一切。+数据生成是 Fabric API 中的新模块,允许动态生成配方、语言文件、战利品表、进度以及几乎所有带有自定义提供器的一切。每次你修改生成数据的代码,你都会需要运行 gradle 任务 ''**runDatagen**''
  
-实现数据生成,请在你的 ''build.gradle'' 加入以下内容:+===== 启用数据生成 =====
  
-<code groovy> +启用数据生成 API 的方式是在使用 [[https://fabricmc.net/develop/template/|fabric template mod generator]] 创建项目时勾选 ''**Data generation**'' 框。
-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" +{{https://i.imgur.com/NjIARzL.png}}
-        } +
-    } +
-}+
  
-// 将数据生成的文件添加到 jar 中。 +这样我们就已经创建了 gradle 任务 ''**runDatagen**'',并且已经为 IDE 提供好了可以直接运行的配置,不需要使用终端。手动这么做也不会花费很长时间。 
-sourceSets { + 
-    main { +===== 手动启用数据生成 ===== 
-        resources { + 
-            srcDirs += [ +首先打开你项目根文件夹中的 ''**build.gradle**'' 文件,并在文件的某处添加以下内容: 
-                    'src/main/generated' + 
-            ] +<code groovy build.gradle [highlight_lines_extra="5,6,7"]> 
-        } + 
-    }+// 
 +// ... (文件剩余部分) 
 +// 
 + 
 +fabricApi { 
 +    configureDataGeneration()
 } }
 </code> </code>
  
-后,创建一个类并继承 ''DataGeneratorEntrypoint''并添加到你的 ''fabric.mod.json'' 中:+来我们在项目中定义新类 ''ExampleModDataGenerator''实现 ''DataGeneratorEntrypoint''
 + 
 +  * 运行我们先前创建的 gradle 任务(''runDatagen'')时会调用 ''**onInitializeDataGenerator**'' 方法。 
 + 
 +<code java ExampleModDataGenerator.java> 
 +import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; 
 +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; 
 + 
 +public class ExampleModDataGenerator implements DataGeneratorEntrypoint {
  
-<code java> 
-public class MyModDatagen implements DataGeneratorEntrypoint { 
     @Override     @Override
-    public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) { +    public void onInitializeDataGenerator(FabricDataGenerator generator) { 
-        // ...+        FabricDataGenerator.Pack pack = generator.createPack(); 
 + 
 +        // Adding a provider example: 
 +        //  
 +        // pack.addProvider(AdvancementsProvider::new);
     }     }
 +
 } }
 </code> </code>
  
-这会注册你的数据生成入口点,允许在运行 ''gradlew runDatagenClient'' 任务时,调用 ''onInitializeDataGenerator'' 
  
-<code javascript> +然后我们需要在 ''fabric.mod.json'' 文件中,告诉 Fabric 这个入口点: 
-"entrypoints": {+ 
 +<code javascript [highlight_lines_extra="6,7,8"]
 +
 + 
 +  // ...(文件的剩余部分) 
 + 
 +  "entrypoints": {
     "fabric-datagen": [     "fabric-datagen": [
-          "com.fabric.examplemod.MyModDatagen"+      "com.example.ExampleModDataGenerator" 
 +    ], 
 +    "main":
 +      "com.example.ExampleMod" 
 +    ], 
 +    "client":
 +      "com.example.ExampleModClient"
     ]     ]
 +  },
 +
 +
 +  // ...(文件的剩余部分)
 +
 } }
 </code> </code>
 +
 +我们先看看我们现在已经有的内容是否正常第一次,或者是否有任何的错误,确认无误后继续。运行 ''runDatagen'' 任务。你可以让 IDE 为你做这个,或者只需要在你的项目的根目录中打开终端并输入:
 +<code batch Windows>
 +gradlew runDatagen
 +</code>
 +
 +<code bash Linux>
 +./gradlew runDatagen
 +</code>
 +
 +看看结果并确认没有错误。
 +
 +  * 你可以忽略:''com.mojang.authlib.exceptions.InvalidCredentialsException: Status: 401'',如果出现了的话。这个错误是因为我们正在运行的 Minecraft 的调试版本不会验证我们的账户。
 +
 +如果你遇到错误,那么缺少或者错误的东西应该会非常清楚,但如果你无法查明,你可能需要前往 Discord 或 QQ 群中寻求帮助。
 +
 +''src/main'' 中应该会有个叫做 ''generated'' 的新文件夹。目前它会是空的,但我们生成数据(例如进度)之后,这些文件就会被保存。
 +
 +==== IDE 实现(可选) ====
 + 
 +由于我们不会总是开启终端,因此我们可以在 ''**Intellij IDEA**'' 中设置一个配置,通过下拉菜单运行命令。
 +
 +首先打开''**运行/调试配置**''菜单,要打开它,你可以打开“运行”按钮旁的下拉菜单,点击''**编辑配置..**''选项,也可以连续按两次 ''**Shift**'' 并在弹出的窗口中输入 ''**Edit Configuration**''
 +
 +然后点击 ''**'+'**'' 按钮,搜索 ''**gradle**'' 并选择。
 +
 +在 ''**运行**'' 输入框中,输入 ''**runDatagen**''。点击 ''**确定**'',然后你就可以直接运行配置而不需要打开终端了。
  
 ====== 添加提供器 ====== ====== 添加提供器 ======
Line 67: Line 114:
 在这个例子中,我们会创建一个标签提供器,因为最容易理解。 在这个例子中,我们会创建一个标签提供器,因为最容易理解。
  
-首先,在你的 ''MyModDatagen'' 类中,创建新的 ''private static class'' 并继承 ''FabricTagProvider<T>''+首先,在你的 ''DataGeneration'' 类中,创建新的 ''private static class'' 并继承 ''FabricTagProvider<T>''
  
 //如有需要,可以把这个类放到单独的文件中,不过我们建议放在数据生成入口点类中。// //如有需要,可以把这个类放到单独的文件中,不过我们建议放在数据生成入口点类中。//
Line 74: Line 121:
 private static class MyTagGenerator extends FabricTagProvider<Item> { private static class MyTagGenerator extends FabricTagProvider<Item> {
         public MyTagGenerator(FabricDataGenerator dataGenerator) {         public MyTagGenerator(FabricDataGenerator dataGenerator) {
-            super(dataGenerator, Registry.ITEM);+            super(dataGenerator, Registries.ITEM);  // 1.19.2 之前的版本用 Registry.ITEM
         }         }
  
Line 88: Line 135:
 <code java> <code java>
 // 创建名为“smelly_items”的物品标签。 // 创建名为“smelly_items”的物品标签。
-private static final TagKey<Item> SMELLY_ITEMS = TagKey.of(Registry.ITEM_KEY, new Identifier("mymod:smelly_items"));+private static final TagKey<Item> SMELLY_ITEMS = TagKey.of(RegistryKeys.ITEM, new Identifier("tutorial", "smelly_items"));
  
 @Override @Override
Line 97: Line 144:
               .add(Items.ROTTEN_FLESH)               .add(Items.ROTTEN_FLESH)
               .addOptionalTag(ItemTags.DIRT);               .addOptionalTag(ItemTags.DIRT);
-     // 在“generated”文件夹中,会自动生成“assets/mymod/tags/items/smelly_items.json”。+     // 在“generated”文件夹中,会自动生成“assets/tutorial/tags/items/smelly_items.json”。
 } }
 </code> </code>
Line 104: Line 151:
  
 <code java> <code java>
-public class MyModDatagen implements DataGeneratorEntrypoint {+public class DataGeneration implements DataGeneratorEntrypoint {
     @Override     @Override
     public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {     public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
zh_cn/tutorial/datagen_setup.1662271698.txt.gz · Last modified: 2022/09/04 06:08 by solidblock