Properly apply @ForgeMod

This commit is contained in:
shedaniel
2020-11-16 00:02:30 +08:00
parent d66620f788
commit e0ce2fc2c3

View File

@@ -13,9 +13,10 @@ import net.fabricmc.tinyremapper.TinyRemapper
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.tasks.TaskAction
import org.gradle.jvm.tasks.Jar
import org.objectweb.asm.*
import org.objectweb.asm.ClassReader
import org.objectweb.asm.ClassWriter
import org.objectweb.asm.Opcodes
import org.objectweb.asm.tree.ClassNode
import org.objectweb.asm.tree.InsnNode
import org.objectweb.asm.tree.MethodInsnNode
import java.io.File
import java.io.FileNotFoundException
@@ -157,7 +158,7 @@ modId = "$fakeModId"
architectFolder.deleteRecursively()
remapper.finish()
intermediate.toFile().delete()
// intermediate.toFile().delete()
if (!Files.exists(output)) {
throw RuntimeException("Failed to remap $input to $output - file missing!")
@@ -245,12 +246,22 @@ modId = "$fakeModId"
private fun transform(node: ClassNode): ClassNode {
if (node.access and Opcodes.ACC_INTERFACE == 0 && node.visibleAnnotations?.any { it.desc == forgeEvent } == true) {
node.superName = "net/minecraftforge/eventbus/api/Event"
node.methods.forEach {
if (it.desc.startsWith("<init>(")) {
it.instructions.insert(MethodInsnNode(Opcodes.INVOKESPECIAL, "net/minecraftforge/eventbus/api/Event", "<init>", "()V"))
it.instructions.insert(InsnNode(Opcodes.ALOAD))
node.methods.forEach {
if (it.name == "<init>") {
for (insnNode in it.instructions) {
if (insnNode.opcode == Opcodes.INVOKESPECIAL) {
insnNode as MethodInsnNode
if (insnNode.name == "<init>" && insnNode.owner == "java/lang/Object") {
insnNode.owner = "net/minecraftforge/eventbus/api/Event"
break
}
}
}
}
}
node.signature?.let {
node.signature = it.substringBeforeLast('L') + "Lnet/minecraftforge/eventbus/api/Event;"
}
}
node.visibleAnnotations = (node.visibleAnnotations ?: mutableListOf()).apply {
val invisibleEnvironments =