diff options
author | Linnea Gräf <nea@nea.moe> | 2023-12-10 18:15:59 +0100 |
---|---|---|
committer | Linnea Gräf <nea@nea.moe> | 2023-12-10 18:15:59 +0100 |
commit | cffdbe65b993a9ba81c30e4345e1a22f3cabbff2 (patch) | |
tree | 0783fd60934e8cd5072de44ae46d60a5ba323511 /plugin/src/main/kotlin/moe/nea/archenemy | |
parent | 0936f6272c7d1e41b7e9550bb17fe84af5d976c3 (diff) | |
download | archenemy-cffdbe65b993a9ba81c30e4345e1a22f3cabbff2.tar.gz archenemy-cffdbe65b993a9ba81c30e4345e1a22f3cabbff2.tar.bz2 archenemy-cffdbe65b993a9ba81c30e4345e1a22f3cabbff2.zip |
Actually remap a jar for once
Diffstat (limited to 'plugin/src/main/kotlin/moe/nea/archenemy')
3 files changed, 44 insertions, 24 deletions
diff --git a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappedRepositoryProvider.kt b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappedRepositoryProvider.kt index ddfff0d..ed158b5 100644 --- a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappedRepositoryProvider.kt +++ b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappedRepositoryProvider.kt @@ -68,26 +68,19 @@ class MappedRepositoryProvider( private fun getArtifact(coordinates: MappedCoordinates, identifier: ArtifactIdentifier): Artifact? { if ((identifier.classifier ?: "") != "") return null - val files = sharedExtension.project.configurations.detachedConfiguration( - coordinates.dependency, - coordinates.mappings.get() - ).also { it.isTransitive = false }.resolve() - // TODO: move away from classifiers. those are *evil*. - // for now i will just manually append -client - // or figure out how loom does it, i suppose - val sourceName = listOfNotNull( - coordinates.dependency.name, - coordinates.dependency.version, - coordinates.dependency.artifacts.single().classifier - ).joinToString(separator = "-", postfix = ".jar") - val sourceFile = files.singleOrNull { it.name == sourceName } ?: return null - val mappingsFile = coordinates.mappings.findMapping(files) ?: error("Could not find mappings file") - val targetFile = cacheDir.resolve(coordinates.transformerHash + ".jar") - targetFile.parentFile.mkdirs() return StreamableArtifact.ofStreamable(identifier, ArtifactType.BINARY) { + val files = sharedExtension.project.configurations.detachedConfiguration( + coordinates.dependency, + ).also { it.isTransitive = false }.resolve() + // TODO: move away from classifiers. those are *evil*. + // for now i will just manually append -client + // or figure out how loom does it, i suppose + val sourceFile = files.singleOrNull { true } ?: error("Only support single file dependencies rn") + coordinates.mappings.resolveMappingsOnce(sharedExtension) + val targetFile = cacheDir.resolve(coordinates.transformerHash + ".jar") + targetFile.parentFile.mkdirs() if (!targetFile.exists()) { coordinates.mappings.applyMapping( - mappingsFile = mappingsFile, sourceFile = sourceFile, targetFile = targetFile, sourceNameSpace = coordinates.from, diff --git a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappingDependency.kt b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappingDependency.kt index a0e1b14..76f109c 100644 --- a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappingDependency.kt +++ b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/MappingDependency.kt @@ -1,5 +1,6 @@ package moe.nea.archenemy.mojang +import org.gradle.api.Project import org.gradle.api.artifacts.Dependency import org.gradle.api.provider.Provider import java.io.File @@ -8,9 +9,8 @@ import java.security.MessageDigest interface MappingDependency : Provider<Dependency> { fun updateHash(digest: MessageDigest) fun title(): String - fun findMapping(files: Set<File>): File? + fun resolveMappingsOnce(extension: ArchenemyMojangExtension) fun applyMapping( - mappingsFile: File, sourceFile: File, targetFile: File, sourceNameSpace: String, diff --git a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/OfficialMappingDependency.kt b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/OfficialMappingDependency.kt index 4e44146..d9fccd6 100644 --- a/plugin/src/main/kotlin/moe/nea/archenemy/mojang/OfficialMappingDependency.kt +++ b/plugin/src/main/kotlin/moe/nea/archenemy/mojang/OfficialMappingDependency.kt @@ -3,9 +3,17 @@ package moe.nea.archenemy.mojang import moe.nea.archenemy.MCSide import moe.nea.archenemy.util.update import moe.nea.archenemy.util.updateField +import net.fabricmc.mappingio.format.ProGuardReader +import net.fabricmc.mappingio.format.Tiny2Writer +import net.fabricmc.tinyremapper.OutputConsumerPath +import net.fabricmc.tinyremapper.TinyRemapper +import net.fabricmc.tinyremapper.TinyUtils import org.gradle.api.artifacts.Dependency import org.gradle.api.provider.Provider +import java.io.BufferedReader import java.io.File +import java.io.StringReader +import java.io.StringWriter import java.security.MessageDigest class OfficialMappingDependency( @@ -14,6 +22,7 @@ class OfficialMappingDependency( val dependency: Provider<Dependency> ) : MappingDependency, Provider<Dependency> by dependency { + var tinyv2Source: String? = null override fun updateHash(digest: MessageDigest) { digest.update("official") @@ -25,20 +34,38 @@ class OfficialMappingDependency( return "official-$side-${version.replace(".","_")}" } - override fun findMapping(files: Set<File>): File? { - return files.singleOrNull { - it.name == "minecraft-${version}-${side}-mappings.txt" + override fun resolveMappingsOnce(extension: ArchenemyMojangExtension) { + if (tinyv2Source != null) return + val buffer = StringWriter() + val source = extension.project.configurations.detachedConfiguration(get()).resolve().single() + source.reader().use { + ProGuardReader.read(it, "named", "official", Tiny2Writer(buffer, false)) } + buffer.close() + tinyv2Source = buffer.toString() } override fun applyMapping( - mappingsFile: File, sourceFile: File, targetFile: File, sourceNameSpace: String, targetNameSpace: String ) { - sourceFile.copyTo(targetFile) + val remapper = TinyRemapper.newRemapper() + .withMappings( + TinyUtils.createTinyMappingProvider( + BufferedReader(StringReader(tinyv2Source ?: error("Mappings have never been resolved"))), + sourceNameSpace, + targetNameSpace, + ) + ) + .build() + OutputConsumerPath.Builder(targetFile.toPath()).build().use { output -> + remapper.readInputs(sourceFile.toPath()) + remapper.apply(output) + } + remapper.finish() + } }
\ No newline at end of file |