aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-10-17 17:42:04 -0400
committerMy-Name-Is-Jeff <37018278+My-Name-Is-Jeff@users.noreply.github.com>2021-10-17 17:42:04 -0400
commita6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939 (patch)
tree8f36a5611b8005f9c574a60bf617f1cae8a6c4f1
parentf25f8b598d33959442f27ad5d23ac7045135969b (diff)
downloadSkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.tar.gz
SkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.tar.bz2
SkytilsMod-a6fc2ce19a81f6c92a94cefaf3ee5fc42f02b939.zip
switch the main packet event to asm
-rw-r--r--src/main/java/skytils/skytilsmod/mixins/transformers/network/MixinPacketThreadUtil$1.java43
-rw-r--r--src/main/kotlin/skytils/skytilsmod/asm/SkytilsTransformer.kt2
-rw-r--r--src/main/kotlin/skytils/skytilsmod/asm/transformers/PacketThreadUtilTransformer.kt61
-rw-r--r--src/main/resources/mixins.skytils.json1
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",