diff --git a/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt b/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt index 5fcf87e..557855b 100644 --- a/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt +++ b/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt @@ -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("(")) { - it.instructions.insert(MethodInsnNode(Opcodes.INVOKESPECIAL, "net/minecraftforge/eventbus/api/Event", "", "()V")) - it.instructions.insert(InsnNode(Opcodes.ALOAD)) + node.methods.forEach { + if (it.name == "") { + for (insnNode in it.instructions) { + if (insnNode.opcode == Opcodes.INVOKESPECIAL) { + insnNode as MethodInsnNode + if (insnNode.name == "" && 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 =