User Tools

Site Tools


zh_cn:tutorial:introduction

This is an old revision of the document!


Fabric 编写入门

这是对制作Fabric模组时可以使用的一些常用技术的快速介绍。 要为Minecraft制作mod,通常必须以非标准的方式与Minecraft的代码进行交互。 尽管Minecraft变得越来越灵活,可以适应变化,但它并不是天生就可以进行修改的。

与其他改装API不同,Fabric Loader不会覆盖Minecraft的类文件以添加更多功能。 而是使用Mixin库注入代码。 但是,大多数时候您不会直接使用此库。

Mixins可能很脆弱,有时会引起冲突。 因此,Fabric API已经为您实现了一些常用功能。 如果核心Fabric API中不存在它,那么通常它将存在于第三方库中。 在几乎每种情况下,与自己实现mixin相比,最好使用Fabric API或第三方库。

但是有时候,您不需要任何这些。 尽管Minecraft并非专为改装而设计,但它仍然包含许多功能,您无需进行任何其他更改即可访问它们。

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

Minecraft自带接口

如果Minecraft已经允许您执行某些操作,请不要重新造轮子。 一个很好的例子是“net.minecraft.util.registry.Registry”类,它使您无需修改Minecraft的代码即可添加方块、物品等。

Minecraft还将JSON数据文件用于各种数据驱动功能。 您可以将JSON文件添加到您的mod中,然后由Fabric API注入这些文件。 例如,块模型和战利品表是通过JSON文件实现的。

Fabric API

安装在客户端中的Fabric本身分为两个部分。

  • Fabric Loader:用于加载您的mod并调用您的入口点。
  • Fabric API:这是一个可选的库,提供一些常用的接口。

故意将API保持相对较小,以使Fabric可以更快地移植到新的Minecraft版本。

您可以通过查看其GitHub上的源代码来了解Fabric API中包含的内容。 Fabric API包含许多常见的事件挂钩,以及用于联网和渲染之类的通用实用程序。

第三方API

由于Fabric API为方便维护,体量较小且覆盖范围较小,因此存在第三方API来填补空白。 Mixins允许任何第三方库以与核心Fabric API相同的方式修改Minecraft的代码。 您应尽可能使用这些而不是编写自己的mixin,以最大程度地减少发生冲突的可能性。

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

Mixins

最后,您可以使用mixins。 Mixins功能强大,可让您更改Minecraft自己的代码。(不能修改别的库!) 某些mixin可能会冲突,但是若能负责任地使用,这些是为mod添加特性的关键。

Mixins有多种,按优先顺序排列:

  • 添加接口并实现方法
  • @Inject 回调注入
  • @Redirect 重定向注入
  • @Overwrite 覆写

此列表不一定完整,只是快速概述。

添加接口并实现方法

这可能是使用mixin的最安全方法之一。 新的接口实现可以添加到任何Minecraft类中。 然后,可以通过将类强制转换为接口来访问该接口。 这不会改变类的任何内容,只会增加新的内容,因此极不可能发生冲突。

需要注意的是,您插入的函数名称+描述符(参数类型+返回类型)必须是唯一的。 因此,如果您使用常见的参数类型,请确保为其指定一个非常独特的名称。

回调注入

回调注入器 @Inject 使您可以向现有方法以及该方法中的特定方法调用添加回调挂钩。 它们还使您可以拦截和更改方法的返回值,并尽早返回。 回调注入可能会堆叠,因此不太可能引起mod之间的冲突。

重定向注入

通过 @Redirect,您可以使用自己的代码在目标方法内包装方法调用或变量访问。 非常谨慎地使用这些功能,目标调用或访问只能在所有mod之间重定向一次。 如果两个mod重定向相同的值,将导致冲突。 优先考虑回调注入。

覆写

避免使用 @Overwrite。 它们完全替换了一个方法,删除了所有现有代码,并与该方法上的任何其他类型的mixin发生冲突。 它们极有可能不仅与其他mod冲突,而且与Minecraft本身的更改冲突。 您极有可能不需要覆盖来完成您想做的事情,请使用其他方法。

zh_cn/tutorial/introduction.1607914208.txt.gz · Last modified: 2020/12/14 02:50 by solidblock