Kotlin mixins support
Originally made for LavaHack
To build refmapper you need to have JDK 17 installed
- Download refmapper source code by clicking
Code -> Download ZIPon the main page - Extract the source code somewhere and open cmd (on Windows) or Terminal
- Execute
gradlew build(if you're on Windows) orchmod +x ./gradlew && ./gradlew build(if you're on Linux) and wait until the building process finishes - After that you should have a file called
refmapper-VERSION.jarinside<refmapper src>/build/libsfolder - Use it anywhere you need
You can download stable prebuilt JARs from the releases page
To use CLI you need to have tiny mappings and named minecraft jar
To use yarn2tiny you need to have yarn mappings
- Figure out yarn mappings version you need
- Replace
YARN_VERSIONin link from next step to your yarn mappings version - Download archive from
https://maven.fabricmc.net/net/fabricmc/yarn/YARN_VERSION/yarn-YARN_VERSION-tiny.gz - Extract the archive somewhere
- Generate
tinymappings with yarn2tiny
To use srg2tiny you need to have srg/fields/methods mappings
- Figure out for what minecraft version you need mappings
- Download MCP for your version from here
- Extract
conffolder frommcpXXX.zip - Use
conf/joined.srgassrgmappings - Use
conf/fields.csvasfieldsmappings - Use
conf/methods.csvasmethodsmappings - Generate
tinymappings with srg2tiny
- Setup empty fabric mod project
- Execute
gradlew getSources(if you're on Windows) orchmod +x ./gradlew && ./gradlew getSources(if you're on Linux) and wait until the process finishes - Open each folder in
<project src>/.gradle/loom-cache/minecraftMaven/until you no longer see more folders - Move
XXX.jarfile(notXXX-sources.jar) to somewhere
- Setup empty forge mod project
- Execute
gradlew build(if you're on Windows) orchmod +x ./gradlew && ./gradlew build(if you're on Linux) and wait until the process finishes - Go to
<userfolder>/.gradle/caches/forge_gradle/minecraft_user_repo/net/minecraftforge/forge/X.XX.X-XX.XX.X.XXXX_mapped_stable_XX-X.XX/ - Move
forge-X.XX.X-XX.XX.X.XXXX_mapped_stable_XX-X.XX.jarto somewhere
- Execute
java -jar refmapper-VERSION.jar "raw mod" "refmapped mod" "tiny mappings" "named minecraft jar" - Move
"refmapped mod"into.minecraft/modsfolder - Enjoy!
- Make sure to check up if you have mixins written in kotlin or refmapper is useless
- Download
refmapper-VERSION.jarand put it into<project src> - Create
<project src>/refmapperfolder - Get
tinymappings, rename it totinyand put into<project src>/refmapper
- Put the following code into
<project src>/build.gradle.kts
task<Exec>("refmapper") {
commandLine(
"java",
"-jar",
"refmapper-VERSION.jar",
"build/libs/MOD_NAME-MOD_VERSION.jar",
"build/libs/MOD_NAME-MOD_VERSION-refmap.jar",
"refmapper/tiny",
".gradle/loom-cache/minecraftMaven/net/minecraft/minecraft-merged-project-root/MINECRAFT_VERSION1-net.fabricmc.yarn.MINECRAFT_VERSION2.YARN_MAPPINGS-YARN_VERSION/minecraft-merged-project-root-MINECRAFT_VERSION1-net.fabricmc.yarn.MINECRAFT_VERSION2.YARN_MAPPINGS-YARN_VERSION.jar"
)
}- Replace
MOD_NAMEto${base.archivesName.get()} - Replace
MOD_VERSIONto$version
if you're using build.gradle.kts from kotlin mod template
- Replace
MINECRAFT_VERSION1to${project.extra["minecraft_version"] as String} - Replace
MINECRAFT_VERSION2to${(project.extra["minecraft_version"] as String).replace('.', '_')} - Replace
YARN_MAPPINGSto${project.extra["yarn_mappings"] as String} - Replace
YARN_VERSIONtov2
if you're using custom build.gradle.kts
- Replace
MINECRAFT_VERSION1to minecraft version inX.XX.Xformat - Replace
MINECRAFT_VERSION2to minecraft version inX_XX_Xformat - Replace
YARN_MAPPINGSto yarn mappings for your minecraft version - Replace
YARN_VERSIONto yarn mappings version format(v2by default)
- Put the following code into
<project src>/build.gradle
tasks.register('refmapper', Exec) {
commandLine(
"java",
"-jar",
"refmapper-VERSION.jar",
"build/libs/MOD_NAME-MOD_VERSION.jar",
"build/libs/MOD_NAME-MOD_VERSION-refmap.jar",
"refmapper/tiny",
"USER_FOLDER/.gradle/caches/forge_gradle/minecraft_user_repo/net/minecraftforge/forge/MINECRAFT_VERSION-FORGE_VERSION_mapped_MAPPINGS_CHANNEL_MAPPINGS_VERSION/forge-MINECRAFT_VERSION-FORGE_VERSION_mapped_MAPPINGS_CHANNEL_MAPPINGS_VERSION.jar"
)
}- Replace
MOD_NAMEto${archivesBaseName} - Replace
MOD_VERSIONto$version - Replace
USER_FOLDERto path to your user folder(/home/USERNAME/C:/Users/USERNAMEfor example)
if you have following properties in gradle.properties
- Replace
MINECRAFT_VERSIONto$minecraftVersion - Replace
FORGE_VERSIONto$forgeVersion - Replace
MAPPINGS_CHANNELto$mappingsChannel - Replace
MAPPINGS_VERSIONto$mappingsVersion
else
- Figure out minecraft/forge/mappings versions and mappings channel from
minecraft { ... }ofbuild.gradle
After each gradlew build execute gradlew refmapper
Built mod file is MOD_NAME-MOD_VERSION-refmap.jar
Handling Inject/Redirect/ModifyArgs/Accessor/Invoker hooks of original mixins
Handling WrapWithCondition hook of MixinExtras
Handling HEAD/TAIL/RETURN/INVOKE/FIELD/JUMP injection points
Remapping mixins with ClassTypeSignature as target
Remapping shadow/overridden members
Remapping accesswinder instead of fabric loom(WIP)
Remapping lambdas
Redirect/ModifyArgs hook may not work for methods whose descriptor is different from ()V
Remapped shadow field/method counters do not work correctly
Mixins with override methods are not currently supported(WIP)
Mixins from child packages are not currently supported