Apugli Mixin 修复器

这是 Minecraft 1.20.1(Fabric)的一个轻量级混合兼容层,用于修复在使用 Apugli 2.10.x 与 Origins 1.10.2(Apoli 2.9.2)时发生的崩溃问题。

游戏机制

Apugli Fixer

一个轻量级 Mixin 兼容性补丁,适用于 Minecraft 1.20.1 (Fabric),修复了在使用 Apugli 2.10.x 和 Origins 1.10.2(Apoli 2.9.2)时出现的崩溃问题。

问题描述

Apugli 2.10.4 的 EntityConditionsMixin 使用 @Redirect 拦截 Apoli 的 EntityConditions.lambda$register$47 内部对 EnchantmentHelper.getLevel() 和 EnchantmentHelper.getEquipmentLevel() 的调用。然而,在 Apoli 2.9.2 中,这些调用位于 lambda$register$45 中。Lambda 方法编号由编译器生成并在 Apoli 版本之间发生变化,因此重定向找不到任何目标并导致崩溃:

InjectionError: Critical injection failure: Redirector apugli$useModifiedEnchantmentLevelSum
in apugli.fabric.mixins.json:common.EntityConditionsMixin from mod apugli failed injection
check, (0/1) succeeded. Scanned 0 target(s).

修复方案

本模组使用单个 @Overwrite Mixin(优先级 100,在 Apugli 优先级 1000 的重定向之前应用)来替换 lambda$register$47,包含:

  1. 原始逻辑(实体_在_方块上的双实体条件),完整保留
  2. 对 EnchantmentHelper.getLevel() 和 EnchantmentHelper.getEquipmentLevel() 的空操作调用,这些调用会被 Apugli 的重定向拦截并替换为其修改后的附魔等级系统

结果:Apugli 的重定向找到了目标,游戏正常启动,基于附魔的起源能力正常工作。

依赖要求

依赖 版本
Minecraft 1.20.1
Fabric Loader >= 0.14.0
Origins 1.10.2(Apoli 2.9.2)
Apugli 2.10.0+

工作原理

EntityConditions 类加载时的 Mixin 优先级顺序:

100  [Apugli Fixer]   @Overwrite lambda$register$47
                       -> 原始逻辑 + EnchantmentHelper 调用

1000 [Apugli]          @Redirect 对这些调用
                       -> 替换为 ModifyEnchantmentLevelPowerFactory

结果:重定向找到目标,无崩溃,修改后的附魔等级正常工作

许可证

MIT