diff --git a/src/main/java/dev/isxander/controlify/Controlify.java b/src/main/java/dev/isxander/controlify/Controlify.java index 9a87ca18e..9f5a10604 100644 --- a/src/main/java/dev/isxander/controlify/Controlify.java +++ b/src/main/java/dev/isxander/controlify/Controlify.java @@ -106,6 +106,7 @@ public class Controlify implements ControlifyApi { private double lastInputSwitchTime = 0; private int showMouseTicks = 0; + private boolean mouseUsedThisTick = false; /** * Called at usual fabric client entrypoint and in NeoForge mod constructor @@ -472,10 +473,7 @@ public void tick(Minecraft client) { if (currentInputMode() == InputMode.MIXED && showMouseTicks > 0) { showMouseTicks--; if (showMouseTicks == 0) { - hideMouse(true, false); - if (virtualMouseHandler().requiresVirtualMouse()) { - virtualMouseHandler().enableVirtualMouse(); - } + restoreVirtualCursor(); } } @@ -497,6 +495,8 @@ public void tick(Minecraft client) { controller ); } + + mouseUsedThisTick = false; } /** @@ -530,6 +530,10 @@ private void tickActiveController(ControllerEntity controller, boolean outOfFocu } } + if (showMouseTicks > 0 && !mouseUsedThisTick && state.isGivingInput()) { + this.endTemporaryCursor(); + } + if (consecutiveInputSwitches > 100) { CUtil.LOGGER.warn("Controlify detected current controller to be constantly giving input and has been disabled."); MinecraftUtil.sendToast( @@ -726,6 +730,7 @@ public void hideMouse(boolean hide, boolean moveMouse) { public void showCursorTemporarily() { if (currentInputMode() == InputMode.MIXED && !minecraft.mouseHandler.isMouseGrabbed()) { + mouseUsedThisTick = true; hideMouse(false, false); showMouseTicks = 20 * 2; if (virtualMouseHandler().isVirtualMouseEnabled()) { @@ -734,6 +739,20 @@ public void showCursorTemporarily() { } } + public void endTemporaryCursor() { + if (currentInputMode() != InputMode.MIXED || showMouseTicks <= 0) return; + + showMouseTicks = 0; + restoreVirtualCursor(); + } + + private void restoreVirtualCursor() { + hideMouse(true, false); + if (virtualMouseHandler().requiresVirtualMouse()) { + virtualMouseHandler().enableVirtualMouse(); + } + } + public InputFontMapper inputFontMapper() { return inputFontMapper; }