diff --git a/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt b/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt index b101ab47d..6a14c5761 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/GlobalProfileManager.kt @@ -13,6 +13,7 @@ package de.bixilon.minosoft.config.profile +import com.fasterxml.jackson.databind.ObjectMapper import com.fasterxml.jackson.databind.type.MapType import de.bixilon.kutil.cast.CastUtil.unsafeCast import de.bixilon.kutil.collections.CollectionUtil.lockMapOf @@ -40,6 +41,7 @@ import de.bixilon.minosoft.data.registries.ResourceLocation import de.bixilon.minosoft.gui.eros.crash.ErosCrashReport.Companion.crash import de.bixilon.minosoft.terminal.RunConfiguration import de.bixilon.minosoft.util.json.Jackson +import de.bixilon.minosoft.util.json.ResourceLocationSerializer import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.LogLevels import de.bixilon.minosoft.util.logging.LogMessageType diff --git a/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationSerializer.kt b/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationSerializer.kt index ab4755ac3..61849d684 100644 --- a/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationSerializer.kt +++ b/src/main/java/de/bixilon/minosoft/util/json/ResourceLocationSerializer.kt @@ -28,19 +28,31 @@ object ResourceLocationSerializer : SimpleModule() { init { addDeserializer(ResourceLocation::class.java, Deserializer) addSerializer(ResourceLocation::class.java, Serializer) + addKeyDeserializer(ResourceLocation::class.java, KeyDeserializer) + addKeySerializer(ResourceLocation::class.java, KeySerializer) } object Deserializer : StdDeserializer(ResourceLocation::class.java) { - override fun deserialize(parser: JsonParser, context: DeserializationContext?): ResourceLocation { return parser.valueAsString.toResourceLocation() } } object Serializer : StdSerializer(ResourceLocation::class.java) { - override fun serialize(value: ResourceLocation?, generator: JsonGenerator, provider: SerializerProvider?) { generator.writeString(value?.full) } } + + object KeyDeserializer : com.fasterxml.jackson.databind.KeyDeserializer() { + override fun deserializeKey(key: String, ctxt: DeserializationContext?): Any { + return key.toResourceLocation() + } + } + + object KeySerializer : com.fasterxml.jackson.databind.JsonSerializer() { + override fun serialize(value: ResourceLocation?, gen: JsonGenerator, serializers: SerializerProvider?) { + gen.writeFieldName(value?.toString()) + } + } }