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