diff --git a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/NumismaticsGradlePlugin.kt b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/NumismaticsGradlePlugin.kt index 4adc1d5f..7d59675a 100644 --- a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/NumismaticsGradlePlugin.kt +++ b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/NumismaticsGradlePlugin.kt @@ -18,6 +18,7 @@ package dev.ithundxr.numismaticsgradle +import dev.ithundxr.numismaticsgradle.asm.internal.SubprojectType import dev.ithundxr.numismaticsgradle.transformer.PostCompileTransformer import org.gradle.api.Plugin import org.gradle.api.Project @@ -26,7 +27,7 @@ class NumismaticsGradlePlugin : Plugin { override fun apply(project: Project) { project.tasks.named("remapJar").configure { doLast { - PostCompileTransformer().transformJar(project.path, outputs.files.singleFile) + PostCompileTransformer().transformJar(project, outputs.files.singleFile) } } } diff --git a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/NumismaticsGradleASM.kt b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/NumismaticsGradleASM.kt index 097c0d98..6e1fc630 100644 --- a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/NumismaticsGradleASM.kt +++ b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/NumismaticsGradleASM.kt @@ -20,21 +20,22 @@ package dev.ithundxr.numismaticsgradle.asm import dev.ithundxr.numismaticsgradle.asm.internal.SubprojectType import dev.ithundxr.numismaticsgradle.asm.transformers.CCCapabilitiesASM +import org.gradle.api.Project import org.objectweb.asm.ClassReader import org.objectweb.asm.ClassWriter import org.objectweb.asm.tree.ClassNode import org.objectweb.asm.util.CheckClassAdapter class NumismaticsGradleASM { - fun transformClass(projectPath: String, bytes: ByteArray): ByteArray { + fun transformClass(project: Project, bytes: ByteArray): ByteArray { // Get project type - val project = SubprojectType.getProjectType(projectPath) + val projectType = SubprojectType.getProjectType(project) var node = ClassNode() ClassReader(bytes).accept(node, 0) // Transformers - node = CCCapabilitiesASM().transform(project, node) + node = CCCapabilitiesASM().transform(projectType, node) // Verify the bytecode is valid val byteArray = ClassWriter(0).also { node.accept(it) }.toByteArray() diff --git a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/internal/SubprojectType.kt b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/internal/SubprojectType.kt index 1e5e77b5..baa204e8 100644 --- a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/internal/SubprojectType.kt +++ b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/asm/internal/SubprojectType.kt @@ -18,12 +18,14 @@ package dev.ithundxr.numismaticsgradle.asm.internal +import org.gradle.api.Project + enum class SubprojectType { COMMON, FABRIC, FORGE; companion object { - fun getProjectType(projectPath: String): SubprojectType { - return when (projectPath) { + fun getProjectType(project: Project): SubprojectType { + return when (project.path) { ":common" -> COMMON ":fabric" -> FABRIC ":forge" -> FORGE diff --git a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/transformer/PostCompileTransformer.kt b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/transformer/PostCompileTransformer.kt index 4aee2a30..4231802c 100644 --- a/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/transformer/PostCompileTransformer.kt +++ b/buildSrc/src/main/kotlin/dev/ithundxr/numismaticsgradle/transformer/PostCompileTransformer.kt @@ -21,6 +21,7 @@ package dev.ithundxr.numismaticsgradle.transformer import dev.ithundxr.numismaticsgradle.asm.NumismaticsGradleASM import groovy.json.JsonOutput import groovy.json.JsonSlurper +import org.gradle.api.Project import java.io.File import java.util.jar.JarEntry import java.util.jar.JarFile @@ -28,7 +29,11 @@ import java.util.jar.JarOutputStream import java.util.zip.Deflater class PostCompileTransformer { - fun transformJar(projectPath: String, jar: File) { + fun transformJar(project: Project, jar: File) { + var architecturyInjectableName = project.name + if (project.rootProject != project) + architecturyInjectableName = project.rootProject.name + "_" + architecturyInjectableName + val contents = linkedMapOf() JarFile(jar).use { it.entries().asIterator().forEach { entry -> @@ -43,13 +48,13 @@ class PostCompileTransformer { JarOutputStream(jar.outputStream()).use { out -> out.setLevel(Deflater.BEST_COMPRESSION) contents.forEach { var (name, data) = it - if (Regex("architectury_inject_.+_common").matches(name)) + if (name.contains("architectury_inject_${architecturyInjectableName}_common")) return@forEach if (name.endsWith(".json") || name.endsWith(".mcmeta")) { data = (JsonOutput.toJson(JsonSlurper().parse(data)).toByteArray()) } else if (name.endsWith(".class")) { - data = NumismaticsGradleASM().transformClass(projectPath, data) + data = NumismaticsGradleASM().transformClass(project, data) } out.putNextEntry(JarEntry(name))