aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-11-03 01:43:17 -0400
committerMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-11-03 01:43:17 -0400
commitf00f22f2ea325ddcd5f8662d294b49afb2356a30 (patch)
tree6a84446e608fcd7e0af8d184f3db7665e5cadffe
parente2fe88737794f3a079c4bb5fbf1e0299c1f09476 (diff)
downloadSkytilsMod-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.kt42
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()