Learn · concepts
什么是中介?? Minecraft 映射详解
Fabric 的稳定命名层是用于混淆 Minecraft 代码的中介层。即使字段被重命名,模组也能在不同版本间持续工作,而不会中断.
什么是中介层?
中介层是 Fabric 为 Minecraft 混淆的代码覆盖的稳定命名层。Mojang 发布的游戏包含经过打乱的类、字段和方法名称,这些名称在每次发布时都会发生变化。中介层为这些名称提供一个固定的名称,该名称在不同版本中保持不变,因此编译后的模组即使在游戏底层更新后也能继续找到它要修补的代码。
把它想象成一个合同:Fabric 承诺,如果游戏中有某个东西存在,它将在所有版本中都具有相同的中介层名称。正是这个合同允许以编译后的 jar 文件形式发布的模组在不重新编译的情况下继续在新版本上工作。
中介层实际上是什么
中介层是一组映射:一个查找表,它将每个混淆的 Minecraft 符号与一个稳定、机器生成的名称配对。游戏称为 a 的类在 Intermediary 中可能变为 class_1234。这个名称可能很丑,但对于该符号而言,它在所有发布版本中都是永久性的。
Mojang 在每次构建中都会混淆游戏。如果没有混淆,名称会在发布版本之间发生变化,这就是为什么针对原始混淆名称编译的模组在游戏更新的瞬间就会失效的原因。中介层冻结了这些名称,使映射而不是模组吸收了变化.
为什么 Fabric 模组需要它
模组是以针对中介名称编译发布,而不是开发者编写的可读名称。这个决定是为什么在许多情况下,Fabric 模组可以在新的游戏构建上继续运行而无需重新编译。
当游戏启动时,Fabric 会加载该版本的“中介”映射,并将混淆的游戏类重新映射到模组期望的稳定名称。模组和游戏在名称集合上达成一致,而这个名称集合并非双方直接提供。
中介与开发者映射
开发者不会读取或写入 class_1234。他们使用像 Yarn 或 Mojmap 这样的可读映射进行工作,这些映射会为符号提供描述性名称。在构建时,这些可读名称会被编译成中介形式以供发布。
| 层级 | 示例名称 | 使用者 | 版本稳定 |
|---|---|---|---|
| 混淆 | a, field_5678 | 没人手动 | 否 |
| 中介 | class_1234, method_5678 | 发行的模组二进制文件 | 是 |
| Yarn / Mojmap | MinecraftClient, isPlayerSpawned() | 构建时开发者 | 可读,版本跟踪 |
这种分离允许开发者使用友好的名称进行编码,而实际发布的版本则保持稳定。可读映射可以被替换;中介是每个人都同意的共同基础。
它如何适应模组的生命周期
- 开发人员基于可读的映射(例如 Yarn 或 Mojmap)编写代码。
- 构建过程将这些名称转换为中间名称。
- 该模组以一个 JAR 文件形式发布,其中引用中间符号。
- 启动时,Fabric 将正在运行的游戏从其混淆名称重新映射为中间名称,以便模组和游戏能够对齐。
这就是为什么映射是 Fabric 模组开发中一个安静但关键的部分:它们是确保模组在每次更新后都能指向正确代码的协议.
常见问题
序号:Yarn 是开发者代码的可读映射。 中间层是稳定、机器生成的层,实际发布的模组会针对此层进行编译。Yarn 名称在构建时会被编译成中间层.
它们是生成的,而不是手写的。像 class_1234 这样的名称只需要保证唯一性和持久性,不需要美观。可读性由 Yarn 或 Mojmap 在其基础上处理.
不。中间件保持名称稳定,但如果 Mojang 移除或重写了一个方法,底层代码会不分名称而消失。这减少了破坏,但不能完全消除.
不太是这样。它在 Fabric 内部运作。你通常只有在作为开发者或者在崩溃日志中看到提及中间体符号时才会遇到它.