From 98a27aa905ff1675455b826245da2be1e15ac8ef Mon Sep 17 00:00:00 2001 From: ninjaguardian <110734253+ninjaguardian@users.noreply.github.com> Date: Sat, 19 Jul 2025 11:33:03 -0500 Subject: Make quicknav grab backgroundScreen (#1488) * Make quicknav grab backgroundScreen * Annotate environment according to PopupScreen --- .../mixins/accessors/PopupBackgroundAccessor.java | 15 +++++++++++++++ .../skyblocker/skyblock/quicknav/QuickNavButton.java | 10 ++++++++++ 2 files changed, 25 insertions(+) create mode 100644 src/main/java/de/hysky/skyblocker/mixins/accessors/PopupBackgroundAccessor.java (limited to 'src/main/java/de') diff --git a/src/main/java/de/hysky/skyblocker/mixins/accessors/PopupBackgroundAccessor.java b/src/main/java/de/hysky/skyblocker/mixins/accessors/PopupBackgroundAccessor.java new file mode 100644 index 00000000..c4562df9 --- /dev/null +++ b/src/main/java/de/hysky/skyblocker/mixins/accessors/PopupBackgroundAccessor.java @@ -0,0 +1,15 @@ +package de.hysky.skyblocker.mixins.accessors; + +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.client.gui.screen.PopupScreen; +import net.minecraft.client.gui.screen.Screen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Accessor; + +@Environment(EnvType.CLIENT) +@Mixin(PopupScreen.class) +public interface PopupBackgroundAccessor { + @Accessor("backgroundScreen") + Screen getUnderlyingScreen(); +} diff --git a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java index 535f80a0..88a38cf5 100644 --- a/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java +++ b/src/main/java/de/hysky/skyblocker/skyblock/quicknav/QuickNavButton.java @@ -4,12 +4,14 @@ import com.google.gson.JsonElement; import com.mojang.serialization.JsonOps; import de.hysky.skyblocker.SkyblockerMod; import de.hysky.skyblocker.mixins.accessors.HandledScreenAccessor; +import de.hysky.skyblocker.mixins.accessors.PopupBackgroundAccessor; import de.hysky.skyblocker.utils.Constants; import de.hysky.skyblocker.utils.scheduler.MessageScheduler; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; +import net.minecraft.client.gui.screen.PopupScreen; import net.minecraft.client.gui.screen.Screen; import net.minecraft.client.gui.screen.ingame.GenericContainerScreen; import net.minecraft.client.gui.screen.ingame.HandledScreen; @@ -90,6 +92,14 @@ public class QuickNavButton extends ClickableWidget { private void updateCoordinates() { Screen screen = MinecraftClient.getInstance().currentScreen; + while (screen instanceof PopupScreen) { + if (!(screen instanceof PopupBackgroundAccessor popup)) { + throw new IllegalStateException( + "Current PopupScreen does not support AccessorPopupBackground" + ); + } + screen = popup.getUnderlyingScreen(); + } if (screen instanceof HandledScreen handledScreen) { var accessibleScreen = (HandledScreenAccessor) handledScreen; int x = accessibleScreen.getX(); -- cgit