diff options
author | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-11-03 01:43:17 -0400 |
---|---|---|
committer | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-11-03 01:43:17 -0400 |
commit | f00f22f2ea325ddcd5f8662d294b49afb2356a30 (patch) | |
tree | 6a84446e608fcd7e0af8d184f3db7665e5cadffe | |
parent | e2fe88737794f3a079c4bb5fbf1e0299c1f09476 (diff) | |
download | SkytilsMod-f00f22f2ea325ddcd5f8662d294b49afb2356a30.tar.gz SkytilsMod-f00f22f2ea325ddcd5f8662d294b49afb2356a30.tar.bz2 SkytilsMod-f00f22f2ea325ddcd5f8662d294b49afb2356a30.zip |
duplicate a field with our own name for runnable
-rw-r--r-- | src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt | 42 |
1 files changed, 35 insertions, 7 deletions
diff --git a/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt b/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt index 44bc05df..f85bb5cc 100644 --- a/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt +++ b/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt @@ -23,14 +23,34 @@ import dev.falsehonesty.asmhelper.dsl.instructions.JumpCondition import dev.falsehonesty.asmhelper.dsl.modify import net.minecraft.network.INetHandler import net.minecraft.network.Packet +import org.objectweb.asm.Opcodes import skytils.skytilsmod.events.impl.MainReceivePacketEvent fun insertReceivePacketEvent() = modify("net/minecraft/network/PacketThreadUtil$1") { - val netHandler = classNode.fields.find { it.desc == "Lnet/minecraft/network/INetHandler;" || it.desc == "Lep;" } - ?: error("couldn't find INetHandler field") - val packet = - classNode.fields.find { it.desc == "Lnet/minecraft/network/Packet;" || it.desc == "Lff;" } - ?: error("couldn't find Packet field") + classNode.visitField( + Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, + "skytils\$handler", + "Lnet/minecraft/network/INetHandler;", + null, + null + ).visitEnd() + classNode.visitField( + Opcodes.ACC_PUBLIC + Opcodes.ACC_FINAL, + "skytils\$packet", + "Lnet/minecraft/network/Packet;", + null, + null + ).visitEnd() + classNode.methods.find { it.name == "<init>" }?.apply { + instructions.insert(InsnListBuilder(this).apply { + aload(0) + aload(1) + putField(classNode.name, "skytils\$packet", "Lnet/minecraft/network/Packet;") + aload(0) + aload(2) + putField(classNode.name, "skytils\$handler", "Lnet/minecraft/network/INetHandler;") + }.build()) + } findMethod("run", "()V").apply { instructions.insert(InsnListBuilder(this).apply { invokeStatic( @@ -39,9 +59,17 @@ fun insertReceivePacketEvent() = modify("net/minecraft/network/PacketThreadUtil$ "(Lnet/minecraft/network/INetHandler;Lnet/minecraft/network/Packet;)Z" ) { aload(0) - getField("net/minecraft/network/PacketThreadUtil$1", netHandler.name, netHandler.desc) + getField( + "net/minecraft/network/PacketThreadUtil$1", + "skytils\$handler", + "Lnet/minecraft/network/INetHandler;" + ) aload(0) - getField("net/minecraft/network/PacketThreadUtil$1", packet.name, packet.desc) + getField( + "net/minecraft/network/PacketThreadUtil$1", + "skytils\$packet", + "Lnet/minecraft/network/Packet;" + ) } ifClause(JumpCondition.EQUAL) { methodReturn() |