User Tools

Site Tools


zh_cn:tutorial:mappings

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:mappings [2019/12/18 11:36] lightcolourzh_cn:tutorial:mappings [2024/04/15 00:57] (current) solidblock
Line 1: Line 1:
 ====== 映射 ====== ====== 映射 ======
  
-==== 介绍 ==== +==== 定义 ====
- +
-映射定义类,字段和方法的名称。 在普通的织机环境中,使用[[https://github.com/FabricMC/yarn|Yarn]]映射,该映射为社区确定的Minecraft代码库提供了有意义的名称。 [[https://github.com/FabricMC/intermediary|Intermediary]]也是Fabric使用的基本映射类型。 对映射的需求来自对Minecraft版本的混淆,这带来了许多挑战。 重新映射是将映射应用于已编译的类或源文件的过程。+
  
 +映射(mapping)定义了类、字段和方法的名称。在常规的 loom 环境中,使用的是 [[https://github.com/FabricMC/yarn|Yarn]] 映射,这是社区决定的,它为 Minecraft 的代码库提供了有意义的名称。[[https://github.com/FabricMC/intermediary|Intermediary]] 也是 Fabric 使用的一个必要的映射类型。需要映射是因为 Minecraft 发布的混淆(obfuscation),这代表了多个挑战。重映射(remapping)是对编译的类或者源代码文件应用映射的过程。
 ==== 使用映射 ==== ==== 使用映射 ====
 +在 Loom 中,映射定义了你在开发环境中使用的 Minecraft 类、字段和方法的名称。这些名称可能因开发环境而异,取决于你安装的映射。
  
-Loom中,映射定义了开环境中使的Minecraft类字段和方法的名称。 根据安装的映射这些称可能因开发环境而异+Yarn 是 Loom 使用的默认映射。随着对贡献的接受,Yarn 逐渐改进并接受新的布。Loom 的映射是使 buildscript 中的 ''mappings'' 依赖配置指定的,可以通过更新依赖来更新。Minecraft 以及包含在模组增强依赖配置中的依赖项(如''modCompile'')都是通过映射来重映射的。不在 Yarn 中映射的字段和方法,会以中间显示,如''class_1234''、''method_1234''、''field_1234''
  
-毛线是Loom使用的默认映射。 随着贡献的增加,纱线会逐渐改进并获得新的版本。 使用构建脚本中的“映射”依赖项配置来指定Loom中的映射,并且可以通过更新依赖项来进行更新。 Minecraft以及mod增强的依赖项配置(例如 ''modCompile'' )中包含的依赖项均通过映射进行映射。 未在Yarn中映射的类,字段和方法的中间名称为''class_1234'',''method_1234''和''field_1234''。 +<code groovy>
- +
-<code>+
 dependencies { dependencies {
     [...]     [...]
Line 18: Line 16:
 </code> </code>
  
-通过更改开发环境中的映射,可以预期Minecraft中的类方法和字段的名称以及所有包含的mod均已更改,并且可能必须更新代码以引用更改的名称。 [[tutorial:migratemappings|过程可以部分自动化]]。 您还必须运行''genSources''以使用更新的映射访问Minecraft源。+变您的开发环境中的映射,Minecraft 以及包括的模组中的类方法和字段的名称都可能会您的代码可能需要更新才能引用更改的名称。[[tutorial:migratemappings|这一过程可以部分自动化]]。你可能也需要运行 ''genSources'' 来运行带有更新的映射的 Minecraft 源代码
  
-Loom的''remapJar''任务将产生主要mod工件是使用中间名称构建的jar。 此外,如果存在''sourcesJar''任务,''remapSourcesJar''使用中间名称生成一个源jar。 这些jar可以安装为mod包含在具有''modCompile''依赖配置开发环境中。 +Loom 的 ''remapJar'' 任务会提供原始模组成品这个成品是使用中间名的 jar 文件。此外,如果有 ''sourcesJar'' 任务,''remapSourcesJar'' 会产生使用中间名代码jar。这些 jar 文件都可以作为模组安装者连同 ''modCompile'' 依赖配置一起被包括在开发环境中。 
-* **'-dev'jar(''jar''任务输出)不使用中,因此没有用。**不能将其作为mod安装开发环境之外,且只能在 匹配映射的开发环境。 应该改用常规jar(''remapJar''任务输出),并使用经过mod增强依赖项配置(例如''modCompile'')将其安装在开发环境中。 + 
-   * **纱线名称仅开发环境中应用**。 在开发环境之外,存在中间名这意味着代码将与您写的内容完全不匹配。 Loom可以为您透明地处理此过渡,但是使用反射时要格外小心+  * **'-dev' jar(''jar'' 任务输出)不使用中名,因此用。**不可以被安装开发环境之外的模组,且只能在相符的映射的开发环境中起作常规jar文件(''remapJar'' 任务输出)才应被使用,并使用像 ''modCompile'' 这样的模组增强依赖项安装在开发环境中。 
 +  * **Yarn 名称仅应用于开发环境**。在开发环境之外,存在中间名,也就是说代码不会准确地匹配你和写的东西。Loom 可以透明地为您处理这个转换,但是使用反射([[reflection]])时要谨慎。 
 + 
 +=== Mojang 的映射 === 
 + 
 +自 Loom 0.5,你也可以使用 Mojang 的官方映射而不是 Yarn,像这样: 
 + 
 +<code groovy> 
 +dependencies { 
 +    [...] 
 +    mappings minecraft.officialMojangMappings() 
 +
 +</code> 
 + 
 +Mojang 的映射带有可用的但比 Yarn 更严的许可证。您需要自行承担使用的风险
  
 === 自定义映射 === === 自定义映射 ===
  
-You can use custom tiny mappings for Fabric Loom for your Gradle project setup.+您也可以在您的 Gradle 项目设置为 Fabric Loom 使用自定义的微型映射。 
 + 
 +比如,如果您有需要用于映射的自定义 Yarn 分支,你可以使用“./gradlew build”命令建立 yarn,拿出“build/libs”目录中的 jar 文件,然后移动到您的 Gradle 项目中的“mapping”文件夹下。然后,将您的映射依赖项更改为:
  
-例如,如果您有一个要用于映射的自定义毛线分支,则可以使用'' ./gradlew build''命令纱,取出'' build / libs''目录中的jar文件,然后将其移动到 Gradle项目中的''映射''文件夹。 然后,将映射依赖项更改为: +<code yarn>
-<code>+
 dependencies { dependencies {
     mappings fileTree(dir: "mapping", include: "**.jar")     mappings fileTree(dir: "mapping", include: "**.jar")
Line 35: Line 48:
 </code> </code>
  
-您可以放置映射的目录更改为任何自定义名称。 只需上面的''dir''参数中更改名称即可。 注意,如果映射目录中映射jar除了其他文件,Gradle构建将失败!+您可以更改放置映射的目录,使其具有任何自定义名称只需更改上面的dir参数中名称。注意,如果映射目录中映射 jar 文件以外的任何其他文件,Gradle构建将失败!
  
-==== 重映射 ====+==== 重映射 ====
  
-映射是将映射应用于代码,从一组名称转换为另一组名称的过程。 Java源代码和已编译Java代码都可以重新映射。 它涉及根据映射更改引用的名称,以及仔细重命名方法以保留替代。 尽管它将影响反射中使用的名称,但它不会更改代码的功能+重映射是将映射应用于代码,从一组名称转换为另一组名称的过程。Java 源代码和已编译的 Java 代码都可以重新映射涉及根据映射更改引用的名称,以及仔细重命名方法以保留替代。这不会更改代码的功能,但可能会影响[[reflection|反射]]中使用的名称。
  
-[[https://github.com/FabricMC/tiny-remapper|微小的重新映射]] 是可以重映射已编译Java代码的工具。 它具有命令行界面和可编程界面。 Loom使用Tiny Remapper完成许多任务,Fabric Loader使用Tiny Remapper将Minecraft代码重新映射到中介。 Loom还能够重新映射Java源代码。+[[https://github.com/FabricMC/tiny-remapper|Tiny Remapper]] 是可以重映射已编译的 Java 代码的工具具有命令行界面和可编程界面。Loom 使用 iny Remapper 完成许多任务,Fabric Loader 使用 Tiny Remapper 将 Minecraft 代码重新映射到中介。Loom 还能够重新映射 Java源代码。
  
 ==== 混淆和反混淆 ==== ==== 混淆和反混淆 ====
  
-Minecraft Java Edition的发行版是混淆的jar文件,这意味着它们是已编译的二进制文件,其中剥离了任何有意义的命名信息,仅保留了裸露的逻辑。 模糊处理动机是防止反向工程并减小文件大小。 像Minecraft这样的Java程序很容易反编译,但是混淆处理剥夺了很多对修改目的有用的信息。 也许有人会怀疑一开始如何为Minecraft进行开发。+Minecraft Java Edition 的发行版是混淆的 jar 文件,这意味着是已编译的二进制文件,其中剥离了任何有意义的命名信息,仅保留了裸露的逻辑。混淆的目的是防止反向工程并减小文件大小。像 Minecraft 这样的 Java 程序很容易反编译,但是混淆处理剥夺了很多对修改目的有用的信息。也许有人会怀疑一开始如何为 Minecraft 进行开发。
  
-像Yarn这样的映射为开发提供了有意义的名称。 使用映射可以理解Minecraft代码并为其创建mod。 映射可以提供类字段方法参数和局部变量的名称。 显然,这些映射并不完美。 绘制《我的世界》的整个地图需要来自多个贡献者的大量猜测。 映射可能不完整,有时会随着找到更准确的名称而更改。+像 Yarn 这样的映射为开发提供了有意义的名称。使用映射可以理解 Minecraft 代码并为其创建模组。映射可以提供类字段方法参数和局部变量的名称。显然,这些映射并不完美。完成 Minecraft 的整个映射表需要来自多个贡献者的大量猜测。映射可能不完整,有时会随着找到更准确的名称而更改。
  
 ==== 中间名 ==== ==== 中间名 ====
  
-Minecraft的混淆特性是在Minecraft版本之间并不总是一致。在Minecraft的一个版本中,一个类可能被称为''abc'',而在另一个版本中则被称为''abd''。同样的不一致也适用于字段和方法。不一致会导致Minecraft版本之间的二进制不兼容。+Minecraft 的混淆有个,在 Minecraft 版本之间并不总是一致。在 Minecraft 的一个版本中,一个类可能被称为 ''abc'',而在另一个版本中则被称为 ''abd''。同样的不一致也适用于字段和方法。不一致会导致 Minecraft 版本之间的二进制不兼容。
  
-Java代码可以针对一个库版本进行编译,但仍可与另一个版本一起使用,从而使库的两个版本可以二进制兼容。简而言之,如果库公开了至少相同的类,相同的方法和具有相同名称的字段,则将实现二进制兼容性。当使用Minecraft作为mods的库时,由于缺乏二进制兼容性,Minecraft的混淆问题带来了挑战。+Java 代码可以针对一个库版本进行编译,但仍可与另一个版本一起使用,从而使库的两个版本可以二进制兼容。简而言之,如果库公开了至少相同的类,相同的方法和具有相同名称的字段,则将实现二进制兼容性。当使用 Minecraft 作为模组的库时,由于缺乏二进制兼容性,Minecraft 的混淆问题(为模组在不同游戏版本间的兼容性)带来了挑战。
  
-介为Minecraft版本之间Minecraft内部定义稳定名称。中名称的目的是始终引用相同的类字段或方法。与纱线名称不同,中间名称没有意义,而是遵循数字模式,例如''class_1234''''method_1234''和''field_1234''+间名在 Minecraft 版本之间为 Minecraft 内部定义稳定名称。中名称的目的是始终引用相同的类字段或方法。与 Yarn 名称不同,中间名称没有意义,而是遵循数字模式,例如 ''class_1234''''method_1234'' 和 ''field_1234''
  
-作为稳定的映射,中间名可以使Minecraft二进制兼容多个版本(例如快照版本)!仅对于版本之间未更改的游戏部分才保证兼容性。当安装在开发环境之外时,Fabric Loader通过在游戏开始之前重映射Minecraft(和Realms客户端)来为环境提供中间名称。通过查看安装了Fabric Loader的生产环境中的崩溃报告可以观察到此情况,该报告将包含中间名称。用Loom所应用的中间名称编译的Mod与此环境自然兼容。+作为稳定的映射,中间名可以使 Minecraft 二进制兼容多个版本(例如快照版本)!但需要注意的是,它仅对于版本之间未更改的游戏部分才保证兼容性。当安装在开发环境之外时,Fabric Loader 通过在游戏开始之前重映射 Minecraft(和 Realms 客户端)来为环境提供中间名称。通过查看安装了 Fabric Loader 的生产环境中的崩溃报告可以观察到此情况,该报告将包含中间名称。用 Loom 所应用的中间名称编译的模组与此环境自然兼容。
zh_cn/tutorial/mappings.1576669006.txt.gz · Last modified: 2019/12/18 11:36 by lightcolour