User Tools

Site Tools


zh_cn:tutorial:introduction

This is an old revision of the document!


Fabric Mod 开发入门

本文简要介绍一些制作 Fabric Mod 时常用的技巧。 要制作 Minecraft Mod,您通常需要以非标准的方式与 Minecraft 的代码进行交互。 虽然 Minecraft 对修改的兼容性越来越强,但它本身并非为 Mod 设计。

与其他 Mod Loader 不同,Fabric Loader 不会覆盖 Minecraft 的类文件来添加更多功能。 相反,它使用 Mixin 库注入代码。 不过,大多数情况下您并不会直接使用这个库。

Mixin 可能实现的很糟,不同的 Mixin 有时还会导致冲突。 因此,Fabric API 已经为您实现了一些常用功能。 如果 Fabric API 中没有您需要的功能,通常可以在第三方库中找到。 几乎在所有情况下,使用 Fabric API 或第三方库都比自己实现 Mixin 更可取。

不过有时候,您根本不需要这些。 虽然 Minecraft 并非为 Mod 设计,但它仍然包含许多无需任何额外修改即可使用的功能。

本文将按优先顺序介绍所有可以影响 Minecraft 的方法。

原生 Minecraft API

如果 Minecraft 已经允许你做某件事,就不要重复造轮子。 一个很好的例子是 “Registry” 类,它允许你在不修改 Minecraft 代码的情况下添加方块和物品。

Minecraft 也使用 JSON 数据文件来实现各种数据驱动功能。 您可以将 JSON 文件添加到您的模组中,这些文件随后会通过 Fabric API 注入。 例如,方块模型和战利品表都是通过 JSON 文件实现的。

Fabric API

安装到客户端后的 Fabric 本体分为两部分:

  1. Fabric Loader,用于加载您的 Mod 并调用 Mod 入口点。
  2. Fabric API,一个可选库,提供一些常用的实用 API。

为了更快地将 Fabric 移植到较新的 Minecraft 版本,Fabric API 的设计有意保持相对精简。

您可以通过查看 GitHub 上的 Fabric 源代码 来了解 Fabric API 包含哪些内容。 Fabric API 包含许多常用的事件钩子和通用工具,例如用于网络通信和渲染的工具。

第三方 API

由于 Fabric API 的设计初衷是保持精简和专注,因此需要第三方 API 来弥补其功能上的不足。 Mixin 允许任何第三方库以与 Fabric API 相同的方式影响 Minecraft 的代码。 为了最大程度地减少冲突的可能性,您应该尽可能使用 Fabric API 和第三方 API,而不是编写自己的 Mixin。

您可以在 Fabric Wiki 上找到一个 第三方库 的不完整列表。

Mixin

最后,你可以使用 Mixin 库。 Mixin 是一项强大的功能,允许你修改 Minecraft 的任何代码。 某些 Mixin 可能会导致冲突,但如果使用得当,它们是为你的 Mod 添加独特行为的关键。

Mixin 有多种类型,大致按优先级排序如下:

  • 添加接口
  • 回调注入
  • 重定向注入
  • 覆盖

这并非完整列表,而是一个简要概述。 此处省略了一些 Mixin 类型。

添加接口

这可能是最安全的 Mixin。 您可以向任何 Minecraft 类添加新的接口实现。 然后,您可以通过将类强制转换为该接口来访问它。 这不会改变类的任何属性,只会添加新的功能,因此几乎不可能发生冲突。

需要注意的是,您注入的函数签名 (函数名 + 参数类型) 必须是唯一的。因此,如果您使用常见的参数类型,请务必给它起一个非常独特的名字。

回调注入

Mixin 允许您为现有方法以及该方法内部的特定方法调用添加回调钩子。 它还允许您拦截并更改方法的返回值,并提前返回。 回调注入可以叠加,因此不太可能导致 Mod 之间的冲突。

重定向注入

Mixin 允许你用自定义代码重定向目标方法中的方法调用或变量访问。 请谨慎使用重定向,所有模块中,同一个目标调用或变量访问只能重定向一次。 如果两个模块重定向了相同的值,就会导致冲突。 请优先考虑回调注入。

覆盖

覆盖时务必格外小心。 Mixin 覆盖会完全替换方法,移除所有现有代码,并可能与该方法上的其他 Mixin 冲突。 覆盖极有可能不仅与其他模组冲突,还会与 Minecraft 本身冲突。 您很可能不需要使用覆盖来实现您想要的功能。

zh_cn/tutorial/introduction.1762815269.txt.gz · Last modified: 2025/11/10 22:54 by sinoaakira