From d22fb9d10e500a42dd6befec1f5370d9e484dc5b Mon Sep 17 00:00:00 2001 From: douira Date: Sun, 12 Oct 2025 15:52:35 +0200 Subject: [PATCH] Fix exception being thrown when there's no monitor available to select screen resolutions for because of a Windows bug. --- .../mods/sodium/client/gui/SodiumGameOptionPages.java | 10 +++++----- .../gui/options/control/ControlValueFormatter.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/SodiumGameOptionPages.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/SodiumGameOptionPages.java index c8b8dd01b8..8874d2d094 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/SodiumGameOptionPages.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/SodiumGameOptionPages.java @@ -96,21 +96,21 @@ public static OptionPage general() { .add(OptionImpl.createBuilder(int.class, vanillaOpts) .setName(Component.translatable("options.fullscreen.resolution")) .setTooltip(Component.translatable("sodium.options.fullscreen_resolution.tooltip")) - .setControl(option -> new SliderControl(option, 0, null != monitor? monitor.getModeCount(): 0, 1, ControlValueFormatter.resolution())) + // the max value of 1 when the monitor is not available prevents an exception from being thrown + .setControl(option -> new SliderControl(option, 0, null != monitor ? monitor.getModeCount() : 1, 1, ControlValueFormatter.resolution())) .setBinding((options, value) -> { if (null != monitor) { - window.setPreferredFullscreenVideoMode(0 == value? Optional.empty(): Optional.of(monitor.getMode(value - 1))); + window.setPreferredFullscreenVideoMode(0 == value ? Optional.empty() : Optional.of(monitor.getMode(value - 1))); } }, options -> { if (null == monitor) { return 0; - } - else { + } else { Optional optional = window.getPreferredFullscreenVideoMode(); return optional.map((videoMode) -> monitor.getVideoModeIndex(videoMode) + 1).orElse(0); } }) - .setEnabled(() -> OsUtils.getOs() == OsUtils.OperatingSystem.WIN && Minecraft.getInstance().getWindow().findBestMonitor() != null) + .setEnabled(() -> monitor != null && monitor.getModeCount() > 0 && OsUtils.getOs() == OsUtils.OperatingSystem.WIN) .setFlags(OptionFlag.REQUIRES_VIDEOMODE_RELOAD) .build()) .add(OptionImpl.createBuilder(boolean.class, vanillaOpts) diff --git a/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/ControlValueFormatter.java b/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/ControlValueFormatter.java index c53ad046fe..90e2784be0 100644 --- a/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/ControlValueFormatter.java +++ b/common/src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/ControlValueFormatter.java @@ -14,7 +14,7 @@ static ControlValueFormatter resolution() { return (v) -> { Monitor monitor = Minecraft.getInstance().getWindow().findBestMonitor(); - if (OsUtils.getOs() != OsUtils.OperatingSystem.WIN || monitor == null) { + if (monitor == null || OsUtils.getOs() != OsUtils.OperatingSystem.WIN) { return Component.translatable("options.fullscreen.unavailable"); } else if (0 == v) { return Component.translatable("options.fullscreen.current");