Skip to content

Releases: llxj12/goetyownedfix

v2.0.0

Choose a tag to compare

@llxj12 llxj12 released this 26 Sep 09:29

goetyownedfix v2.0.0 —— 诡厄巫法召唤物崩溃补丁

修复 诡厄巫法 (Goety) 因 isAlliedTo 收到 null 实体而导致的「Ticking entity」崩溃家族。NeoForge 1.21.1 迷你补丁,纯 Mixin 实现,不含任何 Goety 代码。

本次更新(v2.0.0)

  • 适配 Minecraft 1.21.1 / NeoForge 21.1.x
  • 依据 Goety 3.1.5.1(1.21.1 版)的实体类扫描结果,其中重写 isAlliedTo 的 19 个类全部入口空判断
  • NeoForge 1.21.1 使用官方方法名,因此本版的注入目标由 SRG 名 m_7307_ 改为官方名 isAlliedTo(无需 refmap)

症状

进世界 / 下界时游戏崩溃,崩溃报告为:

Ticking entity
java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.getType()" because "entityIn" is null
    at net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal.alertOthers (HurtByTargetGoal.java:95)

或(透传路径):

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.getTeam()" because "p_20355_" is null
    at Entity.isAlliedTo (Entity.java)

常见触发场景:狱焰、僵尸仆从等 Goety 召唤物受伤时(尤其下界、多只同类召唤物在场时),以及 Apostle(亚波伦)相关战斗。

原因

Goety 的多个实体类重写了 isAlliedTo。当目标 AI HurtByTargetGoal.alertOthers 把为 null 的 getLastHurtByMob() 传进来时:

  • 原版 Entity.isAlliedTo 对参数不做空判断,直接对参数取队伍(p.getTeam())→ NPE;
  • 部分 Goety 重写(如 Apostle)在调 super 之前就解引用参数(entityIn.getType())→ 同样 NPE。

经对 Goety 3.1.5.1 全部实体类扫描,重写 isAlliedTo 的类共 19 个,全部存在同类隐患(直接解引用 / 透传 vanilla / 经 MobUtil.illagerAllies 工具类三种模式)。

修复内容(v2.0.0)

  • 19 个 isAlliedTo 重写类全部入口空判断:参数为 null 直接返回 false(null 不可能是盟友),对有效实体的判断完全不受影响,零副作用
  • 原版 Entity.isAlliedTo 兜底:覆盖透传 super 的路径及其它 mod 的同类调用
  • MobUtil.illagerAllies 工具类防护:工具类内部对参数无空判断,一并覆盖
  • 软模式抗崩溃:mixin 配置 required=false + defaultRequire=0,未来 Goety 更新导致某个类被删除/方法改名时,对应 mixin 跳过并打警告日志,游戏照常启动,不会崩溃

安装

  • 需要 Minecraft 1.21.1 + NeoForge 21.1.x + Goety 3.1.5+(1.21.1 版)
  • 把 jar 放入 mods 文件夹即可
  • 客户端和服务端都要装(集成服务器 = 开存档的那台机器必须装)

兼容性

  • 仅以 Mixin 方式在运行时打空判断补丁,不含任何 Goety 代码
  • 若 Goety 官方后续修复了此问题,删除本 mod 即可
  • 全部为 @Inject 叠加式注入,不与其它 mod 的重写冲突

版本历史

  • 2.0.0:适配 Minecraft 1.21.1 / NeoForge;覆盖 Goety 3.1.5.1 全部 19 个 isAlliedTo 重写类 + 原版 Entity.isAlliedTo 兜底 + MobUtil.illagerAllies 防护 + 软模式抗崩溃

许可

MIT License


goetyownedfix v2.0.0 — Goety Summon Crash Fix

Fixes the "Ticking entity" crash family in Goety caused by isAlliedTo receiving a null entity. A minimal NeoForge 1.21.1 patch mod, implemented purely with Mixins, containing no Goety code.

