mirror of
https://github.com/yairm210/Unciv.git
synced 2025-09-28 06:16:37 -04:00
Fix 4.6.10 no longer loading older games (#9370)
* Fix 4.6.10 no longer loading older games * Save games with correct current version info
This commit is contained in:
parent
3e4ba83bcc
commit
2ef5ed14e1
@ -3,6 +3,7 @@ package com.unciv.json
|
|||||||
import com.badlogic.gdx.utils.Json
|
import com.badlogic.gdx.utils.Json
|
||||||
import com.badlogic.gdx.utils.Json.Serializer
|
import com.badlogic.gdx.utils.Json.Serializer
|
||||||
import com.badlogic.gdx.utils.JsonValue
|
import com.badlogic.gdx.utils.JsonValue
|
||||||
|
import com.unciv.logic.automation.civilization.Encampment
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A [Serializer] for gdx's [Json] that serializes a map that does not have [String] as its key class.
|
* A [Serializer] for gdx's [Json] that serializes a map that does not have [String] as its key class.
|
||||||
@ -49,7 +50,18 @@ class NonStringKeyMapSerializer<MT: MutableMap<KT, Any>, KT>(
|
|||||||
var entry = entries.child
|
var entry = entries.child
|
||||||
while (entry != null) {
|
while (entry != null) {
|
||||||
val key = json.readValue(keyClass, entry.child)
|
val key = json.readValue(keyClass, entry.child)
|
||||||
val value = json.readValue<Any>(null, entry.child.next)
|
|
||||||
|
// 4.6.10 moved the Encampment class, but deserialization of old games which had the old
|
||||||
|
// full package name written out depended on the class loader finding it under the serialized name...
|
||||||
|
// This kludge steps in and allows both fully qualified class names until a better way is found
|
||||||
|
// See #9367
|
||||||
|
val isOldEncampment = entry.child.next.child.run {
|
||||||
|
name == "class" && isString && asString() == "com.unciv.logic.Encampment"
|
||||||
|
}
|
||||||
|
val value = if (isOldEncampment)
|
||||||
|
json.readValue(Encampment::class.java, entry.child.next.child.next)
|
||||||
|
else json.readValue<Any>(null, entry.child.next)
|
||||||
|
|
||||||
result[key!!] = value!!
|
result[key!!] = value!!
|
||||||
|
|
||||||
entry = entry.next
|
entry = entry.next
|
||||||
|
@ -353,7 +353,6 @@ class UncivFiles(
|
|||||||
// this means there wasn't an immediate error while serializing, but this version will cause other errors later down the line
|
// this means there wasn't an immediate error while serializing, but this version will cause other errors later down the line
|
||||||
throw IncompatibleGameInfoVersionException(gameInfo.version)
|
throw IncompatibleGameInfoVersionException(gameInfo.version)
|
||||||
}
|
}
|
||||||
gameInfo.version = GameInfo.CURRENT_COMPATIBILITY_VERSION
|
|
||||||
gameInfo.setTransients()
|
gameInfo.setTransients()
|
||||||
return gameInfo
|
return gameInfo
|
||||||
}
|
}
|
||||||
@ -368,6 +367,7 @@ class UncivFiles(
|
|||||||
|
|
||||||
/** Returns gzipped serialization of [game], optionally gzipped ([forceZip] overrides [saveZipped]) */
|
/** Returns gzipped serialization of [game], optionally gzipped ([forceZip] overrides [saveZipped]) */
|
||||||
fun gameInfoToString(game: GameInfo, forceZip: Boolean? = null): String {
|
fun gameInfoToString(game: GameInfo, forceZip: Boolean? = null): String {
|
||||||
|
game.version = GameInfo.CURRENT_COMPATIBILITY_VERSION
|
||||||
val plainJson = json().toJson(game)
|
val plainJson = json().toJson(game)
|
||||||
return if (forceZip ?: saveZipped) Gzip.zip(plainJson) else plainJson
|
return if (forceZip ?: saveZipped) Gzip.zip(plainJson) else plainJson
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user