zh_cn:tutorial:introduction
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
zh_cn:tutorial:introduction [2019/12/18 06:20] – created lightcolour | zh_cn:tutorial:introduction [2024/08/25 11:51] (current) – [Fabric 编写的介绍] solidblock | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Fabric | + | ====== Fabric |
- | 这是对制作Fabric模组时可以使用的一些常用技术的快速介绍。 | + | 这是对制作 Fabric 模组时可以使用的一些常用技术的快速介绍。 |
- | 要为Minecraft制作mod,通常必须以非标准的方式与Minecraft的代码进行交互。 | + | 要为 Minecraft 制作模组,通常必须以非标准的方式与 Minecraft 的代码进行交互。 |
- | 尽管Minecraft变得越来越灵活,可以适应变化,但它并不是天生就可以进行修改的。 | + | 尽管 Minecraft 变得越来越灵活,可以适应变化,但它并不是天生就可以进行修改的。 |
- | 与其他改装API不同,Fabric Loader不会覆盖Minecraft的类文件以添加更多功能。 | + | 与其他改装 API 不同,Fabric Loader 不会覆盖 Minecraft 的类文件以添加更多功能, |
- | 而是使用[[https:// | + | 而是使用[[https:// |
但是,大多数时候您不会直接使用此库。 | 但是,大多数时候您不会直接使用此库。 | ||
- | Mixins可能很脆弱,有时会引起冲突。 | + | Mixins 可能很脆弱,有时会引起冲突。 |
- | 因此,Fabric API已经为您实现了一些常用功能。 | + | 因此,Fabric API 已经为您实现了一些常用功能。 |
- | 如果核心Fabric API中不存在它,那么通常它将存在于第三方库中。 | + | 如果核心 Fabric API 中不存在它,那么通常它将存在于第三方库中。 |
- | 在几乎每种情况下,与自己实现mixin相比,最好使用Fabric API或第三方库。 | + | 在几乎每种情况下,与自己实现 mixin 相比,最好使用 Fabric API 或第三方库。 |
但是有时候,您不需要任何这些。 | 但是有时候,您不需要任何这些。 | ||
- | 尽管Minecraft并非专为改装而设计,但它仍然包含许多功能,您无需进行任何其他更改即可访问它们。 | + | 尽管 Minecraft 并非专为改装而设计,但它仍然包含许多功能,您无需进行任何其他更改即可访问它们。 |
- | 本文将按优先顺序介绍影响Minecraft的所有方法。 | + | 本文将按优先顺序介绍影响 Minecraft 的所有方法。 |
+ | ===== Minecraft 自带 API ===== | ||
+ | 如果 Minecraft 已经允许您执行某些操作,请不要重新造轮子。一个很好的例子是“net.minecraft.util.registry.Registry”类,它使您无需修改 Minecraft 的代码即可添加方块、物品等。 | ||
- | ===== Native Minecraft APIs ===== | + | Minecraft 还将 JSON 数据文件用于各种数据驱动功能。您可以将 JSON 文件添加到您的模组中,Fabric API 会注入这些文件。例如,方块模型和战利品表是通过 JSON 文件实现的。 |
- | 如果Minecraft已经允许您执行某些操作,请不要重新发明轮子。 | + | ===== Fabric API ===== |
- | 一个很好的例子是“ Registry”类,它使您无需修改Minecraft的代码即可添加块和项目。 | + | 安装在客户端中的 Fabric 本身分为两个部分。 |
- | Minecraft还将JSON数据文件用于各种数据驱动功能。 | + | * Fabric Loader:用于加载您的本身并调用您的入口点。 |
- | 您可以将JSON文件添加到您的mod中,然后由Fabric API注入这些文件。 | + | |
- | 例如,块模型和战利品表是通过JSON文件实现的。 | + | |
- | ===== The Fabric API ===== | + | |
- | 安装在客户端中的Fabric本身分为两个部分。 | + | |
- | | + | 故意将 API 保持相对较小,以使 |
- | -Fabric | + | |
- | 故意将API保持相对较小,以使Fabric可以更快地移植到新的Minecraft版本。 | + | 您可以通过查看[[https:// |
+ | Fabric API 包含许多常见的事件挂钩,以及用于联网和渲染之类的通用实用程序。 | ||
- | 您可以通过查看[[https:// | + | ===== 第三方 |
- | Fabric API包含许多常见的事件挂钩,以及用于联网和渲染之类的通用实用程序。 | + | |
+ | 由于 Fabric API 为方便维护,体量较小且覆盖范围较小,因此存在第三方 API 来填补空白。 | ||
+ | Mixin 允许任何第三方库以与核心 Fabric API 相同的方式修改 Minecraft 的代码。 | ||
+ | 您应尽可能使用这些而不是编写自己的 mixin,以最大程度地减少发生冲突的可能性。 | ||
- | ===== Third Party APIs ===== | + | 您可以在此 wiki 上找到[[zh_cn: |
+ | ===== Mixin ===== | ||
- | 由于Fabric API故意保持较小且集中,因此存在第三方API来填补空白。 | + | 最后,您可以使用 mixin。 |
- | Mixins允许任何第三方库以与核心Fabric API相同的方式影响Minecraft的代码。 | + | Mixin 功能强大,可让您更改 |
- | 您应尽可能使用这些而不是编写自己的mixin,以最大程度地减少发生冲突的可能性。 | + | 某些 mixin 可能会冲突,但是若能负责任地使用,这些是为模组添加特性的关键。 |
- | 您可以在此Wiki上找到[[documentation: | + | Mixin 有多种,按优先顺序排列: |
- | ===== Mixins ===== | + | |
- | Finally, you can use mixins. | + | * 添加接口 |
- | Mixins are a powerful feature that let you change any of Minecraft' | + | * 回调注入 |
- | Some mixins can cause conflict, but used responsibly these are key to adding unique behavior to your mod. | + | * 重定向注入 |
+ | * 覆写 | ||
- | Mixins come in a variety of flavors, in rough order of preference: | + | 此列表不一定完整,只是快速概述。 |
- | * Adding Interfaces | + | ==== 添加接口 ==== |
- | * Callback Injectors | + | |
- | * Redirect Injectors | + | |
- | * Overwrites, you should never use these | + | |
- | This is not a complete list, but rather a quick overview. | + | 这可能是使用 mixin 的最安全方法之一。 |
- | Some mixin types are omitted here. | + | 新的接口实现可以添加到任何 Minecraft 类中。 |
- | ==== Adding Interfaces ==== | + | |
- | + | ||
- | 这可能是使用mixin的最安全方法之一。 | + | |
- | 新的接口实现可以添加到任何Minecraft类中。 | + | |
然后,可以通过将类强制转换为接口来访问该接口。 | 然后,可以通过将类强制转换为接口来访问该接口。 | ||
这不会改变类的任何内容,只会增加新的内容,因此极不可能发生冲突。 | 这不会改变类的任何内容,只会增加新的内容,因此极不可能发生冲突。 | ||
- | 需要注意的是,您插入的函数签名(名称+参数类型)必须是唯一的。 因此,如果您使用常见的参数类型,请确保为其指定一个非常独特的名称。 | + | 需要注意的是,您插入的函数签名(名称+类型)必须是唯一的。 因此,如果您使用常见的参数类型,请确保指定独特的名称。 |
- | ==== Callback Injectors | + | ==== 回调注入 |
- | 回调注入器使您可以向现有方法以及该方法中的特定方法调用添加回调挂钩。 | + | 回调注入器 |
它们还使您可以拦截和更改方法的返回值,并尽早返回。 | 它们还使您可以拦截和更改方法的返回值,并尽早返回。 | ||
- | 回调注入可能会堆叠,因此不太可能引起mod之间的冲突。 | + | 回调注入可以堆叠,因此不太可能引起模组之间的冲突。 |
- | + | ||
- | + | ||
- | ==== Redirect Injectors ==== | + | |
- | 通过重定向,您可以使用自己的代码在目标方法内包装方法调用或变量访问。 | + | ==== 重定向注入 |
- | 非常谨慎地使用这些功能,目标调用或访问只能在所有mod之间重定向一次。 | + | |
- | 如果两个mod重定向相同的值,将导致冲突。 | + | |
- | 首先考虑回调注入。 | + | |
+ | 通过 @Redirect,您可以使用自己的代码在目标方法内包装方法调用或变量访问。 | ||
+ | 使用这些功能时需要谨慎,目标调用或访问只能在所有模组之间重定向一次。 | ||
+ | 如果两个模组重定向相同的值,将导致冲突。 | ||
+ | 优先考虑回调注入。 | ||
- | ==== Overwrite | + | ==== 覆写 |
- | 避免完全覆盖。 | + | 避免使用覆写,因为替换了一个方法,删除了所有现有代码,并与该方法上的任何其他类型的 mixin 发生冲突。 |
- | 它们完全替换了一个方法,删除了所有现有代码,并与该方法上的任何其他类型的mixin发生冲突。 | + | 覆写极有可能不仅与其他模组冲突,而且与 Minecraft 本身的更改冲突。 |
- | 它们极有可能不仅与其他mod冲突,而且与Minecraft本身的更改冲突。 | + | |
您极有可能不需要覆盖来完成您想做的事情,请使用其他方法。 | 您极有可能不需要覆盖来完成您想做的事情,请使用其他方法。 |
zh_cn/tutorial/introduction.1576650050.txt.gz · Last modified: 2019/12/18 06:20 by lightcolour