diff --git a/src/main/java/autoreconnect/mixin/DisconnectedScreenMixin.java b/src/main/java/autoreconnect/mixin/DisconnectedScreenMixin.java index 0fde58b..5b512e2 100644 --- a/src/main/java/autoreconnect/mixin/DisconnectedScreenMixin.java +++ b/src/main/java/autoreconnect/mixin/DisconnectedScreenMixin.java @@ -5,6 +5,8 @@ import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.TitleScreen; import net.minecraft.client.gui.screen.world.SelectWorldScreen; +import net.minecraft.client.MinecraftClient; +import com.mojang.logging.LogUtils; import net.minecraft.text.Text; import org.spongepowered.asm.mixin.*; import org.spongepowered.asm.mixin.injection.At; @@ -12,6 +14,8 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + + @Mixin(DisconnectedScreen.class) public class DisconnectedScreenMixin extends Screen { @Shadow @@ -25,6 +29,13 @@ protected DisconnectedScreenMixin(Text title) { @Inject(at = @At("RETURN"), method = "(Lnet/minecraft/client/gui/screen/Screen;Lnet/minecraft/text/Text;Lnet/minecraft/text/Text;Lnet/minecraft/text/Text;)V") private void constructor(Screen parent, Text title, Text reason, Text buttonLabel, CallbackInfo info) { + // close game + MinecraftClient client = MinecraftClient.getInstance(); + if (client != null && reason != null && reason.getString().contains("Invalid session")) { + LogUtils.getLogger().error("AutoReconnect closing game because of expired token..."); + client.stop(); + } + if (AutoReconnect.getInstance().isPlayingSingleplayer()) { // make back button redirect to SelectWorldScreen instead of MultiPlayerScreen (https://bugs.mojang.com/browse/MC-45602) this.parent = new SelectWorldScreen(new TitleScreen());