Fix refmap info not being present in the mixin json for the fabric build

This commit is contained in:
shedaniel
2020-12-30 19:04:29 +08:00
parent 859101428c
commit b6f1d22344
2 changed files with 10 additions and 8 deletions

View File

@@ -187,7 +187,7 @@ modId = "$fakeModId"
private fun fixMixins(output: File) {
val loomExtension = project.extensions.getByType(LoomGradleExtension::class.java)
val gson = GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create()
val mixinConfigs = mutableMapOf<String, JsonObject>()
val mixinConfigs = mutableListOf<String>()
val refmap = loomExtension.getRefmapName()
ZipUtil.iterate(output) { stream, entry ->
if (!entry.isDirectory && entry.name.endsWith(".json") &&
@@ -201,9 +201,7 @@ modId = "$fakeModId"
val hasClient = json.has("client") && json["client"].isJsonArray
val hasServer = json.has("server") && json["server"].isJsonArray
if (json.has("package") && (hasMixins || hasClient || hasServer)) {
mixinConfigs[entry.name] = json.deepCopy().also {
it.addProperty("refmap", refmap)
}
mixinConfigs.add(entry.name)
}
}
}
@@ -211,14 +209,11 @@ modId = "$fakeModId"
}
}
}
ZipUtil.replaceEntries(output, mixinConfigs.entries.map { (path, obj) ->
ByteSource(path, gson.toJson(obj).toByteArray())
}.toTypedArray())
if (mixinConfigs.isNotEmpty()) {
if (ZipUtil.containsEntry(output, "META-INF/MANIFEST.MF")) {
ZipUtil.transformEntry(output, "META-INF/MANIFEST.MF") { input, zipEntry, out ->
val manifest = Manifest(input)
manifest.mainAttributes.putValue("MixinConfigs", mixinConfigs.keys.joinToString(","))
manifest.mainAttributes.putValue("MixinConfigs", mixinConfigs.joinToString(","))
out.putNextEntry(ZipEntry(zipEntry.name))
manifest.write(out)
out.closeEntry()

View File

@@ -4,6 +4,8 @@ package me.shedaniel.architect.plugin
import me.shedaniel.architect.plugin.utils.GradleSupport
import me.shedaniel.architect.plugin.utils.Transform
import net.fabricmc.loom.LoomGradleExtension
import net.fabricmc.loom.util.MixinRefmapHelper
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.TaskAction
import org.gradle.jvm.tasks.Jar
@@ -19,5 +21,10 @@ open class TransformTask : Jar() {
project.logger.lifecycle(":transforming " + input.fileName + " => " + output.fileName)
Transform.transform(input, output, transformExpectPlatform())
val loomExtension = project.extensions.getByType(LoomGradleExtension::class.java)
if (MixinRefmapHelper.addRefmapName(loomExtension.getRefmapName(), loomExtension.mixinJsonVersion, output)) {
project.logger.debug("Transformed mixin reference maps in output JAR!")
}
}
}