From 783f87f22da9c9c5cf43770a85855c95285818cf Mon Sep 17 00:00:00 2001 From: mcrcortex <18544518+MCRcortex@users.noreply.github.com> Date: Sun, 26 Jan 2025 20:00:09 +1000 Subject: [PATCH] More force crash on failed initial load packet --- .../me/cortex/voxy/client/LoadException.java | 7 ++++++ .../MixinClientCommonNetworkHandler.java | 7 ++---- .../mixin/minecraft/MixinThreadExecutor.java | 25 +++++++++++++++++++ src/main/resources/client.voxy.mixins.json | 3 ++- 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 src/main/java/me/cortex/voxy/client/LoadException.java create mode 100644 src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinThreadExecutor.java diff --git a/src/main/java/me/cortex/voxy/client/LoadException.java b/src/main/java/me/cortex/voxy/client/LoadException.java new file mode 100644 index 00000000..c1647f28 --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/LoadException.java @@ -0,0 +1,7 @@ +package me.cortex.voxy.client; + +public class LoadException extends RuntimeException { + public LoadException(String msg, Throwable cause) { + super(msg, cause); + } +} diff --git a/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinClientCommonNetworkHandler.java b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinClientCommonNetworkHandler.java index 53144b18..321ce40d 100644 --- a/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinClientCommonNetworkHandler.java +++ b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinClientCommonNetworkHandler.java @@ -1,5 +1,6 @@ package me.cortex.voxy.client.mixin.minecraft; +import me.cortex.voxy.client.LoadException; import net.minecraft.client.network.ClientCommonNetworkHandler; import net.minecraft.network.packet.Packet; import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; @@ -14,11 +15,7 @@ public class MixinClientCommonNetworkHandler { private void handleDisconnectAsCrash(Packet packet, Exception exception, CallbackInfo ci) { if (packet instanceof GameJoinS2CPacket) { ci.cancel(); - //if (exception instanceof RuntimeException re) { - // throw re; - //} else { - throw new RuntimeException("Force crashing due to exception during on game join", exception); - //} + throw new LoadException("Force crashing due to exception during on game join", exception); } } } diff --git a/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinThreadExecutor.java b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinThreadExecutor.java new file mode 100644 index 00000000..0439c001 --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinThreadExecutor.java @@ -0,0 +1,25 @@ +package me.cortex.voxy.client.mixin.minecraft; + +import me.cortex.voxy.client.LoadException; +import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; +import net.minecraft.util.thread.ThreadExecutor; +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.Redirect; + +@Mixin(ThreadExecutor.class) +public abstract class MixinThreadExecutor { + @Shadow public static boolean isMemoryError(Throwable exception){return false;}; + + @Redirect(method = "executeTask", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/thread/ThreadExecutor;isMemoryError(Ljava/lang/Throwable;)Z"), remap = false) + private boolean voxy$forceCrashOnError(Throwable exception) { + if (exception instanceof LoadException le) { + if (le.getCause() instanceof RuntimeException cause) { + throw cause; + } + throw le; + } + return isMemoryError(exception); + } +} diff --git a/src/main/resources/client.voxy.mixins.json b/src/main/resources/client.voxy.mixins.json index fac66911..6045b3fd 100644 --- a/src/main/resources/client.voxy.mixins.json +++ b/src/main/resources/client.voxy.mixins.json @@ -5,10 +5,11 @@ "client": [ "chunky.MixinFabricWorld", "joml.AccessFrustumIntersection", + "minecraft.MixinClientCommonNetworkHandler", + "minecraft.MixinThreadExecutor", "minecraft.MixinDebugHud", "minecraft.MixinMinecraftClient", "minecraft.MixinWorldRenderer", - "minecraft.MixinClientCommonNetworkHandler", "sodium.MixinDefaultChunkRenderer", "sodium.MixinRenderSectionManager" ],