diff --git a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java index 93e508dcea..2686b08d47 100644 --- a/src/main/java/meteordevelopment/meteorclient/MeteorClient.java +++ b/src/main/java/meteordevelopment/meteorclient/MeteorClient.java @@ -7,7 +7,6 @@ import meteordevelopment.meteorclient.addons.AddonManager; import meteordevelopment.meteorclient.addons.MeteorAddon; -import meteordevelopment.meteorclient.events.game.OpenScreenEvent; import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; import meteordevelopment.meteorclient.events.meteor.MouseClickEvent; import meteordevelopment.meteorclient.events.world.TickEvent; @@ -32,13 +31,13 @@ import meteordevelopment.meteorclient.utils.network.OnlinePlayers; import meteordevelopment.orbit.EventBus; import meteordevelopment.orbit.EventHandler; -import meteordevelopment.orbit.EventPriority; import meteordevelopment.orbit.IEventBus; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.metadata.ModMetadata; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.screens.ChatScreen; +import net.minecraft.client.gui.screens.Screen; import net.minecraft.resources.Identifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -176,25 +175,15 @@ private void toggleGui() { // Hide HUD - private boolean wasWidgetScreen, wasHudHiddenRoot; - - @EventHandler(priority = EventPriority.LOWEST) - private void onOpenScreen(OpenScreenEvent event) { - if (event.screen instanceof WidgetScreen) { - if (!wasWidgetScreen) wasHudHiddenRoot = mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden; - if (GuiThemes.get().hideHUD() || wasHudHiddenRoot) { - // Always show the MC HUD in the HUD editor screen since people like - // to align some items with the hotbar or chat - mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden = !(event.screen instanceof HudEditorScreen) - && !(event.screen instanceof AddHudElementScreen) - && !(event.screen instanceof HudElementScreen); - } - } else { - if (wasWidgetScreen) mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden = wasHudHiddenRoot; - wasHudHiddenRoot = mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden; - } + public static boolean shouldHideHud() { + if (!GuiThemes.get().hideHUD()) return false; + + Screen screen = mc.gui.screen(); + if (!(screen instanceof WidgetScreen)) return false; - wasWidgetScreen = event.screen instanceof WidgetScreen; + return !(screen instanceof HudEditorScreen) + && !(screen instanceof AddHudElementScreen) + && !(screen instanceof HudElementScreen); } public static Identifier identifier(String path) { diff --git a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java index c71fb631cf..02a92b2c21 100644 --- a/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java +++ b/src/main/java/meteordevelopment/meteorclient/gui/themes/meteor/MeteorGuiTheme.java @@ -85,11 +85,6 @@ public class MeteorGuiTheme extends GuiTheme { .name("hide-HUD") .description("Hide HUD when in GUI.") .defaultValue(false) - .onChanged(v -> { - if (mc.gui.screen() instanceof WidgetScreen) { - mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden = v; - } - }) .build() ); diff --git a/src/main/java/meteordevelopment/meteorclient/mixin/HudMixin.java b/src/main/java/meteordevelopment/meteorclient/mixin/HudMixin.java index 30c54cad4d..137956d510 100644 --- a/src/main/java/meteordevelopment/meteorclient/mixin/HudMixin.java +++ b/src/main/java/meteordevelopment/meteorclient/mixin/HudMixin.java @@ -6,16 +6,22 @@ package meteordevelopment.meteorclient.mixin; import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import meteordevelopment.meteorclient.MeteorClient; +import meteordevelopment.meteorclient.gui.GuiTheme; +import meteordevelopment.meteorclient.gui.GuiThemes; import meteordevelopment.meteorclient.systems.modules.Modules; import meteordevelopment.meteorclient.systems.modules.misc.BetterChat; import meteordevelopment.meteorclient.systems.modules.render.Freecam; import meteordevelopment.meteorclient.systems.modules.render.NoRender; +import meteordevelopment.meteorclient.systems.modules.render.Zoom; import net.minecraft.client.DeltaTracker; import net.minecraft.client.gui.GuiGraphicsExtractor; import net.minecraft.client.gui.Hud; import net.minecraft.world.entity.Entity; import net.minecraft.world.scores.Objective; +import org.objectweb.asm.Opcodes; import org.spongepowered.asm.mixin.Mixin; +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.ModifyArgs; @@ -95,4 +101,20 @@ private void onClear(CallbackInfo ci) { private void onExtractNausea(GuiGraphicsExtractor graphics, float strength, CallbackInfo ci) { if (Modules.get().get(NoRender.class).noNausea()) ci.cancel(); } + + @ModifyExpressionValue(method = "extractRenderState", at = @At(value = "FIELD", target = "Lnet/minecraft/client/gui/Hud;isHidden:Z", opcode = Opcodes.GETFIELD)) + private boolean onGetIsHidden(boolean original) { + return original || meteor$ShouldHideHud(); + } + + @Inject(method = "extractDebugOverlay", at = @At("HEAD"), cancellable = true) + private void onExtractDebugOverlay(GuiGraphicsExtractor graphics, CallbackInfo ci) { + if (meteor$ShouldHideHud()) ci.cancel(); + } + + @Unique + private static boolean meteor$ShouldHideHud() { + if (GuiThemes.get() == null || Modules.get() == null) return false; + return MeteorClient.shouldHideHud() || Modules.get().get(Zoom.class).shouldHideHud(); + } } diff --git a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java index 21e46fe9a5..f8e9d6fdd8 100644 --- a/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java +++ b/src/main/java/meteordevelopment/meteorclient/systems/modules/render/Zoom.java @@ -5,9 +5,7 @@ package meteordevelopment.meteorclient.systems.modules.render; -import com.mojang.blaze3d.platform.InputConstants; import meteordevelopment.meteorclient.MeteorClient; -import meteordevelopment.meteorclient.events.meteor.KeyInputEvent; import meteordevelopment.meteorclient.events.meteor.MouseScrollEvent; import meteordevelopment.meteorclient.events.render.GetFovEvent; import meteordevelopment.meteorclient.events.render.Render3DEvent; @@ -75,8 +73,6 @@ public class Zoom extends Module { private double value; private double time; - private boolean hudManualToggled; - public Zoom() { super(Categories.Render, "zoom", "Zooms your view."); autoSubscribe = false; @@ -84,33 +80,15 @@ public Zoom() { @Override public void onActivate() { - if (!enabled) { - preCinematic = mc.options.smoothCamera; - preMouseSensitivity = mc.options.sensitivity().get(); - value = zoom.get(); - time = 0.001; - - MeteorClient.EVENT_BUS.subscribe(this); - enabled = true; - } + if (enabled) return; - if (hideHud.get() && !mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden) { - hudManualToggled = false; - mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden = true; - } - } + preCinematic = mc.options.smoothCamera; + preMouseSensitivity = mc.options.sensitivity().get(); + value = zoom.get(); + time = 0.001; - @Override - public void onDeactivate() { - if (hideHud.get() && !hudManualToggled) { - mc.gameRenderer.gameRenderState().guiRenderState.isHudHidden = false; - } - } - - @EventHandler - public void onKeyPressed(KeyInputEvent event) { - if (event.key() != InputConstants.KEY_F1) return; - hudManualToggled = true; + MeteorClient.EVENT_BUS.subscribe(this); + enabled = true; } public void onStop() { @@ -171,4 +149,8 @@ public double getScaling() { public boolean renderHands() { return !isActive() || renderHands.get(); } + + public boolean shouldHideHud() { + return isActive() && hideHud.get(); + } }