Fixed issues with #7972

This commit is contained in:
Anuken
2023-02-21 10:54:56 -05:00
parent b00c5b4cab
commit df11dd7a74

View File

@@ -41,9 +41,12 @@ public class Mods implements Loadable{
private ObjectSet<String> specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override");
private int totalSprites;
private static ObjectFloatMap<String> textureResize = new ObjectFloatMap<>();
private ObjectFloatMap<String> textureResize = new ObjectFloatMap<>();
private MultiPacker packer;
/** Ordered mods cache. Set to null to invalidate. */
private @Nullable Seq<LoadedMod> lastOrderedMods = new Seq<>();
private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader());
Seq<LoadedMod> mods = new Seq<>();
@@ -106,6 +109,8 @@ public class Mods implements Loadable{
try{
var loaded = loadMod(dest, true, true);
mods.add(loaded);
//invalidate ordered mods cache
lastOrderedMods = null;
requiresReload = true;
//enable the mod on import
Core.settings.put("mod-" + loaded.name + "-enabled", true);
@@ -463,6 +468,8 @@ public class Mods implements Loadable{
LoadedMod mod = loadMod(file, false, entry.value == ModState.enabled);
mod.state = entry.value;
mods.add(mod);
//invalidate ordered mods cache
lastOrderedMods = null;
if(steam) mod.addSteamID(file.name());
}catch(Throwable e){
if(e instanceof ClassNotFoundException && e.getMessage().contains("mindustry.plugin.Plugin")){
@@ -481,7 +488,7 @@ public class Mods implements Loadable{
mods.each(this::updateDependencies);
for(var mod : mods){
// Skip mods where the state has already been resolved
if(mod.state != ModState.enabled)continue;
if(mod.state != ModState.enabled) continue;
if(!mod.isSupported()){
mod.state = ModState.unsupported;
}else if(!mod.shouldBeEnabled()){
@@ -512,8 +519,15 @@ public class Mods implements Loadable{
/** @return mods ordered in the correct way needed for dependencies. */
public Seq<LoadedMod> orderedMods(){
var mapping = mods.asMap(m -> m.meta.name);
return resolveDependencies(mods.map(m -> m.meta)).orderedKeys().map(mapping::get);
//update cache if it's "dirty"/empty
if(lastOrderedMods == null){
//only enabled mods participate; this state is resolved in load()
Seq<LoadedMod> enabled = mods.select(LoadedMod::enabled);
var mapping = enabled.asMap(m -> m.meta.name);
lastOrderedMods = resolveDependencies(enabled.map(m -> m.meta)).orderedKeys().map(mapping::get);
}
return lastOrderedMods;
}
public LoadedMod locateMod(String name){
@@ -522,8 +536,6 @@ public class Mods implements Loadable{
private void buildFiles(){
for(LoadedMod mod : orderedMods()){
if(!mod.shouldBeEnabled()) continue;
boolean zipFolder = !mod.file.isDirectory() && mod.root.parent() != null;
String parentName = zipFolder ? mod.root.name() : null;
for(Fi file : mod.root.list()){