diff --git a/src/main/java/de/hysky/skyblocker/mixins/ScreenMixin.java b/src/main/java/de/hysky/skyblocker/mixins/ScreenMixin.java index bdb895d261..530f9c7a31 100644 --- a/src/main/java/de/hysky/skyblocker/mixins/ScreenMixin.java +++ b/src/main/java/de/hysky/skyblocker/mixins/ScreenMixin.java @@ -1,8 +1,11 @@ package de.hysky.skyblocker.mixins; +import net.minecraft.client.gui.screens.DisconnectedScreen; import org.lwjgl.glfw.GLFW; +import org.spongepowered.asm.mixin.Final; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; @@ -15,16 +18,27 @@ @Mixin(Screen.class) public class ScreenMixin { + @Final @Shadow protected Minecraft minecraft; + @Unique + private static boolean skyblocker$isCursorHidden = false; + @Inject(method = "init(II)V", at = @At("TAIL")) private void skyblocker$hideCursor(CallbackInfo ci) { Object instance = this; + if ((instance instanceof DisconnectedScreen) && Utils.isOnHypixel() && skyblocker$isCursorHidden) { + InputConstants.grabOrReleaseMouse(this.minecraft.getWindow(), GLFW.GLFW_CURSOR_NORMAL, this.minecraft.mouseHandler.xpos(), this.minecraft.mouseHandler.ypos()); + } + if ((instance instanceof LevelLoadingScreen || instance instanceof ServerReconfigScreen) && Utils.isOnHypixel()) { //Prevents the mouse from being movable while we cancel the rendering of the screen InputConstants.grabOrReleaseMouse(this.minecraft.getWindow(), GLFW.GLFW_CURSOR_DISABLED, this.minecraft.mouseHandler.xpos(), this.minecraft.mouseHandler.ypos()); + skyblocker$isCursorHidden = true; + } else { + skyblocker$isCursorHidden = false; } }