Fixed issues with #7972
This commit is contained in:
@@ -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()){
|
||||
|
||||
Reference in New Issue
Block a user