From 88e2a2e8dbe70c2839ca981efe12612e489e6cee Mon Sep 17 00:00:00 2001 From: My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:30:55 -0500 Subject: [PATCH] refactor: Replace PacketThreadUtilTransformer with a Mixin --- .../network/MixinPacketThreadUtil.java | 37 ++++++++ .../skytilsmod/asm/SkytilsTransformer.kt | 1 - .../PacketThreadUtilTransformer.kt | 89 ------------------- src/main/resources/mixins.skytils.json | 1 + 4 files changed, 38 insertions(+), 90 deletions(-) create mode 100644 src/main/java/gg/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil.java delete mode 100644 src/main/kotlin/gg/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt diff --git a/src/main/java/gg/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil.java b/src/main/java/gg/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil.java new file mode 100644 index 000000000..4c48e0276 --- /dev/null +++ b/src/main/java/gg/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil.java @@ -0,0 +1,37 @@ +/* + * Skytils - Hypixel Skyblock Quality of Life Mod + * Copyright (C) 2020-2025 Skytils + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package gg.skytils.skytilsmod.mixins.transformers.network; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import gg.skytils.skytilsmod.events.impl.MainReceivePacketEvent; +import net.minecraft.network.INetHandler; +import net.minecraft.network.Packet; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@Mixin(targets = "net.minecraft.network.PacketThreadUtil$1") +public abstract class MixinPacketThreadUtil implements Runnable { + @WrapWithCondition(method="run", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/Packet;processPacket(Lnet/minecraft/network/INetHandler;)V")) + private boolean processMainThreadPacket(Packet packet, T netHandler) { + return !(new MainReceivePacketEvent<>( + netHandler, + packet + ).postAndCatch()); + } +} diff --git a/src/main/kotlin/gg/skytils/skytilsmod/asm/SkytilsTransformer.kt b/src/main/kotlin/gg/skytils/skytilsmod/asm/SkytilsTransformer.kt index 4a2666ecb..d6dbcb0d1 100644 --- a/src/main/kotlin/gg/skytils/skytilsmod/asm/SkytilsTransformer.kt +++ b/src/main/kotlin/gg/skytils/skytilsmod/asm/SkytilsTransformer.kt @@ -48,7 +48,6 @@ class SkytilsTransformer : BaseClassTransformer() { addColoredNamesCheck() injectSplashProgressTransformer() changeRenderedName() - insertReceivePacketEvent() injectNullCheck() commitArson() injectScoreboardScoreRemover() diff --git a/src/main/kotlin/gg/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt b/src/main/kotlin/gg/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt deleted file mode 100644 index 76c45d90f..000000000 --- a/src/main/kotlin/gg/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Skytils - Hypixel Skyblock Quality of Life Mod - * Copyright (C) 2020-2023 Skytils - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published - * by the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package gg.skytils.skytilsmod.asm.transformers - -import dev.falsehonesty.asmhelper.dsl.instructions.InsnListBuilder -import dev.falsehonesty.asmhelper.dsl.instructions.JumpCondition -import dev.falsehonesty.asmhelper.dsl.modify -import gg.skytils.skytilsmod.events.impl.MainReceivePacketEvent -import net.minecraft.network.INetHandler -import net.minecraft.network.Packet -import org.objectweb.asm.Opcodes - -fun insertReceivePacketEvent() = modify("net/minecraft/network/PacketThreadUtil$1") { - 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 == "" }?.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( - "gg/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer", - "postEvent", - "(Lnet/minecraft/network/INetHandler;Lnet/minecraft/network/Packet;)Z" - ) { - aload(0) - getField( - "net/minecraft/network/PacketThreadUtil$1", - "skytils\$handler", - "Lnet/minecraft/network/INetHandler;" - ) - aload(0) - getField( - "net/minecraft/network/PacketThreadUtil$1", - "skytils\$packet", - "Lnet/minecraft/network/Packet;" - ) - } - ifClause(JumpCondition.EQUAL) { - methodReturn() - } - }.build()) - } -} - -object PacketThreadUtilTransformer { - @JvmStatic - fun postEvent(netHandler: INetHandler, packet: Packet): Boolean { - return MainReceivePacketEvent( - netHandler, - packet - ).postAndCatch() - } -} \ No newline at end of file diff --git a/src/main/resources/mixins.skytils.json b/src/main/resources/mixins.skytils.json index 7ea9201b0..20d1c4413 100644 --- a/src/main/resources/mixins.skytils.json +++ b/src/main/resources/mixins.skytils.json @@ -59,6 +59,7 @@ "multiplayer.MixinPlayerControllerMP", "network.MixinNetHandlerPlayClient", "network.MixinNetworkManager", + "network.MixinPacketThreadUtil", "neu.MixinCustomAH", "neu.MixinGuiProfileViewer", "neu.MixinStorageManager",