Skip to content

Commit

Permalink
pain
Browse files Browse the repository at this point in the history
  • Loading branch information
IThundxr committed Jun 8, 2024
1 parent 58049b8 commit a1a1975
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 75 deletions.
1 change: 1 addition & 0 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,7 @@ subprojects {
}

tasks.named<RemapJarTask>("remapJar") {
from("${rootProject.projectDir}/LICENSE")
val shadowJar = project.tasks.named<ShadowJar>("shadowJar").get()
inputFile.set(shadowJar.archiveFile)
injectAccessWidener = true
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,16 +18,58 @@

package dev.ithundxr.numismaticsgradle

import dev.ithundxr.numismaticsgradle.asm.internal.SubprojectType
import dev.ithundxr.numismaticsgradle.transformer.PostCompileTransformer
import dev.ithundxr.numismaticsgradle.asm.NumismaticsGradleASM
import groovy.json.JsonOutput
import groovy.json.JsonSlurper
import org.gradle.api.Plugin
import org.gradle.api.Project
import java.util.jar.JarEntry
import java.util.jar.JarFile
import java.util.jar.JarOutputStream
import java.util.zip.Deflater

class NumismaticsGradlePlugin : Plugin<Project> {
override fun apply(project: Project) {
project.tasks.named("remapJar").configure {
doLast {
PostCompileTransformer().transformJar(project, outputs.files.singleFile)
val jar = outputs.files.singleFile

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 ->
if (!entry.isDirectory) {
contents[entry.name] = it.getInputStream(entry).readAllBytes()
}
}
}

jar.delete()

JarOutputStream(jar.outputStream()).use { out ->
out.setLevel(Deflater.BEST_COMPRESSION)

contents.forEach { var (name, data) = it
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(project, data)
}

out.putNextEntry(JarEntry(name))
out.write(data)
out.closeEntry()
}

out.finish()
out.close()
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
package dev.ithundxr.numismaticsgradle.asm

import dev.ithundxr.numismaticsgradle.asm.internal.SubprojectType
import dev.ithundxr.numismaticsgradle.asm.transformers.CCCapabilitiesASM
import dev.ithundxr.numismaticsgradle.asm.transformers.CCCapabilitiesTransformer
import org.gradle.api.Project
import org.objectweb.asm.ClassReader
import org.objectweb.asm.ClassWriter
Expand All @@ -35,7 +35,7 @@ class NumismaticsGradleASM {
ClassReader(bytes).accept(node, 0)

// Transformers
node = CCCapabilitiesASM().transform(projectType, node)
node = CCCapabilitiesTransformer().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 @@ -23,7 +23,7 @@ import org.objectweb.asm.Label
import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.ClassNode

class CCCapabilitiesASM {
class CCCapabilitiesTransformer {
@Suppress("LocalVariableName")
fun transform(project: SubprojectType, node: ClassNode): ClassNode {
if (node.invisibleAnnotations != null && project == SubprojectType.FORGE) {
Expand Down

This file was deleted.

0 comments on commit a1a1975

Please sign in to comment.