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",