diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt index ec72ecfa..202a001e 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/Starbound.kt @@ -111,7 +111,7 @@ object Starbound { val assetStringInterner: Interner = Interners.newStrongInterner() - val stringTypeAdapter: TypeAdapter = object : TypeAdapter() { + val nonnullStringTypeAdapter: TypeAdapter = object : TypeAdapter() { override fun write(out: JsonWriter, value: String) { out.value(value) } @@ -119,7 +119,9 @@ object Starbound { override fun read(`in`: JsonReader): String { return assetStringInterner.intern(TypeAdapters.STRING.read(`in`)) } - }.nullSafe() + } + + val stringTypeAdapter: TypeAdapter = nonnullStringTypeAdapter.nullSafe() val gson: Gson = GsonBuilder() .enableComplexMapKeySerialization() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt index c0529570..41ccd027 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt @@ -3,6 +3,8 @@ package ru.dbotthepony.kstarbound.defs.item import com.google.gson.GsonBuilder import ru.dbotthepony.kstarbound.Starbound import ru.dbotthepony.kstarbound.io.json.KConcreteTypeAdapter +import ru.dbotthepony.kstarbound.io.json.asJsonObject +import ru.dbotthepony.kstarbound.io.json.asList import ru.dbotthepony.kstarbound.registerTypeAdapter import ru.dbotthepony.kvector.vector.ndouble.Vector2d @@ -195,7 +197,7 @@ data class ItemDefinition( /** * Варианты покраски (???) */ - // val colorOptions: Map = mapOf(), + val colorOptions: List> = listOf(), /** * Визуальные кадры анимации, когда надето на гуманоида мужского пола @@ -276,7 +278,7 @@ data class ItemDefinition( .auto(ItemDefinition::fossilSetName) .auto(ItemDefinition::setIndex) .auto(ItemDefinition::setCount) - .map(ItemDefinition::setCollectables, String::class) + .mapAsObject(ItemDefinition::setCollectables, String::class) .auto(ItemDefinition::completeFossilIcon) .auto(ItemDefinition::completeFossilObject) @@ -298,7 +300,7 @@ data class ItemDefinition( .auto(ItemDefinition::tooltipKind) .auto(ItemDefinition::level) .list(ItemDefinition::leveledStatusEffects) - // .map(ItemDefinition::colorOptions) + .add(ItemDefinition::colorOptions, Starbound.nonnullStringTypeAdapter.asJsonObject().asList()) .auto(ItemDefinition::maleFrames) .auto(ItemDefinition::femaleFrames) diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt index ca0c6ddd..ab8f27e2 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt @@ -262,10 +262,10 @@ data class RenderTemplate( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderTemplate::class) - .map(RenderTemplate::pieces, RenderPiece::class.java) + .mapAsObject(RenderTemplate::pieces, RenderPiece::class.java) .auto(RenderTemplate::representativePiece) .list(RenderTemplate::matches, RenderMatchList::class.java) - .map(RenderTemplate::rules, RenderRuleList::class.java) + .mapAsObject(RenderTemplate::rules, RenderRuleList::class.java) .build() fun registerGson(gsonBuilder: GsonBuilder) { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/KConcreteTypeAdapter.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/KConcreteTypeAdapter.kt index 80c54348..60a671cd 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/KConcreteTypeAdapter.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/io/json/KConcreteTypeAdapter.kt @@ -428,7 +428,7 @@ class KConcreteTypeAdapter private constructor( * * Таблица неизменяема (создаётся объект [ImmutableMap]) */ - fun map(field: KProperty1>, keyType: Class, valueType: Class): Builder { + fun mapAsArray(field: KProperty1>, keyType: Class, valueType: Class): Builder { types.add(PackedProperty(field, MapAdapter(keyType, valueType))) return this } @@ -442,9 +442,9 @@ class KConcreteTypeAdapter private constructor( */ inline fun map(field: KProperty1>): Builder { if (K::class == String::class) - return this.map(field as KProperty1?>, V::class.java) + return this.mapAsObject(field as KProperty1?>, V::class.java) - return this.map(field, K::class.java, V::class.java) + return this.mapAsArray(field, K::class.java, V::class.java) } /** @@ -452,7 +452,7 @@ class KConcreteTypeAdapter private constructor( * * Таблица неизменяема (создаётся объект [ImmutableMap]) */ - fun map(field: KProperty1?>, keyType: KClass, valueType: KClass): Builder { + fun mapAsArray(field: KProperty1?>, keyType: KClass, valueType: KClass): Builder { types.add(PackedProperty(field, MapAdapter(keyType.java, valueType.java).nullSafe())) return this } @@ -462,7 +462,7 @@ class KConcreteTypeAdapter private constructor( * * Таблица неизменяема (создаётся объект [ImmutableMap]) */ - fun map(field: KProperty1?>, valueType: Class): Builder { + fun mapAsObject(field: KProperty1?>, valueType: Class): Builder { types.add(PackedProperty(field, String2ObjectAdapter(valueType).nullSafe())) return this } @@ -472,7 +472,7 @@ class KConcreteTypeAdapter private constructor( * * Таблица неизменяема (создаётся объект [ImmutableMap]) */ - fun map(field: KProperty1?>, valueType: KClass): Builder { + fun mapAsObject(field: KProperty1?>, valueType: KClass): Builder { types.add(PackedProperty(field, String2ObjectAdapter(valueType.java).nullSafe())) return this }