What's New (v2.0.0)

  • Ported to Minecraft 1.21.1 / NeoForge 21.1.x
  • Based on a scan of Goety 3.1.5.1 (the 1.21.1 build), entry-level null guards on all 19 classes that override isAlliedTo
  • NeoForge 1.21.1 uses Mojang official names, so the injection target moved from the SRG name m_7307_ to the official name isAlliedTo (no refmap needed)

Symptoms

The game crashes while entering a world / the Nether, with a report like:

Ticking entity
java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.getType()" because "entityIn" is null
    at net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal.alertOthers (HurtByTargetGoal.java:95)

or, on a pass-through path:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.getTeam()" because "p_20355_" is null
    at Entity.isAlliedTo (Entity.java)

Common triggers: Goety summons taking damage (especially in the Nether, or when several summons of the same kind are around), and fights involving the Apostle boss.

Root Cause

Multiple Goety entity classes override isAlliedTo. When the target AI HurtByTargetGoal.alertOthers passes a null getLastHurtByMob() into it:

  • Vanilla Entity.isAlliedTo performs no null check on the argument and reads the team from it (p.getTeam()) → NPE;
  • Some Goety overrides (e.g. Apostle) dereference the argument (entityIn.getType()) before calling super → also NPE.

After scanning every entity class in Goety 3.1.5.1, 19 classes override isAlliedTo, and all of them share this hazard (three patterns: direct dereference / pass-through to vanilla / via the MobUtil.illagerAllies helper).

What's Fixed (v2.0.0)

  • Entry-level null guard on all 19 isAlliedTo overrides: a null argument returns false immediately (a null entity can never be an ally); checks on valid entities are completely unaffected — zero side effects
  • Vanilla Entity.isAlliedTo safety net: covers super pass-through paths and the same kind of calls from other mods
  • MobUtil.illagerAllies guard: the helper dereferences its arguments without a null check; now covered as well
  • Soft-mode crash resistance: mixin config required=false + defaultRequire=0 — if a future Goety update removes a class or renames a method, the affected mixin is skipped with a warning log and the game starts normally instead of crashing

Installation

  • Requires Minecraft 1.21.1 + NeoForge 21.1.x + Goety 3.1.5+ (the 1.21.1 build)
  • Drop the jar into the mods folder
  • Install on both client and server (for integrated servers, the machine hosting the save must have it)

Compatibility

  • Mixin-only: applies null guards at runtime, contains no Goety code
  • If Goety officially fixes this issue later, simply delete this mod
  • All injections are additive @Injects; they never conflict with other mods' overrides

Changelog

  • 2.0.0: ported to Minecraft 1.21.1 / NeoForge; covers all 19 isAlliedTo overrides in Goety 3.1.5.1 + vanilla Entity.isAlliedTo safety net + MobUtil.illagerAllies guard + soft-mode crash resistance

License

MIT License

v1.1.1

Choose a tag to compare

@llxj12 llxj12 released this 24 Aug 08:06

goetyownedfix v1.1.1 —— 诡厄巫法召唤物崩溃补丁

修复 诡厄巫法 (Goety) 因 isAlliedTo 收到 null 实体而导致的「Ticking entity」崩溃家族。Forge 1.20.1 迷你补丁,纯 Mixin 实现,不含任何 Goety / RevelationFix 代码。

本次更新(v1.1.1)

  • 新增 RevelationFix HereticServant(异教徒)调用方守卫:经真实崩溃日志核实,下界中异教徒受伤时会把 null 透传进 Goety Apostle.isAlliedTo(Apostle.java:399)导致崩溃——现于调用方侧一并拦截,与 Apostle 入口守卫形成双保险。
  • 若未安装 RevelationFix,软模式会自动跳过该守卫,不影响使用。

症状

进世界 / 下界时游戏崩溃,崩溃报告为以下两种典型签名之一:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_5647_()" because "p_20355_" is null
    at Entity.m_7307_ (Entity.java:2236)
    at Goety...Owned.m_7307_ (Owned.java:186)

或:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_6095_()" because "entityIn" is null
    at Goety...Apostle.m_7307_ (Apostle.java:399)

常见触发场景:狱焰、僵尸仆从等 Goety 召唤物受伤时(尤其下界、多只同类召唤物在场时),以及 Apostle(亚波伦)相关战斗。已按真实崩溃日志核实的一条完整链路:下界中 RevelationFix 的异教徒 (HereticServant) 受伤 → HurtByTargetGoal.alertOthers → HereticServant.isAlliedTo(null) → Apostle.isAlliedTo(null) → 399 行 NPE。

原因

Goety 的多个实体类重写了 isAlliedTo(SRG: m_7307_)。当目标 AI HurtByTargetGoal.alertOthers 把为 null 的 getLastHurtByMob() 传进来时:

  • 原版 1.20.1 Entity.isAlliedTo 对参数不做空判断,直接 p.getTeam() → NPE;
  • 部分 Goety 重写(如 Apostle)在调 super 之前就解引用参数(entityIn.getType(),Apostle.java:399)→ 同样 NPE。

经对 Goety 2.5.56.x / 2.5.57.0 全部实体类扫描,重写 isAlliedTo 的类共 19 个,全部存在同类隐患(直接解引用 / 透传 vanilla / 经 MobUtil.illagerAllies 工具类三种模式)。

修复内容(v1.1.1)

  • 19 个 isAlliedTo 重写类全部入口空判断:参数为 null 直接返回 false(null 不可能是盟友),对有效实体的判断完全不受影响,零副作用
  • 原版 Entity.isAlliedTo 兜底:覆盖透传 super 的路径及其它 mod 的同类调用
  • MobUtil.illagerAllies 工具类防护:工具类内部对参数无空判断,一并覆盖
  • HereticServant(RevelationFix 异教徒)调用方守卫(v1.1.1 新增,双保险)
  • 软模式抗崩溃:mixin 配置 required=false + defaultRequire=0,未来 Goety / 附属更新导致某个类被删除/方法改名时,对应 mixin 跳过并打警告日志,游戏照常启动,不会崩溃
  • 附属兼容已验证:GoetyAwaken(4 类)、GoetyLadder(1 类)为重写透传实现,被兜底覆盖;GoetyRevelation、goetygrae 无重写;RevelationFix 的 HereticServant 已在 v1.1.1 单独守卫——均经扫描与实机验证

安装

  • 需要 Forge 1.20.1 (47.x) + Goety 2.5.56+(已在 2.5.57.0 上实机验证)
  • 把 jar 放入 mods 文件夹即可(替换旧版 goetyownedfix-1.0.0 / 1.1.0,不要同时装)
  • 客户端和服务端都要装(集成服务器 = 开存档的那台机器必须装)
  • 与 RevelationFix / Goety:Revelation / GoetyAwaken 等各附属共存,无冲突

兼容性

  • 仅以 Mixin 方式在运行时打空判断补丁,不含任何 Goety / RevelationFix 代码
  • 若 Goety 官方后续修复了此问题,删除本 mod 即可
  • 全部为 @Inject 叠加式注入,不与其它 mod 的重写冲突

版本历史

  • 1.1.1:新增 RevelationFix HereticServant 调用方入口守卫(经真实崩溃日志核实)
  • 1.1.0:覆盖全部 19 个 isAlliedTo 重写类 + 原版 Entity.isAlliedTo 兜底 + MobUtil.illagerAllies 防护 + 软模式抗崩溃
  • 1.0.0:仅修复 Owned.isAlliedTo

许可

MIT License

goetyownedfix v1.1.1 — Goety Summon Crash Fix

Fixes the "Ticking entity" crash family in Goety caused by isAlliedTo receiving a null entity. A minimal Forge 1.20.1 patch mod, implemented purely with Mixins, containing no Goety or RevelationFix code.

