Skip to content

Commit

Permalink
Wait, it's all gradle?^2
Browse files Browse the repository at this point in the history
  • Loading branch information
IThundxr committed Jun 8, 2024
1 parent 84a3b6e commit 58049b8
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -26,7 +27,7 @@ class NumismaticsGradlePlugin : Plugin<Project> {
override fun apply(project: Project) {
project.tasks.named("remapJar").configure {
doLast {
PostCompileTransformer().transformJar(project.path, outputs.files.singleFile)
PostCompileTransformer().transformJar(project, outputs.files.singleFile)
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,19 @@ 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
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<String, ByteArray>()
JarFile(jar).use {
it.entries().asIterator().forEach { entry ->
Expand All @@ -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))
Expand Down

0 comments on commit 58049b8

Please sign in to comment.