Mixin is a trait/mixin framework for Java using ASM and hooking into the runtime classloading process via a set of pluggable built-in or user-provided services. Built-in services currently support Mojang's LegacyLauncher system, though this is deprecated in favour of ModLauncher by cpw, which has greater extensibility and has support for Java 8 and later.
Documentation
The main documentation for Mixin can be found in the Wiki.
Additional documentation for individual features and annotations can be found in
the extensive Javadoc. For
additional help use the channel #mixin
on the Sponge Discord Server.
Binaries
Mixin binaries are available via Jenkins and are published to the following maven repositories:
- https://repo.spongepowered.org/repository/maven-public/ - SNAPHOTs and RELEASE builds
- https://files.minecraftforge.net/maven/ - RELEASE builds only
Tooling
For handling obfuscation tasks, Mixin provides an Annotation Processor
which works at compile time to generate obfuscation mappings for your toolchain
to apply. If using Gradle 5 or later, annotation processors are no longer
automatically loaded from compile
configurations and must be specified
explicitly via annotationProcessor
configurations. For this purpose, Mixin
provides "fat jar" artefacts containing all required dependencies via the
:processor
classifier. For example if your build uses the dependency
org.spongepowered:mixin:1.2.3
then your annotationProcessor configuration
should specify dependency org.spongepowered:mixin:1.2.3:processor
.
If you are using Mixin in a Minecraft Forge project then the MixinGradle plugin can be used to simplify the configuration of the Mixin Annotation Processor. It provides a simple syntax for configuring the Mixin AP for your project, see the MixinGradle README for how to configure MixinGradle.
Integration with Eclipse
When developing using Mixin, you can use the Mixin Annotation Processor within Eclipse to provide context-sensitive errors and warnings to help you more easily troubleshoot your mixins. To do so:
- Run the
gradle build
command to generate the mixin jar - Open the properties of your eclipse project and navigate to
Java Compiler
->Annotation Processing
->Factory Path
- Check the
Enable project specific settings
checkbox - Click the
Add External JARs
button and select the generated mixin jar with the suffix -processor (hint: it should be inMixin/build/libs
) - Navigate up one level to
Java Compiler
->Annotation Processing
- Check the
Enable project specific settings
checkbox - Check the
Enable annotation processing
checkbox - Click the
New...
button next to theProcessor options
box
- Set
Key
to reobfSrgFile - Set
Value
to the fully-qualified path to themcp-srg.srg
file (the location of the mapping file varies by platform, if you are unsure where to find it please follow the discord link below).
- Click
OK
to apply the changes
Integration with IntelliJ IDEA
Enhanced functionality for working with Mixin in IntelliJ IDEA is available via the Minecraft Development for IntelliJ IDEA plugin developed by DemonWav.
Version History
Specifying the minVersion
property in your configurations
is extrememly important. The following version history can be used to determine
when features were introduced (and sometimes when major bugs are squashed) in
order to help you determine which minVersion
you should specify.
Version | Date | Features / Changes |
---|---|---|
0.8.3 | February 2021 |
|
September 2020 |
|
|
0.8 | January 2020 |
|
0.7.11 | July 2018 |
|
0.7.10 | June 2018 |
|
0.7.9 | April 2018 |
|
0.7.8 | April 2018 |
|
0.7.7 | March 2018 |
|
0.7.6 | November 2017 |
|
0.7.5 | October 2017 |
|
0.7.4 | September 2017 |
|
0.7.3 | August 2017 |
|
0.7.2 | August 2017 |
|
0.7.1 | August 2017 |
|
0.7 | July 2017 |
|
0.6.15 | July 2017 |
|
0.6.14 | July 2017 |
|
0.6.13 | July 2017 |
|
0.6.12 | June 2017 |
|
0.6.11 | June 2017 |
|
0.6.10 | May 2017 |
|
0.6.8 | February 2017 |
|
0.6.7 | January 2017 |
|
0.6.6 | January 2017 |
|
0.6.5 | January 2017 |
|
0.6.4 | January 2017 |
|
0.6.3 | December 2016 |
|
0.6.2 | December 2016 |
|
0.6.1 | November 2016 |
|
0.6 | October 2016 |
|
0.5.17 | October 2016 |
|
0.5.16 | October 2016 |
|
0.5.14 | September 2016 |
|
0.5.13 | September 2016 |
|
0.5.10 | June 2016 |
|
0.5.9 | June 2016 |
|
0.5.8 | June 2016 |
|
0.5.7 | June 2016 |
|
0.5.6 | May 2016 |
|
0.5.5 | April 2016 |
|
0.5.4 | April 2016 |
|
0.5.3 | February 2016 |
|
0.5.2 | February 2016 |
|
0.5.1 | February 2016 |
|
0.4.19 | February 2016 |
|
0.4.18 | February 2016 |
|
0.4.17 | January 2016 |
|
0.4.15 | January 2016 |
|
0.4.14 | January 2016 |
|
0.4.13 | January 2016 |
|
0.4.11 | January 2016 |
|
0.4.10 | December 2015 |
|
0.4.8 | December 2015 |
|
0.4.6 | September 2015 |
|
0.4.4 | July 2015 |
|
0.4.3 | May 2015 |
|
0.4 | May 2015 |
|
0.3.2 | April 2015 |
|
0.3.1 | April 2015 |
|
0.3 | March 2015 |
|
0.2 | March 2015 |
|
0.1 | January 2015 |
|