What's New (v1.1.1)

  • Added a caller-side guard for RevelationFix's HereticServant (the "异教徒" cultist): verified from a real crash report that a HereticServant taking damage in the Nether forwards a null entity into Goety's Apostle.isAlliedTo (Apostle.java:399), crashing the game — the null is now stopped at the caller side, forming a double safety net with the Apostle entry guard.
  • If RevelationFix is not installed, soft mode skips this guard with a warning and the game still starts.

Symptoms

The game crashes when entering a world / the Nether, with one of these two typical signatures:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_5647_()" because "p_20355_" is null
    at Entity.m_7307_ (Entity.java:2236)
    at Goety...Owned.m_7307_ (Owned.java:186)

or:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_6095_()" because "entityIn" is null
    at Goety...Apostle.m_7307_ (Apostle.java:399)

Common triggers: Goety summons (Inferno, Zombie Servants, ...) taking damage (especially in the Nether, or when several summons of the same kind are around), and fights involving the Apostle boss. One verified real-world chain: in the Nether, a RevelationFix HereticServant taking damage → HurtByTargetGoal.alertOthers → HereticServant.isAlliedTo(null) → Apostle.isAlliedTo(null) → NPE at line 399.

Root Cause

Multiple Goety entity classes override isAlliedTo (SRG: m_7307_). When the target AI HurtByTargetGoal.alertOthers passes a null getLastHurtByMob() into it:

  • Vanilla 1.20.1 Entity.isAlliedTo performs no null check on the argument and calls p.getTeam() directly → NPE (Entity.java:2236);
  • Some Goety overrides (e.g. Apostle) dereference the argument (entityIn.getType(), Apostle.java:399) before calling super → also NPE.

After scanning every entity class in Goety 2.5.56.x / 2.5.57.0, 19 classes override isAlliedTo, and all of them share this hazard (three patterns: direct dereference / pass-through to vanilla / via the MobUtil.illagerAllies helper).

What's Fixed (v1.1.1)

  • Entry-level null guard on all 19 isAlliedTo overrides: a null argument returns false immediately (a null entity can never be an ally); checks on valid entities are completely unaffected — zero side effects
  • Vanilla Entity.isAlliedTo safety net: covers super pass-through paths and the same kind of calls from other mods
  • MobUtil.illagerAllies guard: the helper dereferences its arguments without a null check; now covered as well
  • HereticServant (RevelationFix) caller-side guard (new in v1.1.1 — double safety net)
  • Soft-mode crash resistance: mixin config required=false + defaultRequire=0 — if a future Goety/addon update removes a class or renames a method, the affected mixin is skipped with a warning log and the game starts normally instead of crashing
  • Addon compatibility verified: GoetyAwaken (4 classes) and GoetyLadder (1 class) overrides are pass-through implementations, automatically covered by the safety net; GoetyRevelation and goetygrae declare no overrides; RevelationFix's HereticServant is separately guarded in v1.1.1 — all verified by scanning and real-machine testing

Installation

  • Requires Forge 1.20.1 (47.x) + Goety 2.5.56+ (verified on 2.5.57.0)
  • Drop the jar into the mods folder (replace the old goetyownedfix-1.0.0 / 1.1.0 — do not install both)
  • Install on both client and server (for integrated servers, the machine hosting the save must have it)
  • Coexists with RevelationFix / Goety:Revelation / GoetyAwaken and other addons without conflicts

Compatibility

  • Mixin-only: applies null guards at runtime, contains no Goety or RevelationFix code
  • If Goety officially fixes this issue later, simply delete this mod
  • All injections are additive @Injects; they never conflict with other mods' overrides

Changelog

  • 1.1.1: added RevelationFix HereticServant caller-side entry guard (real-world crash path )
  • 1.1.0: all 19 isAlliedTo overrides + vanilla Entity.isAlliedTo safety net + MobUtil.illagerAllies guard + soft-mode crash resistance
  • 1.0.0: only Owned.isAlliedTo fixed

License

MIT License

