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 new file mode 100644 index 00000000..b87d193e --- /dev/null +++ b/src/main/java/me/cortex/voxy/client/mixin/minecraft/MixinClientCommonNetworkHandler.java @@ -0,0 +1,24 @@ +package me.cortex.voxy.client.mixin.minecraft; + +import net.minecraft.client.network.ClientCommonNetworkHandler; +import net.minecraft.network.packet.Packet; +import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(ClientCommonNetworkHandler.class) +public class MixinClientCommonNetworkHandler { + @Inject(method = "onPacketException", at = @At("HEAD"), cancellable = true) + 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); + } + } + } +} diff --git a/src/main/resources/client.voxy.mixins.json b/src/main/resources/client.voxy.mixins.json index 20339f53..fac66911 100644 --- a/src/main/resources/client.voxy.mixins.json +++ b/src/main/resources/client.voxy.mixins.json @@ -8,6 +8,7 @@ "minecraft.MixinDebugHud", "minecraft.MixinMinecraftClient", "minecraft.MixinWorldRenderer", + "minecraft.MixinClientCommonNetworkHandler", "sodium.MixinDefaultChunkRenderer", "sodium.MixinRenderSectionManager" ],