User Tools

Site Tools


zh_cn:tutorial:introduction

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.txt · Last modified: 2019/12/26 01:18 by liach