| name | mixin-guide |
| description | Guide for configuring Mixins in Architectury multi-loader projects |
Mixin Configuration Guide
Purpose: Guide for configuring Mixins in Architectury multi-loader projects.
How it works: This skill is automatically activated when you mention tasks related to:
- Adding new Mixin classes
- Configuring Mixin files for Fabric or NeoForge
- Debugging Mixin-related errors (InvalidInjectionException, refMap issues)
- Setting up build configuration for Mixins
Simply describe what you want to do, and Claude will reference the appropriate guidance from this skill.
Critical: Loader-Specific Mixin Configurations (2025-12-02)
Problem: Fabric and NeoForge require different Mixin configurations due to mapping differences.
Loader-Specific Mixin Files
Fabric:
fabric/src/main/resources/chronodawn-fabric.mixins.json- Must include
"refmap": "common-common-refmap.json" - Required for Mojang → Intermediary mapping conversion in production
- Referenced in
fabric.mod.json
- Must include
NeoForge:
neoforge/src/main/resources/chronodawn-neoforge.mixins.json- Must NOT include refMap property
- Uses Mojang mappings directly in development environment
- Referenced in
META-INF/neoforge.mods.toml
Common:
common/src/main/resources/chronodawn.mixins.json- No refMap property
- Excluded from both JARs via build.gradle exclude rules
- Kept for reference only
Adding New Mixins
When adding new Mixin classes:
- Create Mixin class in
common/src/main/java/com/chronodawn/mixin/ - Update both loader-specific configs:
- Add to
chronodawn-fabric.mixins.json(with refMap) - Add to
chronodawn-neoforge.mixins.json(without refMap)
- Add to
- Do NOT modify
chronodawn.mixins.json(excluded from builds)
Build Configuration
Fabric (fabric/build.gradle):
processResources {
from(project(':common').sourceSets.main.resources) {
exclude 'chronodawn.mixins.json' // Exclude common config
}
}
shadowJar {
exclude 'chronodawn.mixins.json' // Also exclude from shadow JAR
}
NeoForge (neoforge/build.gradle):
from(project(":common").sourceSets.main.resources) {
exclude "chronodawn.mixins.json" // Already configured
}
Why This Separation is Necessary
- Fabric (Production): Runs with Intermediary mappings → needs refMap to translate method names
- NeoForge (Development): Runs with Mojang mappings → refMap causes InvalidInjectionException
- Root Cause: Architectury Loom generates refMap using Intermediary mappings, incompatible with NeoForge's Mojang mappings
Reference: Commit 77958c0 (fix: separate loader-specific Mixin configs)
Troubleshooting
InvalidInjectionException in NeoForge
Symptom: Mixin injection fails in NeoForge but works in Fabric.
Cause: NeoForge Mixin config includes refMap property.
Solution: Remove "refmap" from chronodawn-neoforge.mixins.json.
Mixin Not Applied
Symptom: Mixin class exists but doesn't apply at runtime.
Checklist:
- Verify Mixin class is in
chronodawn-fabric.mixins.json(for Fabric) - Verify Mixin class is in
chronodawn-neoforge.mixins.json(for NeoForge) - Check Mixin config is referenced in
fabric.mod.json/neoforge.mods.toml - Verify build excludes
chronodawn.mixins.jsonfrom JARs
RefMap Missing in Production
Symptom: Fabric mod works in dev but crashes in production with refMap errors.
Cause: Missing "refmap": "common-common-refmap.json" in chronodawn-fabric.mixins.json.
Solution: Add refMap property to Fabric Mixin config.
Last Updated: 2025-12-08 Maintained by: Chrono Dawn Development Team