Mention soft dependencies on install but not startup

This commit is contained in:
MEEPofFaith
2024-04-22 14:13:55 -07:00
parent 9e234444f1
commit d21cab42a7
2 changed files with 40 additions and 14 deletions
+3 -1
View File
@@ -183,7 +183,9 @@ mod.folder.missing = Only mods in folder form can be published on the workshop.\
mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game.
mod.dependencies.error = [scarlet]Mods are missing dependencies mod.dependencies.error = [scarlet]Mods are missing dependencies
mod.dependencies.download = Auto-Import mod.dependencies.soft = (optional)
mod.dependencies.download = Import Required
mod.dependencies.downloadall = Import All
mod.dependencies.status = Import Results mod.dependencies.status = Import Results
mod.dependencies.success = Successfully downloaded: mod.dependencies.success = Successfully downloaded:
mod.dependencies.failure = Failed to download: mod.dependencies.failure = Failed to download:
+37 -13
View File
@@ -533,13 +533,20 @@ public class Mods implements Loadable{
private void updateDependencies(LoadedMod mod){ private void updateDependencies(LoadedMod mod){
mod.dependencies.clear(); mod.dependencies.clear();
mod.missingDependencies.clear(); mod.missingDependencies.clear();
mod.missingSoftDependencies.clear();
mod.dependencies = mod.meta.dependencies.map(this::locateMod); mod.dependencies = mod.meta.dependencies.map(this::locateMod);
mod.softDependencies = mod.meta.softDependencies.map(this::locateMod);
for(int i = 0; i < mod.dependencies.size; i++){ for(int i = 0; i < mod.dependencies.size; i++){
if(mod.dependencies.get(i) == null){ if(mod.dependencies.get(i) == null){
mod.missingDependencies.add(mod.meta.dependencies.get(i)); mod.missingDependencies.add(mod.meta.dependencies.get(i));
} }
} }
for(int i = 0; i < mod.softDependencies.size; i++){
if(mod.softDependencies.get(i) == null){
mod.missingSoftDependencies.add(mod.meta.softDependencies.get(i));
}
}
} }
/** @return mods ordered in the correct way needed for dependencies. */ /** @return mods ordered in the correct way needed for dependencies. */
@@ -653,12 +660,12 @@ public class Mods implements Loadable{
Seq<LoadedMod> toCheck = mods.select(mod -> mod.shouldBeEnabled() && mod.hasUnmetDependencies()); Seq<LoadedMod> toCheck = mods.select(mod -> mod.shouldBeEnabled() && mod.hasUnmetDependencies());
if(!toCheck.isEmpty()){ if(!toCheck.isEmpty()){
ui.loadfrag.hide(); ui.loadfrag.hide();
checkDependencies(toCheck); checkDependencies(toCheck, false);
} }
} }
/** Assume mods in toCheck are missing dependencies. */ /** Assume mods in toCheck are missing dependencies. */
private void checkDependencies(Seq<LoadedMod> toCheck){ private void checkDependencies(Seq<LoadedMod> toCheck, boolean soft){
new Dialog(""){{ new Dialog(""){{
setFillParent(true); setFillParent(true);
cont.margin(15); cont.margin(15);
@@ -675,6 +682,12 @@ public class Mods implements Loadable{
d.add(dep).wrap().growX().left().labelAlign(Align.left); d.add(dep).wrap().growX().left().labelAlign(Align.left);
d.row(); d.row();
}); });
if(soft){
mod.missingSoftDependencies.each(dep -> {
d.add(dep + " " + Core.bundle.get("mod.dependencies.soft")).wrap().growX().left().labelAlign(Align.left);
d.row();
});
}
}).growX().padBottom(8f).padLeft(12f); }).growX().padBottom(8f).padLeft(12f);
p.row(); p.row();
}); });
@@ -682,13 +695,22 @@ public class Mods implements Loadable{
cont.row(); cont.row();
cont.button("@ok", this::hide).size(150, 50); cont.button("@cancel", this::hide).size(soft ? 100 : 150, 50);
cont.button("@mod.dependencies.download", () -> { cont.button(soft ? "@mod.dependencies.downloadall" : "@mod.dependencies.download", () -> {
hide(); hide();
Seq<String> toImport = new Seq<>(); Seq<String> toImport = new Seq<>();
toCheck.each(mod -> mod.missingDependencies.each(toImport::addUnique)); toCheck.each(mod -> mod.missingDependencies.each(toImport::addUnique));
downloadDependencies(toImport); downloadDependencies(toImport);
}).size(150, 50); }).size(soft ? 100 : 150, 50);
if(soft){
cont.button("@mod.dependencies.downloadall", () -> {
hide();
Seq<String> toImport = new Seq<>();
toCheck.each(mod -> mod.missingDependencies.each(toImport::addUnique));
toCheck.each(mod -> mod.missingSoftDependencies.each(toImport::addUnique));
downloadDependencies(toImport);
}).size(100, 50);
}
}}.show(); }}.show();
} }
@@ -755,7 +777,7 @@ public class Mods implements Loadable{
public void reload(){ public void reload(){
if(newImports.any()){ if(newImports.any()){
checkDependencies(newImports); checkDependencies(newImports, true);
}else{ }else{
ui.showInfoOnHidden("@mods.reloadexit", () -> { ui.showInfoOnHidden("@mods.reloadexit", () -> {
Log.info("Exiting to reload mods."); Log.info("Exiting to reload mods.");
@@ -990,12 +1012,10 @@ public class Mods implements Loadable{
/** Checks if a newly imported mod's dependencies are already added. */ /** Checks if a newly imported mod's dependencies are already added. */
public void loadImportDependencies(LoadedMod mod){ public void loadImportDependencies(LoadedMod mod){
if(mod.meta.dependencies.isEmpty()) return; updateDependencies(mod);
Seq<String> missing = mod.meta.dependencies.select(m -> getMod(m) == null); if(mod.missingDependencies.any() || mod.missingSoftDependencies.any()){
if(missing.isEmpty()) return; newImports.add(mod);
}
mod.missingDependencies = missing;
newImports.add(mod);
} }
private boolean resolve(String element, ModResolutionContext context){ private boolean resolve(String element, ModResolutionContext context){
@@ -1168,8 +1188,12 @@ public class Mods implements Loadable{
public final ModMeta meta; public final ModMeta meta;
/** This mod's dependencies as already-loaded mods. */ /** This mod's dependencies as already-loaded mods. */
public Seq<LoadedMod> dependencies = new Seq<>(); public Seq<LoadedMod> dependencies = new Seq<>();
/** All missing dependencies of this mod as strings. */ /** This mod's soft dependencies as already-loaded mods. */
public Seq<LoadedMod> softDependencies = new Seq<>();
/** All missing required dependencies of this mod as strings. */
public Seq<String> missingDependencies = new Seq<>(); public Seq<String> missingDependencies = new Seq<>();
/** All missing soft dependencies of this mod as strings. */
public Seq<String> missingSoftDependencies = new Seq<>();
/** Content with initialization code. */ /** Content with initialization code. */
public ObjectSet<Content> erroredContent = new ObjectSet<>(); public ObjectSet<Content> erroredContent = new ObjectSet<>();
/** Current state of this mod. */ /** Current state of this mod. */