diff options
author | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-10-17 17:42:04 -0400 |
---|---|---|
committer | My-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com> | 2021-10-17 17:42:04 -0400 |
commit | a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939 (patch) | |
tree | 8f36a5611b8005f9c574a60bf617f1cae8a6c4f1 | |
parent | f25f8b598d33959442f27ad5d23ac7045135969b (diff) | |
download | SkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.tar.gz SkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.tar.bz2 SkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.zip |
switch the main packet event to asm
4 files changed, 62 insertions, 45 deletions
diff --git a/src/main/java/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil$1.java b/src/main/java/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil$1.java deleted file mode 100644 index 9a9b5c2e..00000000 --- a/src/main/java/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil$1.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Skytils - Hypixel Skyblock Quality of Life Mod - * Copyright (C) 2021 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 <https://www.gnu.org/licenses/>. - */ - -package skytils.skytilsmod.mixins.transformers.network; - -import net.minecraft.network.INetHandler; -import net.minecraft.network.Packet; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; -import skytils.skytilsmod.events.impl.MainReceivePacketEvent; - -@Mixin(targets = "net.minecraft.network.PacketThreadUtil$1", remap = false) -public abstract class MixinPacketThreadUtil$1 { - @Shadow @Final - INetHandler val$p_180031_1_; - - @Shadow @Final - Packet<INetHandler> val$p_180031_0_; - - @Inject(method = "run", at = @At("HEAD"), cancellable = true) - private void onQueuePacket(CallbackInfo ci) { - if (new MainReceivePacketEvent<>(val$p_180031_1_, val$p_180031_0_).postAndCatch()) ci.cancel(); - } -} diff --git a/src/main/kotlin/skytils/skytilsmod/asm/SkytilsTransformer.kt b/src/main/kotlin/skytils/skytilsmod/asm/SkytilsTransformer.kt index 2e6d9b44..86b2ecf4 100644 --- a/src/main/kotlin/skytils/skytilsmod/asm/SkytilsTransformer.kt +++ b/src/main/kotlin/skytils/skytilsmod/asm/SkytilsTransformer.kt @@ -18,7 +18,6 @@ package skytils.skytilsmod.asm -import dev.falsehonesty.asmhelper.AsmHelper import dev.falsehonesty.asmhelper.BaseClassTransformer import net.minecraft.launchwrapper.LaunchClassLoader import skytils.skytilsmod.asm.transformers.* @@ -50,6 +49,7 @@ class SkytilsTransformer : BaseClassTransformer() { addColoredNamesCheck() injectSplashProgressTransformer() changeRenderedName() + insertReceivePacketEvent() } catch (e: Throwable) { e.printStackTrace() } diff --git a/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt b/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt new file mode 100644 index 00000000..c058a052 --- /dev/null +++ b/src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt @@ -0,0 +1,61 @@ +/* + * Skytils - Hypixel Skyblock Quality of Life Mod + * Copyright (C) 2021 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 <https://www.gnu.org/licenses/>. + */ + +package 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 net.minecraft.network.INetHandler +import net.minecraft.network.Packet +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") + findMethod("run", "()V").apply { + instructions.insert(InsnListBuilder(this).apply { + invokeStatic( + "skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer", + "postEvent", + "(Lnet/minecraft/network/INetHandler;Lnet/minecraft/network/Packet;)Z)" + ) { + aload(0) + getField("net/minecraft/network/PacketThreadUtil$1", netHandler.name, netHandler.desc) + aload(0) + getField("net/minecraft/network/PacketThreadUtil$1", packet.name, packet.desc) + } + ifClause(JumpCondition.EQUAL) { + methodReturn() + } + }.build()) + } +} + +object PacketThreadUtilTransformer { + @JvmStatic + fun postEvent(netHandler: INetHandler, packet: Packet<INetHandler>): 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 721f3155..8684fa3c 100644 --- a/src/main/resources/mixins.skytils.json +++ b/src/main/resources/mixins.skytils.json @@ -38,7 +38,6 @@ "multiplayer.MixinPlayerControllerMP", "network.MixinNetHandlerPlayClient", "network.MixinNetworkManager", - "network.MixinPacketThreadUtil$1", "neu.MixinGuiProfileViewer", "neu.MixinStorageManager", "neu.MixinTradeWindow", |