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
zh_cn:tutorial:datagen_setup [2023/05/04 10:49] solidblockzh_cn:tutorial:datagen_setup [2024/04/15 03:10] (current) – [手动启用数据生成] 更新,同步en solidblock
Line 1: Line 1:
 ====== 数据生成入门 ====== ====== 数据生成入门 ======
  
-数据生成是 Fabric API 中的新模块,允许动态生成配方、语言文件、战利品表、进度以及几乎所有带有自定义 provider 的一切。+数据生成是 Fabric API 中的新模块,允许动态生成配方、语言文件、战利品表、进度以及几乎所有带有自定义提供器的一切。每次你修改生成数据的代码,你都会需要运行 gradle 任务 ''**runDatagen**''
  
-首先我们添加一个新的 Gradle 任务,运行我们来生成数据的代码,从而让 Minecraft 能够读都这些数据。每次你修改生成进度的代码(或其他数据生成可以生成的内容,如战利品表)你都需要运行 Gradle 任务 runDatagenClient。我们后面会做这个,但先打开你的 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 += [ +
-                    'src/main/generated' +
-            ] +
-        } +
-    } +
-+
-</code>+
  
-你可能注意到了,这里使了变量 ''${modid}'',这应该在 ''gradle.properties'' 文件中定义。检查其中是否存在,如果没有,你可以添加,就像这样:+===== 手动启数据生成 =====
  
-<code properties> +首先打开你的项目根文件夹中的 ''**build.gradle**'' 文件,并在文件的某处添加以下内容:
-// .. (文件的剩余部分)+
  
-modid=你的模组的id+<code groovy build.gradle [highlight_lines_extra="5,6,7"]>
  
-// .. (文件剩余部分)+// 
 +// ... (文件剩余部分) 
 +// 
 + 
 +fabricApi { 
 +    configureDataGeneration() 
 +}
 </code> </code>
  
-在项目中定义一个类 ''DataGeneration'' 实现 ''DataGeneratorEntrypoint'',并添加到你的 ''fabric.mod.json'' 中: +来我们在项目中定义新类 ''ExampleModDataGenerator''实现 ''DataGeneratorEntrypoint''. 
-  * 其中的 ''onInitializeDataGenerator'' 方法会在我们前创建的 Gradle 任务运行时调用。+ 
 +  * 运行我们前创建的 gradle 任务(''runDatagen'',会调用 ''**onInitializeDataGenerator**'' 方法
  
-<code java>+<code java ExampleModDataGenerator.java>
 import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint; import net.fabricmc.fabric.api.datagen.v1.DataGeneratorEntrypoint;
 import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator; import net.fabricmc.fabric.api.datagen.v1.FabricDataGenerator;
  
-public class DataGeneration implements DataGeneratorEntrypoint {+public class ExampleModDataGenerator 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>
 +
  
 然后我们需要在 ''fabric.mod.json'' 文件中,告诉 Fabric 这个入口点: 然后我们需要在 ''fabric.mod.json'' 文件中,告诉 Fabric 这个入口点:
Line 64: Line 54:
 { {
  
-  // ...(文件剩余部分)+  // ...(文件剩余部分)
  
   "entrypoints": {   "entrypoints": {
     "fabric-datagen": [     "fabric-datagen": [
-      "DataGeneration"+      "com.example.ExampleModDataGenerator"
     ],     ],
     "main": [     "main": [
-      "AdvancementsTutorial"+      "com.example.ExampleMod"
     ],     ],
     "client": [     "client": [
-      "AdvancementsTutorialClient"+      "com.example.ExampleModClient"
     ]     ]
   },   },
 +
  
   // ...(文件的剩余部分)   // ...(文件的剩余部分)
Line 83: Line 74:
 </code> </code>
  
-我们先看看我们现在已经有的内容是否正常第一次,或者是否有任何的错误,确认无误后继续。运行 ''runDatagenClient'' 任务。你可以让 IDE 为你做这个,或者只需要在你的项目的根目录中打开终端并输入:+我们先看看我们现在已经有的内容是否正常第一次,或者是否有任何的错误,确认无误后继续。运行 ''runDatagen'' 任务。你可以让 IDE 为你做这个,或者只需要在你的项目的根目录中打开终端并输入: 
 +<code batch Windows> 
 +gradlew runDatagen 
 +</code>
  
-<code bash> +<code bash Linux
-./gradlew runDatagenClient+./gradlew runDatagen
 </code> </code>
  
Line 96: Line 90:
  
 ''src/main'' 中应该会有个叫做 ''generated'' 的新文件夹。目前它会是空的,但我们生成数据(例如进度)之后,这些文件就会被保存。 ''src/main'' 中应该会有个叫做 ''generated'' 的新文件夹。目前它会是空的,但我们生成数据(例如进度)之后,这些文件就会被保存。
 +
 +==== IDE 实现(可选) ====
 + 
 +由于我们不会总是开启终端,因此我们可以在 ''**Intellij IDEA**'' 中设置一个配置,通过下拉菜单运行命令。
 +
 +首先打开''**运行/调试配置**''菜单,要打开它,你可以打开“运行”按钮旁的下拉菜单,点击''**编辑配置..**''选项,也可以连续按两次 ''**Shift**'' 并在弹出的窗口中输入 ''**Edit Configuration**''
 +
 +然后点击 ''**'+'**'' 按钮,搜索 ''**gradle**'' 并选择。
 +
 +在 ''**运行**'' 输入框中,输入 ''**runDatagen**''。点击 ''**确定**'',然后你就可以直接运行配置而不需要打开终端了。
  
 ====== 添加提供器 ====== ====== 添加提供器 ======
zh_cn/tutorial/datagen_setup.1683197381.txt.gz · Last modified: 2023/05/04 10:49 by solidblock