Releases: llxj12/goetyownedfix
Release list
v2.0.0
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 nameisAlliedTo(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.isAlliedToperforms 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
isAlliedTooverrides: 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.isAlliedTosafety net: covers super pass-through paths and the same kind of calls from other mods MobUtil.illagerAlliesguard: 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
modsfolder - 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
isAlliedTooverrides in Goety 3.1.5.1 + vanillaEntity.isAlliedTosafety net +MobUtil.illagerAlliesguard + soft-mode crash resistance
License
MIT License
v1.1.1
goetyownedfix v1.1.1 —— 诡厄巫法召唤物崩溃补丁
修复 诡厄巫法 (Goety) 因 isAlliedTo 收到 null 实体而导致的「Ticking entity」崩溃家族。Forge 1.20.1 迷你补丁,纯 Mixin 实现,不含任何 Goety / RevelationFix 代码。
本次更新(v1.1.1)
- 新增 RevelationFix
HereticServant(异教徒)调用方守卫:经真实崩溃日志核实,下界中异教徒受伤时会把 null 透传进 GoetyApostle.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'sApostle.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.isAlliedToperforms no null check on the argument and callsp.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
isAlliedTooverrides: 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.isAlliedTosafety net: covers super pass-through paths and the same kind of calls from other mods MobUtil.illagerAlliesguard: the helper dereferences its arguments without a null check; now covered as wellHereticServant(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
modsfolder (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
HereticServantcaller-side entry guard (real-world crash path ) - 1.1.0: all 19
isAlliedTooverrides + vanillaEntity.isAlliedTosafety net +MobUtil.illagerAlliesguard + soft-mode crash resistance - 1.0.0: only
Owned.isAlliedTofixed
License
MIT License
v1.1.0
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.isAlliedToperforms no null check on the argument and callsp.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
isAlliedTooverrides: 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.isAlliedTosafety net: covers super pass-through paths and the same kind of calls from other mods MobUtil.illagerAlliesguard: 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
modsfolder (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
isAlliedTooverrides + vanillaEntity.isAlliedTosafety net +MobUtil.illagerAlliesguard + soft-mode crash resistance - 1.0.0: only
Owned.isAlliedTofixed
License
MIT License
v1.0.0
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+.