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)
}
- 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)
MixinConfigsmanifest 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.MixinConnectormanifest attribute: register configs programmatically. Point it at a class implementingorg.spongepowered.asm.mixin.connect.IMixinConnector, itsconnect()is called during boot, where you callMixins.addConfiguration(...)yourself.
Both manifest attributes are set on your jar task:
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");
}
}