User Tools

Site Tools


zh_cn:documentation:fabric_loom

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:documentation:fabric_loom [2022/03/20 13:29] – [默认配置] solidblockzh_cn:documentation:fabric_loom [2023/10/10 15:33] (current) – Sync rawdiamondmc
Line 1: Line 1:
 ====== Fabric Loom ====== ====== Fabric Loom ======
  
-Fabric Loom,或者简称为 Loom,是个 [[https://gradle.org/|Gradle]] 插件,用于 Fabric 生态系统的模组开发中。Loom 提供了在开发环境中安装 Minecraft 和模组的一系列工具,所以你可以针对 Minecraft 混淆及其发行版和版本之间的差异来将 Loom 与 Minecraft 链接起来。Loom 还提供了用于 Fabric 加载器的运行配置、mixin 编译处理,以及用于 Fabric Loader 的 jar 中 jar 系统的工具。+Fabric Loom,或者简称为 Loom,是个 [[https://gradle.org/|Gradle]] 插件,用于 Fabric 生态系统的模组开发中。Loom 提供了在开发环境中安装 Minecraft 和模组的一系列工具,所以你可以针对 Minecraft 混淆及其发行版和版本之间的差异来将 Loom 与 Minecraft 链接起来。Loom 还提供了用于 Fabric 加载器的运行配置、mixin 编译处理,以及用于 Fabric Loader 的 jar-in-jar 系统的工具。
  
 ==== 常用任务 ==== ==== 常用任务 ====
  
   * ''migrateMappings'':将当前源代码合并到指定的映射中。见 [[zh_cn:tutorial:migratemappings]]。   * ''migrateMappings'':将当前源代码合并到指定的映射中。见 [[zh_cn:tutorial:migratemappings]]。
-  * ''remapJar'':产生包含 ''jar'' 任务的重映射的输出的 jar。同时也会将 jar 中 jar 包含在模组中。运行 ''build'' 时会调用。+  * ''remapJar'':产生包含 ''jar'' 任务的重映射的输出的 jar。同时也会将 jar-in-jar 包含在模组中。运行 ''build'' 时会调用。
   * ''genSources'':使用默认的反编译器(CFR)反编译 Minecraft jar。   * ''genSources'':使用默认的反编译器(CFR)反编译 Minecraft jar。
   * ''downloadAssets'':下载配置的 Minecraft 版本的资源索引和对象,下载到用户缓存中。   * ''downloadAssets'':下载配置的 Minecraft 版本的资源索引和对象,下载到用户缓存中。
   * ''genEclipseRuns'':安装 Eclipse 运行配置并创建运行目录(如果还不存在)。   * ''genEclipseRuns'':安装 Eclipse 运行配置并创建运行目录(如果还不存在)。
   * ''vscode'':生成或覆盖 Visual Studio Code 的 ''launch.json'' 文件,启动配置在 ''.vscode'' 文件夹中,并创建运行目录,如果还不存在。   * ''vscode'':生成或覆盖 Visual Studio Code 的 ''launch.json'' 文件,启动配置在 ''.vscode'' 文件夹中,并创建运行目录,如果还不存在。
 +  * ''ideaSyncTask'':生成(但是不会覆盖)Intellij IDEA 的启动配置,包括客户端和服务器。
   * ''remapSourcesJar'':只有在 AbstractArchiveTask ''sourcesJar'' 存在时存在。将 ''sourcesJar'' 任务的输出重映射。   * ''remapSourcesJar'':只有在 AbstractArchiveTask ''sourcesJar'' 存在时存在。将 ''sourcesJar'' 任务的输出重映射。
   * ''runClient'':将 Fabric Loader 作为 Minecraft 客户端运行的 JavaExec 任务。   * ''runClient'':将 Fabric Loader 作为 Minecraft 客户端运行的 JavaExec 任务。
Line 21: Line 22:
 <code> <code>
 dependencies { dependencies {
- implementation project(path: ":name", configuration: "namedElements")+    implementation project(path: ":name", configuration: "namedElements")
 } }
 </code> </code>
 +
 +如果你在多项目构建中使用分离源集,你还需要为其他项目客户端源集添加依赖项。
 +
 +<code>
 +dependencies {
 +    clientImplementation project(":name").sourceSets.client.output
 +}
 +</code>
 +
 +==== 分离客户端与常规代码 ====
 +
 +多年来,服务器崩溃往往是因为安装在服务器上时意外调用客户端代码。最新的 loom 和 loader 版本提供了一个选项,要求将所有客户端代码移动到其自己的源集中。这样做是为了提供编译时的保证,以防止在服务器上调用仅限客户端的 Minecraft 代码或仅限客户端的 API。在客户端和服务器上都可以使用的单个 jar 文件仍然是从两个源集构建的。
 +
 +以下 build.gradle 文件片段展示了如何为您的模组启用此功能。由于您的模组现在将拆分为两个源集,因此您将需要使用新的 DSL 来定义您的模组源集。这将会让 Fabric Loader 将您的模组类路径组合在一起,对于其他一些复杂的多项目设置也有用。
 +
 +要分享客户端与服务器的代码,需要 Minecraft 1.18(建议 1.19)、Loader 0.14 和 Loom 1.0 以上的版本。
 +<code>
 +loom {
 + splitEnvironmentSourceSets()
 +
 + mods {
 +        modid {
 +            sourceSet sourceSets.main
 +            sourceSet sourceSets.client
 +        }
 + }
 + }
 +</code>
 +
 +==== 多项目优化 ====
 +
 +如果你的 Gradle 项目有多个子项目并使用相同的 Minecraft 版本,如 Fabric API,从 Loom 1.1 开始,你可以选择使用高级的优化。在 gradle.properties 中加入 <code>fabric.loom.multiProjectOptimisation=true</code>从而减少构建时间和内存使用,因为会在重映射多个输出的 jar 时在项目之间共享 Tiny Remapper 实例。
  
 ==== 选项 ==== ==== 选项 ====
Line 95: Line 128:
  // 用于配置 mixin 选项,或应用到额外的源集。  // 用于配置 mixin 选项,或应用到额外的源集。
  mixin {  mixin {
- // 若禁用,会使用微小重映射器来重映射 Mixin 而非 AP。实验性。+ // 若禁用,会使用 tiny remapper 来重映射 Mixin 而非 AP。实验性。
  useLegacyMixinAp = true  useLegacyMixinAp = true
  // 设置默认的 refmap 名称  // 设置默认的 refmap 名称
Line 121: Line 154:
  // 若启用,将会应用配置的注入的接口。  // 若启用,将会应用配置的注入的接口。
  enableDependencyInterfaceInjection = true  enableDependencyInterfaceInjection = true
 + }
 +
 + // 将 Minecraft jar 和传入的依赖项拆分到 main(common)和仅限客户端的源集。
 + // 这可以在编译期间就确保访问仅限客户端的代码时的安全。
 + splitEnvironmentSourceSets()
 +
 + // 这个 mods 语句块用于将由多个类路径的项组合在一起。
 + mods {
 + modid {
 + // 使用分离的资源时,你应该添加 main 和 common 源集
 + sourceSet sourceSets.main
 + sourceSet sourceSets.client
 + }
  }  }
 } }
