Allow automatically disabled mods to be restored (#12263)

* Allow automatically disabled mods to be restored

* Indicate failed status

* Apply suggestion from @Anuken

* Update bundle.properties

---------

Co-authored-by: Anuken <arnukren@gmail.com>
This commit is contained in:
Cardillan
2026-09-02 16:31:31 -04:00
committed by GitHub
co-authored by Anuken
parent cbf0025712
commit 7c0f19a520
3 changed files with 21 additions and 1 deletions
+3 -1
View File
@@ -144,6 +144,7 @@ mods.initfailed = [red]\u26A0[] The previous Mindustry instance failed to initia
mods = Mods
mods.name = Mod:
mods.none = [lightgray]No mods found!
mods.restore = Restore Failed
mods.guide = Modding Guide
mods.report = Report Bug
mods.openfolder = Open Folder
@@ -162,6 +163,7 @@ mod.installed = [[Installed]
mod.display = [gray]Mod:[accent] {0}
mod.enabled = [lightgray]Enabled
mod.disabled = [red]Disabled
mod.failed = [red]Failed
mod.multiplayer.compatible = [gray]Multiplayer Compatible
mod.disable = Disable
mod.version = Version:
@@ -3578,4 +3580,4 @@ name.token.explosions = Explosions
name.token.loops = Loops
name.token.movement = Movement
name.token.shoot = Shoot
name.token.ui = UI
name.token.ui = UI
+8
View File
@@ -132,6 +132,7 @@ public class Mods implements Loadable{
lastOrderedMods = null;
requiresReload = true;
//enable the mod on import
Core.settings.put("mod-" + loaded.name + "-failed", false);
if(forceEnable) Core.settings.put("mod-" + loaded.name + "-enabled", true);
sortMods();
//try to load the mod's icon so it displays on import
@@ -953,6 +954,7 @@ public class Mods implements Loadable{
public void setEnabled(LoadedMod mod, boolean enabled){
if(mod.enabled() != enabled){
Core.settings.put("mod-" + mod.name + "-enabled", enabled);
Core.settings.put("mod-" + mod.name + "-failed", false);
requiresReload = true;
mod.state = enabled ? ModState.enabled : ModState.disabled;
mods.each(this::updateDependencies);
@@ -1200,7 +1202,9 @@ public class Mods implements Loadable{
//skip mod loading if it failed
if(skipModLoading()){
boolean wasEnabled = Core.settings.getBool("mod-" + baseName + "-enabled", true);
Core.settings.put("mod-" + baseName + "-enabled", false);
Core.settings.put("mod-" + baseName + "-failed", wasEnabled);
}
if(!headless && Core.settings.getBool("mod-" + baseName + "-enabled", true)){
@@ -1275,6 +1279,10 @@ public class Mods implements Loadable{
return Core.settings.getBool("mod-" + name + "-enabled", true);
}
public boolean failed(){
return Core.settings.getBool("mod-" + name + "-failed", false);
}
public boolean hasUnmetDependencies(){
return !missingDependencies.isEmpty();
}
@@ -45,6 +45,16 @@ public class ModsDialog extends BaseDialog{
addCloseButton();
buttons.button("@mods.guide", Icon.link, () -> Core.app.openURI(modGuideURL)).size(210, 64f);
if(mods.list().contains(m -> m.failed())){
buttons.button("@mods.restore", Icon.power, () -> {
Seq<LoadedMod> skipped = new Seq<>();
skipped.selectFrom(mods.list(), LoadedMod::failed);
skipped.each(m -> mods.setEnabled(m, true));
setup();
});
}
if(!mobile){
buttons.button("@mods.openfolder", Icon.link, () -> Core.app.openFolder(modDirectory.absolutePath()));