From 0d901c6281bbc2dcb925a5c1a6025d90b3d065ad Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Sat, 20 May 2023 16:35:41 -0400 Subject: [PATCH] Only preserve window position if a non-default width/height was given Fixes #103 (in next release) --- .../WindowMixin.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/preserve_early_window_pos/WindowMixin.java b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/preserve_early_window_pos/WindowMixin.java index a543b777..85702c55 100644 --- a/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/preserve_early_window_pos/WindowMixin.java +++ b/forge/src/main/java/org/embeddedt/modernfix/forge/mixin/bugfix/preserve_early_window_pos/WindowMixin.java @@ -1,8 +1,7 @@ package org.embeddedt.modernfix.forge.mixin.bugfix.preserve_early_window_pos; -import com.mojang.blaze3d.platform.Monitor; -import com.mojang.blaze3d.platform.ScreenManager; -import com.mojang.blaze3d.platform.Window; +import com.mojang.blaze3d.platform.*; +import net.minecraft.client.Minecraft; import net.minecraftforge.fml.common.ObfuscationReflectionHelper; import net.minecraftforge.fml.loading.progress.EarlyProgressVisualization; import org.embeddedt.modernfix.annotation.ClientOnlyMixin; @@ -35,19 +34,26 @@ public class WindowMixin { } private Object getEarlyProgressVisualizer() { + Minecraft client = Minecraft.getInstance(); if(VISUALIZER == null || this.fullscreen) return null; Object o = ObfuscationReflectionHelper.getPrivateValue(EarlyProgressVisualization.class, EarlyProgressVisualization.INSTANCE, "visualization"); return VISUALIZER.isAssignableFrom(o.getClass()) ? o : null; } + private static boolean defaultDisplayData(DisplayData arg3) { + return arg3.width == 854 && arg3.height == 480 && !arg3.isFullscreen; + } + /** * Return a null monitor if not in fullscreen and the visualizer is present, so that the code grabs the * original X/Y position of the window. */ @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/ScreenManager;getMonitor(J)Lcom/mojang/blaze3d/platform/Monitor;")) - private Monitor getMonitor(ScreenManager manager, long id) { - return getEarlyProgressVisualizer() != null ? null : manager.getMonitor(id); + private Monitor getMonitor(ScreenManager manager, long id, WindowEventHandler arg, ScreenManager arg2, DisplayData arg3) { + if(defaultDisplayData(arg3) && getEarlyProgressVisualizer() != null) + return null; + return manager.getMonitor(id); } /** @@ -55,9 +61,9 @@ public class WindowMixin { */ @SuppressWarnings("unchecked") @Redirect(method = "", at = @At(value = "INVOKE", target = "Lnet/minecraftforge/fml/loading/progress/EarlyProgressVisualization;handOffWindow(Ljava/util/function/IntSupplier;Ljava/util/function/IntSupplier;Ljava/util/function/Supplier;Ljava/util/function/LongSupplier;)J"), require = 0) - private long performHandoff(EarlyProgressVisualization instance, IntSupplier width, IntSupplier height, Supplier title, LongSupplier monitor) { + private long performHandoff(EarlyProgressVisualization instance, IntSupplier width, IntSupplier height, Supplier title, LongSupplier monitor, WindowEventHandler arg, ScreenManager arg2, DisplayData arg3) { Object visualizer = getEarlyProgressVisualizer(); - if(visualizer != null) { + if(visualizer != null && defaultDisplayData(arg3)) { long windowId = ObfuscationReflectionHelper.getPrivateValue((Class)visualizer.getClass(), visualizer, "window"); int[] w = new int[1]; int[] h = new int[1];