zh_cn:tutorial:primer
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| zh_cn:tutorial:primer [2025/11/10 22:03] – sinoaakira | zh_cn:tutorial:primer [2025/11/11 13:04] (current) – sinoaakira | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Fabric Mod 开发教程 ====== | + | ~~REDIRECT> |
| - | 本文简要介绍一些制作 Fabric Mod 时常用的技巧。 | + | ====== |
| - | 要制作 Minecraft Mod,您通常需要以非标准的方式与 Minecraft 的代码进行交互。 | + | |
| - | 虽然 | + | |
| - | 与其他 Mod Loader | + | // |
| - | 相反,它使用 Mixin 库注入代码。 | + | |
| - | 不过,大多数情况下您并不会直接使用这个库。 | + | |
| - | Mixin 可能实现的很糟,不同的 Mixin 有时还会导致冲突。 | ||
| - | 因此,Fabric API 已经为您实现了一些常用功能。 | ||
| - | 如果 Fabric API 中没有您需要的功能,通常可以在第三方库中找到。 | ||
| - | 几乎在所有情况下,使用 Fabric API 或第三方库都比自己实现 Mixin 更可取。 | ||
| - | 不过有时候,您根本不需要这些。 | + | 本文旨在为那些对“方块位置” ('' |
| - | 虽然 Minecraft 并非为 Mod 设计,但它仍然包含许多无需任何额外修改即可使用的功能。 | + | 首先,让我们从您需要事先了解的内容开始: |
| - | 本文将按优先顺序介绍所有可以影响 Minecraft 的方法。 | + | ===== Mod 制作是什么?===== |
| + | Mod 制作是指对程序进行**功能添加**或**修改**的过程;在本文中,该程序是 Minecraft。你制作的所有 Mod 至少都会进行其中一项操作。 | ||
| - | ===== 原生 Minecraft API ===== | + | ===== Fabric 是什么?===== |
| - | 如果 Minecraft 已经允许你做某件事,就不要重复造轮子。 | + | Fabric 是一套工具集,可以方便地制作 Fabric Mod 对 Minecraft 进行修改。这些工具包括: |
| - | 一个很好的例子是 `<Yarn class_2378> | + | |
| - | Minecraft | + | * **Fabric Loader**-- 一个用于将修改后的代码加载到基于 Java 的游戏 (例如 |
| - | 您可以将 | + | * **Fabric Loom**-- 一个专为使用 |
| - | 例如,方块模型和战利品表都是通过 JSON 文件实现的。 | + | * Fabric 的 **编程语言模块** 允许你使用其他 JVM 语言 (例如 Kotlin 或 Scala) |
| + | * **Fabric API**-- 一套可以更轻松地添加或修改某些常见 Minecraft | ||
| + | * **Fabric 安装程序**-- 一款可以将 | ||
| + | 为了更轻松地理解 Minecraft 的代码,当您使用 Fabric 进行 Mod 制作时,您将能够访问 Minecraft 的“源代码”。由于 Java 是一种编译型语言,我们需要先反编译代码才能阅读。这会将 Java 字节码转换为人类可读的 Java 源代码。然而,为了防止逆向工程,Mojang 以**混淆**格式分发 Minecraft。这意味着代码中的所有类、方法和变量的名称都是随机生成的。您可以用解压缩工具打开一个 Minecraft 的 .jar 文件来验证这一点——所有文件的名称都类似于 '' | ||
| - | ===== Fabric API ===== | + | * **Intermediary** 映射器是一个程序,它会给 Minecraft 代码中的每个对象赋予一个类似“field_10832”或“method_12991()”的名称。关键在于,这个程序始终为每个对象赋予相同的名称。因此,在不同版本之间保持不变的方法,其 Intermediary 名称也将始终保持不变。 |
| + | * **Yarn** 是反混淆过程的最后一步,它从 Intermediary 映射器的产物为 Minecraft 中的所有方法和类命名。当您查看 Minecraft 的“源代码”时,您发现的任何带有描述其功能名称的类、变量或方法都是 Yarn 生成的。Yarn 社区成员分析并决定了它们的命名。每次发布新的更新或快照版本时,社区都会着手梳理代码,看看哪些新对象需要命名。 | ||
| - | 安装到客户端后的 Fabric 本体分为两部分: | + | 然而,并非 Minecraft 中的所有内容都已被 Yarn 映射——有时您会看到一些变量仍然使用 Intermediary 名称。如果您弄清楚了它们的作用,就可以为 Yarn 贡献一个名称。((关于官方映射的另一点说明:请勿参考官方映射来获取 Yarn 映射方面的帮助。这很可能违反知识产权法——**所有 Yarn 映射都必须是原创的,并且独立于官方映射。**)有关使用和贡献映射的更多信息,请查看 [[mappings]] 页面。)) |
| - | - Fabric Loader,用于加载您的 Mod 并调用 Mod 入口点。 | + | ===== 代码结构 ===== |
| - | - Fabric API,一个可选库,提供一些常用的实用 API。 | + | |
| - | 为了更快地将 Fabric 移植到较新的 | + | Minecraft: Java Edition 是一个巨大的项目,它凝聚了多年来层层叠加的代码。它看起来可能很混乱 (因为它确实很混乱),但有一些关键概念是 (大概) 贯穿始终的。 |
| - | 您可以通过查看 GitHub 上的 [[https:// | + | ==== 注册表 ==== |
| - | Fabric API 包含许多常用的事件钩子和通用工具,例如用于网络通信和渲染的工具。 | + | |
| + | Minecraft 中的大多数“功能” (你可能想要添加的东西,例如方块、物品、界面、实体、区块生成器等等) 会在游戏加载时加载到对应的注册表中。例如,每个物品 ('' | ||
| - | ===== 第三方 API ===== | + | ==== 端 ==== |
| - | 由于 Fabric API 的设计初衷是保持精简和专注,因此需要第三方 API 来弥补其功能上的不足。 | + | Minecraft 的处理分为两个线程,通常称为“端”:服务端和客户端。客户端始终运行在玩家的计算机上,负责渲染和输入。服务端可以独立运行,作为专用服务器 (可能是您印象中的“Minecraft 服务器”),或者在单人游戏中与客户端一起运行在玩家的计算机上,作为集成服务器。服务端处理客户端不负责的所有事情——物品栏、世界本身等等。 |
| - | Mixin 允许任何第三方库以与 Fabric API 相同的方式影响 | + | |
| - | 为了最大程度地减少冲突的可能性,您应该尽可能使用 Fabric API 和第三方 API,而不是编写自己的 Mixin。 | + | |
| - | 您可以在 Fabric Wiki 上找到一个 [[zh_cn: | + | 客户端与服务端必须就某些事项达成一致:世界中有哪些方块、箱子里有什么、玩家位置等等。由于这些由服务端处理,因此服务端会将这些值告知客户端,客户端再将这些值显示给玩家。任何由客户端处理的内容都不需要告知服务端——这包括方块和实体的外观 (资源包) 以及如何绘制世界 (着色器)。这就是客户端 Mod (例如着色器)、服务端 Mod (例如运行小游戏的 Mod) 和双端 Mod (例如添加机器、新方块和新物品的 Mod) 之间的区别。 |
| - | ===== Mixin ===== | + | |
| - | 最后,你可以使用 | + | 重要的是,不要在服务端调用仅供客户端使用的代码 (即与渲染相关的代码),也不要将仅供服务端使用的代码放在客户端。这就是你在 Minecraft |
| - | Mixin 是一项强大的功能,允许你修改 Minecraft | + | |
| - | 某些 Mixin 可能会导致冲突,但如果使用得当,它们是为你的 Mod 添加独特行为的关键。 | + | |
| - | Mixin 有多种类型,大致按优先级排序如下: | + | ===== 后续步骤 ===== |
| - | * 添加接口 | + | 完成所有准备工作并阅读本文档后,就可以开始了!请查看 [[introduction]] 了解 Fabric 平台的方方面面,阅读 [[setup]] 文档设置 IDE 以进行 Minecraft Mod 制作,然后前往 [[items]] 教程添加您的第一个物品! |
| - | * 回调注入 | + | |
| - | * 重定向注入 | + | |
| - | * 覆盖 | + | |
| - | + | ||
| - | 这并非完整列表,而是一个简要概述。 | + | |
| - | 此处省略了一些 Mixin 类型。 | + | |
| - | ==== 添加接口 ==== | + | |
| - | + | ||
| - | 这可能是最安全的 Mixin。 | + | |
| - | 您可以向任何 Minecraft 类添加新的接口实现。 | + | |
| - | 然后,您可以通过将类强制转换为该接口来访问它。 | + | |
| - | 这不会改变类的任何属性,只会添加新的功能,因此几乎不可能发生冲突。 | + | |
| - | + | ||
| - | 需要注意的是,您注入的函数签名 (函数名 + 参数类型) 必须是唯一的。因此,如果您使用常见的参数类型,请务必给它起一个非常独特的名字。 | + | |
| - | + | ||
| - | + | ||
| - | ==== 回调注入 ==== | + | |
| - | + | ||
| - | Mixin 允许您为现有方法以及该方法内部的特定方法调用添加回调钩子。 | + | |
| - | 它还允许您拦截并更改方法的返回值,并提前返回。 | + | |
| - | 回调注入可以叠加,因此不太可能导致 Mod 之间的冲突。 | + | |
| - | + | ||
| - | + | ||
| - | ==== 重定向注入 ==== | + | |
| - | + | ||
| - | Mixin 允许你用自定义代码重定向目标方法中的方法调用或变量访问。 | + | |
| - | 请谨慎使用重定向,所有模块中,同一个目标调用或变量访问只能重定向一次。 | + | |
| - | 如果两个模块重定向了相同的值,就会导致冲突。 | + | |
| - | 请优先考虑回调注入。 | + | |
| - | + | ||
| - | + | ||
| - | ==== 覆盖 ==== | + | |
| - | + | ||
| - | + | ||
| - | 覆盖时务必格外小心。 | + | |
| - | Mixin 覆盖会完全替换方法,移除所有现有代码,并可能与该方法上的其他 Mixin 冲突。 | + | |
| - | 覆盖极有可能不仅与其他模组冲突,还会与 Minecraft 本身冲突。 | + | |
| - | 您很可能不需要使用覆盖来实现您想要的功能。 | + | |
zh_cn/tutorial/primer.1762812224.txt.gz · Last modified: 2025/11/10 22:03 by sinoaakira