From bb03b1a7d19f03d79b2236716b9b4621cf344b87 Mon Sep 17 00:00:00 2001 From: Dennis C Date: Tue, 28 Jun 2022 22:23:35 +0200 Subject: [PATCH] Fix certain user-configured options being overwritten incorrectly due to validators. (#8780) --- .../net/minecraft/client/Options.java.patch | 28 ++++++++++++++++++- .../client/loading/ClientModLoader.java | 2 +- src/main/resources/forge.exc | 1 + 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/patches/minecraft/net/minecraft/client/Options.java.patch b/patches/minecraft/net/minecraft/client/Options.java.patch index 3cb022dd86..497aebea92 100644 --- a/patches/minecraft/net/minecraft/client/Options.java.patch +++ b/patches/minecraft/net/minecraft/client/Options.java.patch @@ -18,9 +18,15 @@ this.f_92060_ = p_92138_; this.f_92110_ = new File(p_92139_, "options.txt"); boolean flag = p_92138_.m_91103_(); -@@ -887,10 +_,14 @@ +@@ -886,11 +_,20 @@ + p_168428_.m_213982_("chatPreview", this.f_231796_); p_168428_.m_213982_("onlyShowSecureChat", this.f_231798_); ++ processOptionsForge(p_168428_); ++ } ++ // FORGE: split off to allow reloading options after mod loading is done ++ private void processOptionsForge(Options.FieldAccess p_168428_) ++ { for(KeyMapping keymapping : this.f_92059_) { - String s = keymapping.m_90865_(); + String s = keymapping.m_90865_() + (keymapping.getKeyModifier() != net.minecraftforge.client.settings.KeyModifier.NONE ? ":" + keymapping.getKeyModifier() : ""); @@ -35,6 +41,26 @@ } } +@@ -911,6 +_,9 @@ + } + + public void m_92140_() { ++ this.load(false); ++ } ++ public void load(boolean limited) { + try { + if (!this.f_92110_.exists()) { + return; +@@ -955,7 +_,8 @@ + } + } + +- this.m_168427_(new Options.FieldAccess() { ++ java.util.function.Consumer processor = limited ? this::processOptionsForge : this::m_168427_; ++ processor.accept(new Options.FieldAccess() { + @Nullable + private String m_168458_(String p_168459_) { + return compoundtag1.m_128441_(p_168459_) ? compoundtag1.m_128461_(p_168459_) : null; @@ -1058,6 +_,7 @@ } diff --git a/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java b/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java index c62471b6c6..7ed8d9ecdb 100644 --- a/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java +++ b/src/main/java/net/minecraftforge/client/loading/ClientModLoader.java @@ -127,7 +127,7 @@ public class ClientModLoader loading = false; loadingComplete = true; // reload game settings on main thread - syncExecutor.execute(()->mc.options.load()); + syncExecutor.execute(()->mc.options.load(true)); } public static VersionChecker.Status checkForUpdates() diff --git a/src/main/resources/forge.exc b/src/main/resources/forge.exc index dd6adcbc4e..2553b3aa95 100644 --- a/src/main/resources/forge.exc +++ b/src/main/resources/forge.exc @@ -1,4 +1,5 @@ net/minecraft/advancements/Advancement$Builder.fromJson(Lcom/google/gson/JsonObject;Lnet/minecraft/advancements/critereon/DeserializationContext;Lnet/minecraftforge/common/crafting/conditions/ICondition$IContext;)Lnet/minecraft/advancements/Advancement$Builder;=|p_138381_,p_138382_,context +net/minecraft/client/Options.processOptionsForge(Lnet/minecraft/client/Options$FieldAccess;)V=|p_168428_ net/minecraft/client/gui/screens/MenuScreens.getScreenFactory(Lnet/minecraft/world/inventory/MenuType;Lnet/minecraft/client/Minecraft;ILnet/minecraft/network/chat/Component;)Ljava/util/Optional;=|p_96202_,p_96203_,p_96204_,p_96205_ net/minecraft/client/gui/screens/worldselection/WorldOpenFlows.doLoadLevel(Lnet/minecraft/client/gui/screens/Screen;Ljava/lang/String;ZZZ)V=|p_233146_,p_233147_,p_233148_,p_233149_,confirmExperimentalWarning net/minecraft/client/renderer/ScreenEffectRenderer.getOverlayBlock(Lnet/minecraft/world/entity/player/Player;)Lorg/apache/commons/lang3/tuple/Pair;=|p_110717_