mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-13 17:28:57 +07:00
Resolved #9294 - solved "get vanilla ruleset" errors after downloading mods
This commit is contained in:
@ -476,52 +476,59 @@ object RulesetCache : HashMap<String,Ruleset>() {
|
|||||||
|
|
||||||
/** Returns error lines from loading the rulesets, so we can display the errors to users */
|
/** 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> {
|
fun loadRulesets(consoleMode: Boolean = false, noMods: Boolean = false) :List<String> {
|
||||||
clear()
|
val newRulesets = HashMap<String, Ruleset>()
|
||||||
|
|
||||||
for (ruleset in BaseRuleset.values()) {
|
for (ruleset in BaseRuleset.values()) {
|
||||||
val fileName = "jsons/${ruleset.fullName}"
|
val fileName = "jsons/${ruleset.fullName}"
|
||||||
val fileHandle =
|
val fileHandle =
|
||||||
if (consoleMode) FileHandle(fileName)
|
if (consoleMode) FileHandle(fileName)
|
||||||
else Gdx.files.internal(fileName)
|
else Gdx.files.internal(fileName)
|
||||||
this[ruleset.fullName] = Ruleset().apply {
|
newRulesets[ruleset.fullName] = Ruleset().apply {
|
||||||
load(fileHandle)
|
load(fileHandle)
|
||||||
name = ruleset.fullName
|
name = ruleset.fullName
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (noMods) return listOf()
|
|
||||||
|
|
||||||
val modsHandles = if (consoleMode) FileHandle("mods").list()
|
|
||||||
else Gdx.files.local("mods").list()
|
|
||||||
|
|
||||||
val errorLines = ArrayList<String>()
|
val errorLines = ArrayList<String>()
|
||||||
for (modFolder in modsHandles) {
|
if (!noMods){
|
||||||
if (modFolder.name().startsWith('.')) continue
|
val modsHandles = if (consoleMode) FileHandle("mods").list()
|
||||||
if (!modFolder.isDirectory) continue
|
else Gdx.files.local("mods").list()
|
||||||
try {
|
|
||||||
val modRuleset = Ruleset()
|
for (modFolder in modsHandles) {
|
||||||
modRuleset.load(modFolder.child("jsons"))
|
if (modFolder.name().startsWith('.')) continue
|
||||||
modRuleset.name = modFolder.name()
|
if (!modFolder.isDirectory) continue
|
||||||
modRuleset.folderLocation = modFolder
|
try {
|
||||||
this[modRuleset.name] = modRuleset
|
val modRuleset = Ruleset()
|
||||||
debug("Mod loaded successfully: %s", modRuleset.name)
|
modRuleset.load(modFolder.child("jsons"))
|
||||||
if (Log.shouldLog()) {
|
modRuleset.name = modFolder.name()
|
||||||
val modLinksErrors = modRuleset.checkModLinks()
|
modRuleset.folderLocation = modFolder
|
||||||
// For extension mods which use references to base ruleset objects, the parameter type
|
newRulesets[modRuleset.name] = modRuleset
|
||||||
// errors are irrelevant - the checker ran without a base ruleset
|
debug("Mod loaded successfully: %s", modRuleset.name)
|
||||||
val logFilter: (RulesetError) -> Boolean =
|
if (Log.shouldLog()) {
|
||||||
if (modRuleset.modOptions.isBaseRuleset) { { it.errorSeverityToReport > RulesetErrorSeverity.WarningOptionsOnly } }
|
val modLinksErrors = modRuleset.checkModLinks()
|
||||||
else { { it.errorSeverityToReport > RulesetErrorSeverity.WarningOptionsOnly && !it.text.contains("does not fit parameter type") } }
|
// For extension mods which use references to base ruleset objects, the parameter type
|
||||||
if (modLinksErrors.any(logFilter)) {
|
// errors are irrelevant - the checker ran without a base ruleset
|
||||||
debug("checkModLinks errors: %s", modLinksErrors.getErrorText(logFilter))
|
val logFilter: (RulesetError) -> Boolean =
|
||||||
|
if (modRuleset.modOptions.isBaseRuleset) { { it.errorSeverityToReport > RulesetErrorSeverity.WarningOptionsOnly } }
|
||||||
|
else { { it.errorSeverityToReport > RulesetErrorSeverity.WarningOptionsOnly && !it.text.contains("does not fit parameter type") } }
|
||||||
|
if (modLinksErrors.any(logFilter)) {
|
||||||
|
debug("checkModLinks errors: %s", modLinksErrors.getErrorText(logFilter))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} catch (ex: Exception) {
|
||||||
|
errorLines += "Exception loading mod '${modFolder.name()}':"
|
||||||
|
errorLines += " ${ex.localizedMessage}"
|
||||||
|
errorLines += " ${ex.cause?.localizedMessage}"
|
||||||
}
|
}
|
||||||
} catch (ex: Exception) {
|
|
||||||
errorLines += "Exception loading mod '${modFolder.name()}':"
|
|
||||||
errorLines += " ${ex.localizedMessage}"
|
|
||||||
errorLines += " ${ex.cause?.localizedMessage}"
|
|
||||||
}
|
}
|
||||||
|
if (Log.shouldLog()) for (line in errorLines) debug(line)
|
||||||
}
|
}
|
||||||
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
|
return errorLines
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user