From 816346e9193e07fbbfbd612c55303695849b0cfa Mon Sep 17 00:00:00 2001 From: embeddedt <42941056+embeddedt@users.noreply.github.com> Date: Tue, 11 Jul 2023 21:13:02 -0400 Subject: [PATCH] Make mod overrides higher priority than user configuration Prevents players inadvertently enabling incompatible options --- .../modernfix/core/config/ModernFixEarlyConfig.java | 5 ++++- .../org/embeddedt/modernfix/screen/OptionList.java | 13 +++++++++++++ .../main/resources/assets/modernfix/lang/en_us.json | 3 +++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java index 1a3895f1..18137c88 100644 --- a/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java +++ b/common/src/main/java/org/embeddedt/modernfix/core/config/ModernFixEarlyConfig.java @@ -285,7 +285,10 @@ public class ModernFixEarlyConfig { continue; } - option.setEnabled(enabled, true); + if(!option.isModDefined()) + option.setEnabled(enabled, true); + else + LOGGER.warn("Option '{}' already disabled by a mod. Ignoring user configuration", key); } } diff --git a/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java b/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java index 271d73c2..c5ed97bb 100644 --- a/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java +++ b/common/src/main/java/org/embeddedt/modernfix/screen/OptionList.java @@ -128,7 +128,20 @@ public class OptionList extends ContainerObjectSelectionList { this.option.setEnabled(!this.option.isEnabled(), !this.option.isUserDefined()); ModernFix.LOGGER.error("Unable to save config", e); } + }, (btn, gfx, x, y) -> { + if(this.option.isModDefined()) { + String disablingMods = String.join(", ", this.option.getDefiningMods()); + OptionList.this.mainScreen.renderTooltip( + gfx, + new TranslatableComponent("modernfix.option." + (this.option.isEnabled() ? "enabled" : "disabled")) + .append(new TranslatableComponent("modernfix.option.mod_override", disablingMods)), + x, + y + ); + } }); + if(this.option.isModDefined()) + this.toggleButton.active = false; this.helpButton = new Button(75, 0, 20, 20, new TextComponent("?"), (arg) -> { Minecraft.getInstance().setScreen(new ModernFixOptionInfoScreen(mainScreen, optionName)); }); diff --git a/common/src/main/resources/assets/modernfix/lang/en_us.json b/common/src/main/resources/assets/modernfix/lang/en_us.json index 061363ff..0ae67db5 100644 --- a/common/src/main/resources/assets/modernfix/lang/en_us.json +++ b/common/src/main/resources/assets/modernfix/lang/en_us.json @@ -9,6 +9,9 @@ "modernfix.config.done_restart": "Done (restart required)", "modernfix.option.on": "on", "modernfix.option.off": "off", + "modernfix.option.disabled": "disabled", + "modernfix.option.enabled": "enabled", + "modernfix.option.mod_override": " by mods [%s]", "modernfix.config.not_default": " (modified)", "asynclocator.map.locating": "Map (Locating...)", "asynclocator.map.none": "Map (No nearby feature found)",