v1.1.0

Choose a tag to compare

@llxj12 llxj12 released this 23 Aug 19:56

goetyownedfix v1.1.0 —— 诡厄巫法召唤物崩溃补丁

修复 诡厄巫法 (Goety) 因 isAlliedTo 收到 null 实体而导致的「Ticking entity」崩溃家族。Forge 1.20.1 迷你补丁,纯 Mixin 实现,不含任何 Goety 代码。

症状

进世界 / 下界时游戏崩溃,崩溃报告为以下两种典型签名之一:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_5647_()" because "p_20355_" is null
    at Entity.m_7307_ (Entity.java:2236)
    at Goety...Owned.m_7307_ (Owned.java:186)

或:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_6095_()" because "entityIn" is null
    at Goety...Apostle.m_7307_ (Apostle.java:399)

常见触发场景:狱焰、僵尸仆从等 Goety 召唤物受伤时(尤其下界、多只同类召唤物在场),以及 Apostle(亚波伦)相关战斗。

原因

Goety 的多个实体类重写了 isAlliedTo(SRG: m_7307_)。当目标 AI HurtByTargetGoal.alertOthers 把为 null 的 getLastHurtByMob() 传进来时:

  • 原版 1.20.1 Entity.isAlliedTo 对参数不做空判断,直接 p.getTeam() → NPE;
  • 部分 Goety 重写(如 Apostle)在调 super 之前就解引用参数(entityIn.getType(),Apostle.java:399)→ 同样 NPE。

经对 Goety 2.5.56.x / 2.5.57.0 全部实体类扫描,重写 isAlliedTo 的类共 19 个,全部存在同类隐患(直接解引用 / 透传 vanilla / 经 MobUtil.illagerAllies 工具类三种模式)。

修复内容(v1.1.0)

  • 19 个 isAlliedTo 重写类全部入口空判断:参数为 null 直接返回 false(null 不可能是盟友),对有效实体的判断完全不受影响,零副作用
  • 原版 Entity.isAlliedTo 兜底:覆盖透传 super 的路径及其它 mod 的同类调用
  • MobUtil.illagerAllies 工具类防护:工具类内部对参数无空判断,一并覆盖
  • 软模式抗崩溃:mixin 配置 required=false + defaultRequire=0,未来 Goety 更新导致某个类被删除/方法改名时,对应 mixin 跳过并打警告日志,游戏照常启动,不会崩溃
  • 附属兼容已验证:GoetyAwaken(4 类)、GoetyLadder(1 类)的重写均为透传实现,被兜底自动覆盖;GoetyRevelation、goetygrae 无重写——均已逐一扫描确认

安装

  • 需要 Forge 1.20.1 (47.x) + Goety 2.5.56+(已在 2.5.57.0 上实机验证)
  • 把 jar 放入 mods 文件夹即可(替换旧版 goetyownedfix-1.0.0.jar,不要两个同时装)
  • 客户端和服务端都要装(集成服务器 = 开存档的那台机器必须装)
  • 与 RevelationFix / Goety:Revelation / GoetyAwaken 等各附属共存,无冲突

兼容性

  • 仅以 Mixin 方式在运行时打空判断补丁,不含任何 Goety 代码
  • 若 Goety 官方后续修复了此问题,删除本 mod 即可
  • 全部为 @Inject 叠加式注入,不与其它 mod 的重写冲突

版本历史

  • 1.1.0:覆盖全部 19 个 isAlliedTo 重写类 + 原版 Entity.isAlliedTo 兜底 + MobUtil.illagerAllies 防护 + 软模式抗崩溃
  • 1.0.0:仅修复 Owned.isAlliedTo

许可

MIT License

goetyownedfix v1.1.0 — Goety Summon Crash Fix

Fixes the "Ticking entity" crash family in Goety caused by isAlliedTo receiving a null entity. A minimal Forge 1.20.1 patch mod, implemented purely with Mixins, containing no Goety code.

Symptoms

