Resolved #9294 - solved "get vanilla ruleset" errors after downloading mods

This commit is contained in:
Yair Morgenstern
2023-05-04 10:39:42 +03:00
parent f6f0c7a050
commit 13a530ba11

View File

@ -476,24 +476,24 @@ object RulesetCache : HashMap<String,Ruleset>() {
/** Returns error lines from loading the rulesets, so we can display the errors to users */
fun loadRulesets(consoleMode: Boolean = false, noMods: Boolean = false) :List<String> {
clear()
val newRulesets = HashMap<String, Ruleset>()
for (ruleset in BaseRuleset.values()) {
val fileName = "jsons/${ruleset.fullName}"
val fileHandle =
if (consoleMode) FileHandle(fileName)
else Gdx.files.internal(fileName)
this[ruleset.fullName] = Ruleset().apply {
newRulesets[ruleset.fullName] = Ruleset().apply {
load(fileHandle)
name = ruleset.fullName
}
}
if (noMods) return listOf()
val errorLines = ArrayList<String>()
if (!noMods){
val modsHandles = if (consoleMode) FileHandle("mods").list()
else Gdx.files.local("mods").list()
val errorLines = ArrayList<String>()
for (modFolder in modsHandles) {
if (modFolder.name().startsWith('.')) continue
if (!modFolder.isDirectory) continue
@ -502,7 +502,7 @@ object RulesetCache : HashMap<String,Ruleset>() {
modRuleset.load(modFolder.child("jsons"))
modRuleset.name = modFolder.name()
modRuleset.folderLocation = modFolder
this[modRuleset.name] = modRuleset
newRulesets[modRuleset.name] = modRuleset
debug("Mod loaded successfully: %s", modRuleset.name)
if (Log.shouldLog()) {
val modLinksErrors = modRuleset.checkModLinks()
@ -522,6 +522,13 @@ object RulesetCache : HashMap<String,Ruleset>() {
}
}
if (Log.shouldLog()) for (line in errorLines) debug(line)
}
// We save the 'old' cache values until we're ready to replace everything, so that the cache isn't empty while we try to load ruleset files
// - this previously lead to "can't find Vanilla ruleset" if the user had a lot of mods and downloaded a new one
this.clear()
this.putAll(newRulesets)
return errorLines
}