From d66620f788bce69b8954207f5e2c9f4165ec2778 Mon Sep 17 00:00:00 2001 From: shedaniel Date: Sun, 15 Nov 2020 23:23:12 +0800 Subject: [PATCH] Apply extends Event if @ForgeEvent is annotated --- .../me/shedaniel/architect/plugin/RemapMCPTask.kt | 13 +++++++++++++ .../shedaniel/architect/plugin/TransformExpect.kt | 1 - 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt b/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt index 8d702e5..5fcf87e 100644 --- a/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt +++ b/src/main/kotlin/me/shedaniel/architect/plugin/RemapMCPTask.kt @@ -15,6 +15,8 @@ import org.gradle.api.tasks.TaskAction import org.gradle.jvm.tasks.Jar import org.objectweb.asm.* 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 import java.io.InputStream @@ -238,7 +240,18 @@ modId = "$fakeModId" } } + val forgeEvent = "Lme/shedaniel/architectury/ForgeEvent;" + 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.visibleAnnotations = (node.visibleAnnotations ?: mutableListOf()).apply { val invisibleEnvironments = node.invisibleAnnotations?.filter { it.desc == "L${environmentClass};" } ?: emptyList() diff --git a/src/main/kotlin/me/shedaniel/architect/plugin/TransformExpect.kt b/src/main/kotlin/me/shedaniel/architect/plugin/TransformExpect.kt index d3be483..b8e7dee 100644 --- a/src/main/kotlin/me/shedaniel/architect/plugin/TransformExpect.kt +++ b/src/main/kotlin/me/shedaniel/architect/plugin/TransformExpect.kt @@ -6,7 +6,6 @@ import org.objectweb.asm.tree.* import java.lang.invoke.CallSite import java.lang.invoke.MethodHandles import java.lang.invoke.MethodType -import kotlin.math.max const val expectPlatform = "Lme/shedaniel/architectury/ExpectPlatform;"