The game crashes when entering a world / the Nether, with one of these two typical signatures:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_5647_()" because "p_20355_" is null
    at Entity.m_7307_ (Entity.java:2236)
    at Goety...Owned.m_7307_ (Owned.java:186)

or:

java.lang.NullPointerException: Cannot invoke "net.minecraft.world.entity.Entity.m_6095_()" because "entityIn" is null
    at Goety...Apostle.m_7307_ (Apostle.java:399)

Common triggers: Goety summons (Inferno, Zombie Servants, ...) taking damage (especially in the Nether, or when several summons of the same kind are around), and fights involving the Apostle boss.

Root Cause

Multiple Goety entity classes override isAlliedTo (SRG: m_7307_). When the target AI HurtByTargetGoal.alertOthers passes a null getLastHurtByMob() into it:

  • Vanilla 1.20.1 Entity.isAlliedTo performs no null check on the argument and calls p.getTeam() directly → NPE;
  • Some Goety overrides (e.g. Apostle) dereference the argument (entityIn.getType(), Apostle.java:399) before calling super → also NPE.

After scanning every entity class in Goety 2.5.56.x / 2.5.57.0, 19 classes override isAlliedTo, and all of them share this hazard (three patterns: direct dereference / pass-through to vanilla / via the MobUtil.illagerAllies helper).

What's Fixed (v1.1.0)

  • Entry-level null guard on all 19 isAlliedTo overrides: a null argument returns false immediately (a null entity can never be an ally); checks on valid entities are completely unaffected — zero side effects
  • Vanilla Entity.isAlliedTo safety net: covers super pass-through paths and the same kind of calls from other mods
  • MobUtil.illagerAllies guard: the helper dereferences its arguments without a null check; now covered as well
  • Soft-mode crash resistance: mixin config required=false + defaultRequire=0 — if a future Goety update removes a class or renames a method, the affected mixin is skipped with a warning log and the game starts normally instead of crashing
  • Addon compatibility verified: GoetyAwaken (4 classes) and GoetyLadder (1 class) overrides are pass-through implementations, automatically covered by the safety net; GoetyRevelation and goetygrae declare no overrides — all verified class-by-class

Installation

  • Requires Forge 1.20.1 (47.x) + Goety 2.5.56+ (verified on 2.5.57.0)
  • Drop the jar into the mods folder (replace the old goetyownedfix-1.0.0.jar — do not install both)
  • Install on both client and server (for integrated servers, the machine hosting the save must have it)
  • Coexists with RevelationFix / Goety:Revelation / GoetyAwaken and other addons without conflicts

Compatibility

  • Mixin-only: applies null guards at runtime, contains no Goety code
  • If Goety officially fixes this issue later, simply delete this mod
  • All injections are additive @Injects; they never conflict with other mods' overrides

Changelog

  • 1.1.0: all 19 isAlliedTo overrides + vanilla Entity.isAlliedTo safety net + MobUtil.illagerAllies guard + soft-mode crash resistance
  • 1.0.0: only Owned.isAlliedTo fixed

License

MIT License

v1.0.0

Choose a tag to compare

@llxj12 llxj12 released this 19 Aug 19:08
3b99152

v1.0.0

  • 首次发布:修复诡厄巫法(Goety)召唤物(狱焰、僵尸仆从等)受伤时反复崩溃的 Ticking entity 空指针问题。
  • 通过 mixin 在 Owned.isAlliedTo 入口增加空判断,不改动任何游戏平衡或 AI 行为。
  • 依赖:Forge 47.x、Minecraft 1.20.1、Goety 2.5.56+。

v1.0.0

  • First release: fixes the recurring Ticking entity NullPointerException from Goety summons (Inferno, ZombieServant, etc.) when they take damage.
  • Adds a null guard at the entry of Owned.isAlliedTo via mixin; no gameplay or AI behaviour changes.
  • Dependencies: Forge 47.x, Minecraft 1.20.1, Goety 2.5.56+.