MixinBooter
Allows any mixins that work on mods to work effortlessly on 1.8 - 1.12.2
-
Current Mixin Version: CleanMix 0.2.9 by CleanroomMC, a fork of SpongePowered/Fabric Mixin (0.8.7)
-
Current MixinExtra Version: 0.5.4
Pseudo-Changelog:
-
As of 4.2, MixinBooter's API has changed and all mods that uses mixins are encouraged to depend on MixinBooter, even those that mixin into vanilla/forge/library classes. To avoid mixin version mismatches with mods crashing trying to implement modded mixins (looking at you VanillaFix). Thanks to @embeddedt recommending and helping me introduce this change!
-
As of 5.0, MixinExtras by @LlamaLad7 is shaded. Available for developers to use.
-
As of 8.0, MixinBooter will now work from 1.8 - 1.12.2. One single build works with all these versions! (TODO: LiteLoader support?)
-
As of 8.4, MixinBooter actively attempts to be compatible with SpongeForge
-
As of 9.2, MixinBooter reinstates the older MixinLoader annotation for 1.8.x usages.
-
As of 10.0, MixinBooter follows Mixin 0.8.7
-
As of 11.0, MixinBooter is built on CleanMix. As an effort to create an unified backend with Cleanroom.
- No longer would you need to declare dependencies for the annotation processor yourself.
- Also adds a config file (
config/mixinbooter.cfg) to blacklist mixin configs and toggle debug options - Dedicated
logs/mixinbooter.logmixin log. With ability to trace class-loading for precise debugging. - Allows traditional
MixinConfig+MixinConnectormanifest attribute entries to be fully involved in the ecosystem - Mod discovery for mixin owners, better
isModLoadedchecks - Suppresses Forge's corrupt zip warnings
- Phased out mixin "phases"
For Developers ~ Getting Started:
- Add CleanroomMC's repository and depend on MixinBooter's maven entry:
repositories { maven { url 'https://maven.cleanroommc.com' } }
dependencies { def mixin = 'zone.rong:mixinbooter:11.0'
implementation (mixin) {
transitive = false
}
annotationProcessor mixin
// RetroFuturaGradle for refmap generation:
modUtils.enableMixins(mixin)
// modUtils.enableMixins(mixin, 'mod_id.mixins.refmap.json') << add refmap name as 2nd arg (optional)
}
2. Pick how to register your mixin configurations. MixinBooter supports lots of approaches:
(As of 11.0, early/late divide is no longer present, therefore IEarly/ILateMixinLoaders are deprecated)
- **`MixinConfigs` manifest attribute**: no loader class needed. Add a space-separated list of your mixin configuration names to your jar's manifest. MixinBooter reads it straight from the jar's manifest and registers them.
- **`MixinConnector` manifest attribute**: register configs programmatically. Point it at a class implementing `org.spongepowered.asm.mixin.connect.IMixinConnector`, its `connect()` is called during boot, where you call `Mixins.addConfiguration(...)` yourself.
Both manifest attributes are set on your jar task:
```groovy
jar {
manifest {
attributes(
'MixinConfigs': 'mixins.mymod.json',
'MixinConnector': 'com.example.mymod.MyMixinConnector'
)
}
}
public class MyMixinConnector implements IMixinConnector {
@Override
public void connect() {
// Check if mod is loaded before registering?
// Possible with zone.rong.mixinbooter.service.ModDiscoverer.isModPresent(String modId)
Mixins.addConfiguration("mixins.mymod.json");
}
} All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 | ||||
| 15h ago | 1 |
- Crash in dev when calling some classes earlier, hardened classloader isolation
- Detection widened for development environments for those using other gradle plugins
- Full changelog between 11.17 and 11.18**: https://github.com/CleanroomMC/MixinBooter/compare/11.17...11.18
- Dev classpath only mixin jars being hidden from mod discovery via reparseable coremods
- Full changelog between 11.16 and 11.17**: https://github.com/CleanroomMC/MixinBooter/compare/11.16...11.17
- Mods on the dev classpath not being considered during mod discovery
- Full changelog between 11.15 and 11.16**: https://github.com/CleanroomMC/MixinBooter/compare/11.15...11.16
- Compatibility with ReplayMod, as it depended on an erroneous behaviour
- Full changelog between 11.14 and 11.15**: https://github.com/CleanroomMC/MixinBooter/compare/11.14...11.15
- ModDirector/FileDirectory and JsonPaintings mods not being properly discovered
- Certain mods being recognized twice for discovery
- Updated CleanMix to 0.7.2
- Full changelog between 11.13 and 11.14**: https://github.com/CleanroomMC/MixinBooter/compare/11.13...11.14
- Parent and child mixins to reconciling properly, issue noted first in GroovyScript's Mixin for the Calculator mod
- Updated CleanMix to 0.7.1
- Always scan
@Modannotations (thanks @youyihj!) - Compressed logo size (thanks @RuiXuqi!)
- Full changelog between 11.12 and 11.13**: https://github.com/CleanroomMC/MixinBooter/compare/11.12...11.13
- Updated MixinExtras to use our own fork
- Compatibility with mods that use older MixinExtras versions that load late
- Full changelog between 11.11 and 11.12**: https://github.com/CleanroomMC/MixinBooter/compare/11.11...11.12
- Fixed INIT phase transition failing silently
- Full changelog between 11.10 and 11.11**: https://github.com/CleanroomMC/MixinBooter/compare/11.10...11.11
- Errors with
INITandDEFAULTmixins when being consumed by CleanMix too early
- Update CleanMix to 0.7.0
- Full changelog between 11.9 and 11.10**: https://github.com/CleanroomMC/MixinBooter/compare/11.9...11.10
- Update CleanMix to 0.6.1
- A new
@Compatibilityannotation, can be explicitly set to enact localized compatibility to replicate an older behaviour
- Compatibility with mods that relied on old injection/field initialization order behaviour
- Updated CleanMix to 0.6.0
- Full changelog between 11.7 and 11.8**: https://github.com/CleanroomMC/MixinBooter/compare/11.7...11.8
- Updated CleanMix to 0.5.1, accessors now eagerly load their targets
- Full changelog between 11.6 and 11.7**: https://github.com/CleanroomMC/MixinBooter/compare/11.6...11.7
- Updated CleanMix to 0.5.0, fixed mixins not loading in some mods
- Old mods doing dumb things
- Full changelog between 11.4 and 11.5**: https://github.com/CleanroomMC/MixinBooter/compare/11.4...11.5
- Rescuing all coremods that have a TweakClass attribute, instead only help those that have MixinTweaker as the TweakClass
- Full changelog between 11.3 and 11.4**: https://github.com/CleanroomMC/MixinBooter/compare/11.3...11.4
- Warnings if mixins have somehow got no accessor targets
- Exclusion of Mixin's launch package by default, may fix dev environment woes
- Concurrent modifications when mixin configurations are being registered and selected
- Allow
IExtensionclasses to passthrough and be in the same packages as mixins - Superclasses not being considered if they're interfaces
- Full changelog between 11.2 and 11.3**: https://github.com/CleanroomMC/MixinBooter/compare/11.2...11.3
- #124, now MixinExtras won't crash in older Minecraft versions
- #126, injects
CoremodRescuerearlier in the tweakers list, helps mods using wrong APIs to still submit mixin configurations properly - Incompatibility with mods like VintageFix which errors due to an upstream regression for synthetic inner classes
- Updated CleanMix to 0.4.1
- Prefer reading
ForgeVersionwith reflection for the current Minecraft version (thanks to @ZZZank)
- Full changelog between 11.1 and 11.2**: https://github.com/CleanroomMC/MixinBooter/compare/11.1...11.2
- Compatibilities with older minecraft versions
- To have more robust suppression of class reading errors presented by Forge
- Full changelog between 11.0 and 11.1**: https://github.com/CleanroomMC/MixinBooter/compare/11.0...11.1
- Allowing traditional
MixinConfigs&MixinConnectorway of registering mixins once again - Suppression of "corrupt zip" warnings from Forge when reading mods and parsing data
- Mod discovery (properly done). Accessible via
ModDiscoverer - Way to resolve mod ids in a more correct and explicit manner
- Dedicated mixin logging output:
/logs/mixinbooter.log - Configuration for various mixin flags and audit file
- Class-loading now traceable, helps with certain mixins trying to mixin classes that are loaded too early, good way to debug this issue
- Better testing within the workspace
- Warnings of mods shading mixins into their own jar file
- Documentation
### Changed
- CleanMix! Bridged the gap, CleanMix will be used in Cleanroom (as it updates soon tm)
- Deprecated early/mixin loading stages, division is no longer present
- Deprecated loader, hijacker interfaces
- Included annotation processor dependencies for maven artifact
- Better "mod is present" checks
- Phasing out mixin "phases", configs gets immediately selected and processed
### Removed
- Explicit mod fixes
- Updated MixinExtras from 0.5.0-rc.1 to 0.5.0
- Full changelog between 10.6 and 10.7**: https://github.com/CleanroomMC/MixinBooter/compare/10.6...10.7
- Updated MixinExtras from 0.5.0-beta.5 to 0.5.0-rc.1
- GsonBuilder#setLenient not existing on older Gson versions
- Full changelog between 10.5 and 10.6**: https://github.com/CleanroomMC/MixinBooter/compare/10.5...10.6
- Explicit compatibility with checking if Optifine is loaded at coremod stages (for the Context obj)
- Hotswap Agent related manifest entries to allow hotswapping outside of dev
- Edge-cases in reading some mods' mcmod.infos
- Full changelog between 10.4 and 10.5**: https://github.com/CleanroomMC/MixinBooter/compare/10.4...10.5
- Made reading mod metadata quicker and simpler
- Updated MixinExtras to 0.5.0-beta.5
- SpongeForge compatibility, due to a Forge oversight
- Full changelog between 10.3 and 10.4**: https://github.com/CleanroomMC/MixinBooter/compare/10.3...10.4
- Context to
IMixinConfigHijacker
- Allowed all mixin configs to be hijacked
- Use
JsonReader#setLenientoverGsonBuilder#setLenientfor older Gson versions supplied by older Minecraft versions - Use deprecated
Handleconstructor for older ASM versions supplied by older Minecraft versions - Catch loader issues instead of exiting and not loading subsequent loaders
- Full changelog between 10.2 and 10.3**: https://github.com/CleanroomMC/MixinBooter/compare/10.2...10.3
- Specified ordinality on a local capture for when the mixin is applied in brittle contexts
- Full changelog between 10.1 and 10.2**: https://github.com/CleanroomMC/MixinBooter/compare/10.1...10.2
- Few certain vanilla classes loading early, breaking some deobfuscation into SRG
- Full changelog between 10.0 and 10.1**: https://github.com/CleanroomMC/MixinBooter/compare/10.0...10.1
- New API (Context) for early/late loaders
- Updated UniMix, is now updated with Fabric Mixin 0.15.3, Mixin 0.8.7
- Updated to MixinExtras 0.5.0-beta4
- Better logging at launch
- Hijackers not applied to late mixins
- Mod description typo
- Full changelog between 9.4 and 10.0**: https://github.com/CleanroomMC/MixinBooter/compare/9.4...10.0
- Updated UniMix
- Enable
comformVisibilitytotrueby default - thanks to jbredwards
- Compatibility with older ASM libraries - thanks to HowardZHY
- Full changelog between 9.3 and 9.4**: https://github.com/CleanroomMC/MixinBooter/compare/9.3...9.4
- Reinstated
@MixinLoaderannotation, primarily for 1.8.x usages as Forge does not support gathering of interfaces
- Mixin source files not embed within the source jar
- 1.8.x related crashes fixed (thanks to @HowardZHY!)
- Full changelog between 9.1 and 9.2**: https://github.com/CleanroomMC/MixinBooter/compare/9.1...9.2
- Removed fastutil usages, to keep compatibility with Minecraft versions that used different fastutil versions
- Full changelog between 9.0 and 9.1**: https://github.com/CleanroomMC/MixinBooter/compare/9.0...9.1