大灾变魔法兼容

大灾变魔法兼容

这是一个纯兼容性补丁,通过核心模组类转换、粒子存根桥接系统和修正后的实体标签,修复了T.O Magic 'n Extras 6.3.0与Cataclysm 3.31之间的`NoClassDefFoundError`崩溃问题,并未添加任何新内容。

这是一个纯兼容性补丁模组。它不添加任何新内容,仅使 T.O Magic 'n Extras (traveloptics) 6.3.0 能够与 Cataclysm 3.31 一起正常启动和运行。

修复内容

Cataclysm 3.31 移除并重命名了一组仍被 traveloptics 6.3.0 引用的类,包括各种粒子选项数据类、CMConfig、Boltstrike_Entity、Dungeon_Eye.DungeonEyeItem 等。这导致 traveloptics 在启动或粒子爆炸时抛出 NoClassDefFoundError。此补丁在三个层面解决该问题:

加载时进行 Coremod 重写(核心功能)

META-INF/coremods.json → coremods/traveloptics_cataclysm_compat.js。当 traveloptics 类加载时,一个类转换器会重写常量池中过时的类型引用:

  • 将对 Cataclysm 3.31 中实际迁移/重命名的类的引用重定向:DungeonEyeItem、Bolt_strike_Entity
  • 或者将对引用重定向到本模组自身包内的存根类(cn.blockforge.generated.cataclysmcompat.compat):10 个粒子数据类 + CMConfig。

关键设计选择:不在 com.github.L_Ender.cataclysm 命名空间下导出任何类,从而避免 Forge/JPMS 拆分包启动崩溃。

粒子系统:存根 + 桥接

存根类报告由本模组注册的粒子类型(CompatTypes)。客户端的 CompatParticleBridge 将每个存根映射回真正的 Cataclysm 3.31 Options.* 记录。这些记录是 final 的,无法被继承,这就是之前直接继承会触发 ClassCastException 的原因。粒子通过 ParticleEngine#createParticle 重新发出,由 Cataclysm 自身的工厂渲染,视觉效果像素级完全一致。如果 Cataclysm 在未来的更新中更改记录构造函数,受影响的粒子将被静默丢弃并记录一条警告日志,游戏将不会崩溃。

修复损坏的实体标签

在 data/traveloptics/tags/entity_types/ 下重新发送 element_fire、aerial_collapse_dr、spectral_blink_blacklist 的实体类型标签。移除引用已删除的 Cataclysm 实体的条目(例如 ancient_ancient_remnant、old_netherite_monstrosity)。使用 replace: true 覆盖原始标签。