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

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
zh_cn:tutorial:datagen_setup [2022/12/16 02:33] solidblockzh_cn:tutorial:datagen_setup [2023/11/18 08:58] 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}} 
-        } + 
-    } +这样我们就已经创建了 gradle 任务 ''**runDatagen**'',并且已经为 IDE 提供好了可以直接运行的配置,不需要使用终端。手动这么做也不会花费很长时间。 
-}+ 
 +===== 手动启用数据生成 ===== 
 + 
 +首先打开你的项目根文件夹中的 ''**build.gradle**'' 文件,并在文件的某处添加以下内容: 
 + 
 +<code groovy gradle.build [highlight_lines_extra="5,6,7,8,9,10,11,12,13"]> 
 + 
 +// 
 +// ... (文件剩余部分) 
 +//
  
-// 将数据生成的文件添加到 jar 中。 
 sourceSets { sourceSets {
     main {     main {
Line 33: Line 32:
 </code> </code>
  
-然后,创建一个类并继承 ''DataGeneratorEntrypoint''添加你的 ''fabric.mod.json'' +然后找到这个文件的 ''**loom**'' 部分添加以下内容: 
 + 
 +<code groovy gradle.build [highlight_lines_extra="9,10,11,12,13,14,15,16,17,18,19,20"]> 
 + 
 +// 
 +// ... (文件剩余部分) 
 +// 
 + 
 +loom { 
 + 
 +    // ... (已经存在的内容) 
 + 
 +    runs { 
 +        // 这会添加一个运行数据生成 API 的新 gradle 任务:"gradlew runDatagen" 
 +        datagen { 
 +            inherit server 
 +            name "Data Generation" 
 +            vmArg "-Dfabric-api.datagen" 
 +            vmArg "-Dfabric-api.datagen.output-dir=${file("src/main/generated")}" 
 +            vmArg "-Dfabric-api.datagen.modid=${modid}" 
 +  
 +            runDir "build/datagen" 
 +        } 
 +    } 
 +
 + 
 +// ... (文件剩余部分) 
 + 
 +</code> 
 + 
 +  * 注意:在一些情况下,你可能需要将 ''**inherit server**'' 这一行更改为 ''**inherit client**''。 
 + 
 +你可能注意到了这里使用了变量 ''${modid}'',这应该在 ''gradle.properties'' 文件中定义。检查其中是否存在,如果没有,你可以添加,就像这样: 
 + 
 +<code properties> 
 +// .. (文件的剩余部分) 
 + 
 +modid=你的模组的id 
 + 
 +// .. (文件的剩余部分) 
 +</code> 
 + 
 +然后,在项目中定义一个新的类 ''DataGeneration'' 并实现 ''DataGeneratorEntrypoint'' 
 +  * 其中的 ''onInitializeDataGenerator'' 方法会在我们前面创建的 Gradle 任务运行时调用。
  
 <code java> <code java>
-public class MyModDatagen implements DataGeneratorEntrypoint {+import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; 
 +import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; 
 + 
 +public class DataGeneration implements DataGeneratorEntrypoint { 
     @Override     @Override
     public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {     public void onInitializeDataGenerator(FabricDataGenerator fabricDataGenerator) {
-        // ...+
     }     }
 } }
 </code> </code>
  
-这会注册你的数据生成入口点,允许运行 ''gradlew runDatagenClient'' 任务时调用 ''onInitializeDataGenerator''+然后我们需要在 ''fabric.mod.json'' 文件中告诉 Fabric 这个入口点:
  
-<code javascript> +<code javascript [highlight_lines_extra="6,7,8"]
-"entrypoints": {+
 + 
 +  // ...(文件的剩余部分) 
 + 
 +  "entrypoints": {
     "fabric-datagen": [     "fabric-datagen": [
-          "com.fabric.examplemod.MyModDatagen"+      "com.example.ExampleModDataGenerator" 
 +    ], 
 +    "main":
 +      "com.example.ExampleMod" 
 +    ], 
 +    "client":
 +      "com.example.ExampleModClient"
     ]     ]
 +  },
 +
 +
 +  // ...(文件的剩余部分)
 +
 } }
 </code> </code>
 +
 +我们先看看我们现在已经有的内容是否正常第一次,或者是否有任何的错误,确认无误后继续。运行 ''runDatagenClient'' 任务。你可以让 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 155:
 在这个例子中,我们会创建一个标签提供器,因为最容易理解。 在这个例子中,我们会创建一个标签提供器,因为最容易理解。
  
-首先,在你的 ''MyModDatagen'' 类中,创建新的 ''private static class'' 并继承 ''FabricTagProvider<T>''+首先,在你的 ''DataGeneration'' 类中,创建新的 ''private static class'' 并继承 ''FabricTagProvider<T>''
  
 //如有需要,可以把这个类放到单独的文件中,不过我们建议放在数据生成入口点类中。// //如有需要,可以把这个类放到单独的文件中,不过我们建议放在数据生成入口点类中。//
Line 104: Line 192:
  
 <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.txt · Last modified: 2024/04/15 03:10 by solidblock