И ещё больше штуковин для десериализации!
This commit is contained in:
parent
366e59cf14
commit
63d5afdfcd
@ -111,7 +111,7 @@ object Starbound {
|
||||
|
||||
val assetStringInterner: Interner<String> = Interners.newStrongInterner()
|
||||
|
||||
val stringTypeAdapter: TypeAdapter<String?> = object : TypeAdapter<String>() {
|
||||
val nonnullStringTypeAdapter: TypeAdapter<String> = object : TypeAdapter<String>() {
|
||||
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<String?> = nonnullStringTypeAdapter.nullSafe()
|
||||
|
||||
val gson: Gson = GsonBuilder()
|
||||
.enableComplexMapKeySerialization()
|
||||
|
@ -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<String, String> = mapOf(),
|
||||
val colorOptions: List<Map<String, String>> = 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)
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -428,7 +428,7 @@ class KConcreteTypeAdapter<T : Any> private constructor(
|
||||
*
|
||||
* Таблица неизменяема (создаётся объект [ImmutableMap])
|
||||
*/
|
||||
fun <K, V> map(field: KProperty1<T, Map<K, V>>, keyType: Class<K>, valueType: Class<V>): Builder<T> {
|
||||
fun <K, V> mapAsArray(field: KProperty1<T, Map<K, V>>, keyType: Class<K>, valueType: Class<V>): Builder<T> {
|
||||
types.add(PackedProperty(field, MapAdapter(keyType, valueType)))
|
||||
return this
|
||||
}
|
||||
@ -442,9 +442,9 @@ class KConcreteTypeAdapter<T : Any> private constructor(
|
||||
*/
|
||||
inline fun <reified K, reified V> map(field: KProperty1<T, Map<K, V>>): Builder<T> {
|
||||
if (K::class == String::class)
|
||||
return this.map(field as KProperty1<T, Map<String, V>?>, V::class.java)
|
||||
return this.mapAsObject(field as KProperty1<T, Map<String, V>?>, 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<T : Any> private constructor(
|
||||
*
|
||||
* Таблица неизменяема (создаётся объект [ImmutableMap])
|
||||
*/
|
||||
fun <K : Any, V : Any> map(field: KProperty1<T, Map<K, V>?>, keyType: KClass<K>, valueType: KClass<V>): Builder<T> {
|
||||
fun <K : Any, V : Any> mapAsArray(field: KProperty1<T, Map<K, V>?>, keyType: KClass<K>, valueType: KClass<V>): Builder<T> {
|
||||
types.add(PackedProperty(field, MapAdapter(keyType.java, valueType.java).nullSafe()))
|
||||
return this
|
||||
}
|
||||
@ -462,7 +462,7 @@ class KConcreteTypeAdapter<T : Any> private constructor(
|
||||
*
|
||||
* Таблица неизменяема (создаётся объект [ImmutableMap])
|
||||
*/
|
||||
fun <V> map(field: KProperty1<T, Map<String, V>?>, valueType: Class<V>): Builder<T> {
|
||||
fun <V> mapAsObject(field: KProperty1<T, Map<String, V>?>, valueType: Class<V>): Builder<T> {
|
||||
types.add(PackedProperty(field, String2ObjectAdapter(valueType).nullSafe()))
|
||||
return this
|
||||
}
|
||||
@ -472,7 +472,7 @@ class KConcreteTypeAdapter<T : Any> private constructor(
|
||||
*
|
||||
* Таблица неизменяема (создаётся объект [ImmutableMap])
|
||||
*/
|
||||
fun <V : Any> map(field: KProperty1<T, Map<String, V>?>, valueType: KClass<V>): Builder<T> {
|
||||
fun <V : Any> mapAsObject(field: KProperty1<T, Map<String, V>?>, valueType: KClass<V>): Builder<T> {
|
||||
types.add(PackedProperty(field, String2ObjectAdapter(valueType.java).nullSafe()))
|
||||
return this
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user