====== 模组编写技巧 ====== 以下是与Fabric有关的编写模组的小技巧。这些技巧是从API的使用经验中积累的。 ===== 基本(API) ===== * 由于 Fabric API 开发的基于注入的方法,我们不需要以用户可见的方式彻底修改类。发现一些你做不到的东西时,你有时只需要找原版类的 Fabric 扩展。比如: * Block.Settings -> FabricBlockSettings(除了 1.20.5) * EntityType.Builder -> FabricEntityTypeBuilder * 对于内建的资源包或者数据包,请确保分别存在“assets/模组id”或“data/模组id”的目录!IDEA用户可能会发现他们偶然创建了“assets.模组id”目录——这不起作用。 ===== Mixins ===== * 要将类强制转换为它未实现的接口,或强制转换为最终类,或将 mixin 强制转换为目标类,你可以使用“(TargetClass) (Object) sourceClassObject”的技巧。 * @Redirect 和 @ModifyConstant mixins 目前无法嵌套(多个模组同时应用在同一个地方)。这在开发中可能以后会改变——然而,目前,同 @Overwrite 一样,请尽量避免使用(或尝试将钩子桥接至 Fabric API,或者考虑放在小的 JAR 中 JAR API 中。 * 如果你要添加非私有的自定义字段或方法,请加上“模组id$”的前缀,或者加上其他独一无二的字符串并注解为 @Unique。比如,“mymod$secretValue”而不是“secretValue”。这样可以避免多个模组以相同方式添加字段或者方法。 ===== 网络 ===== * 封包永远是在**网络线程**开始执行的,但它对 Minecraft 大多数内容的访问都不是线程安全的。因此,如果你确定你在做什么,你应该在网络线程解析封包(将所有值读出来),然后使用**任务队列**在**主服务器/客户端线程**上执行额外操作。 ===== 陷阱 ===== * 避免使用 ''java.awt'' 包以及其子包。AWT 在有的系统上运作不佳。一些用户已经报告了该包会挂起 Minecraft。