Line 220: Line 266:
   * ''mappings'':定义用于开发环境的映射。   * ''mappings'':定义用于开发环境的映射。
   * ''modCompile''、''modImplementation''、''modApi'' 和''modRuntime'':相当于''compile''、''implementation''、''api''和''runtime''的增强型变种,用于模组依赖。会被重映射以对应开发环境,并且会移除嵌套的 JAR。可以选择导出并重映射嵌套的 JAR。   * ''modCompile''、''modImplementation''、''modApi'' 和''modRuntime'':相当于''compile''、''implementation''、''api''和''runtime''的增强型变种,用于模组依赖。会被重映射以对应开发环境,并且会移除嵌套的 JAR。可以选择导出并重映射嵌套的 JAR。
-  * ''include'':生命一个应在 ''remapJar'' 输出中包含的 jar 中 jar 依赖。该依赖配置是不可传递的。对于非模组依赖,Loom 会生成一个模组 JAR,其中 fabric.mod.json 使用模组 ID 的名称和相同版本。+  * ''include'':生命一个应在 ''remapJar'' 输出中包含的 jar-in-jar 依赖。该依赖配置是不可传递的。对于非模组依赖,Loom 会生成一个模组 JAR,其中 fabric.mod.json 使用模组 ID 的名称和相同版本。
  
 ==== 默认配置 ==== ==== 默认配置 ====
zh_cn/documentation/fabric_loom.1647782981.txt.gz · Last modified: 2022/03/20 13:29 by solidblock