This is a pure compatibility patch mod. It adds no new content, only enabling T.O Magic 'n Extras (traveloptics) 6.3.0 to launch and run properly alongside Cataclysm 3.31.
What it fixes
Cataclysm 3.31 removed and renamed a set of classes still referenced by traveloptics 6.3.0, including various particle option data classes, CMConfig, Boltstrike_Entity, Dungeon_Eye.DungeonEyeItem, and more. This causes traveloptics to throw NoClassDefFoundError during startup or particle explosions. This patch resolves the issue at three levels:
Coremod rewrite at load time (core function)
META-INF/coremods.json → coremods/traveloptics_cataclysm_compat.js. When traveloptics classes load, a class transformer rewrites outdated type references in the constant pool:
- Redirect references to the actual migrated/renamed classes in Cataclysm 3.31:
DungeonEyeItem,Bolt_strike_Entity - Or redirect references to stub classes within this mod's own package (
cn.blockforge.generated.cataclysmcompat.compat): 10 particle data classes + CMConfig.
Key design choice: No classes are exported under the com.github.L_Ender.cataclysm namespace, avoiding Forge/JPMS split-package startup crashes.
Particle system: Stub + Bridge
Stub classes report particle types registered by this mod (CompatTypes). The client-side CompatParticleBridge maps each stub back to the real Cataclysm 3.31 Options.* records. These records are final and cannot be extended, which is why direct inheritance previously triggered ClassCastException. Particles are re-emitted via ParticleEngine#createParticle, rendered by Cataclysm's own factory with pixel-perfect identical visuals. If Cataclysm changes record constructors in future updates, the affected particle will be silently discarded with a warning log, and the game will not crash.
Fix broken entity tags
Resend entity type tags under data/traveloptics/tags/entity_types/ for element_fire, aerial_collapse_dr, spectral_blink_blacklist. Remove entries referencing removed Cataclysm entities (such as ancient_ancient_remnant, old_netherite_monstrosity). Uses replace: true to overwrite the original tags.