package ru.dbotthepony.kstarbound.defs.liquid import com.google.gson.GsonBuilder import ru.dbotthepony.kstarbound.io.KConcreteTypeAdapter import ru.dbotthepony.kstarbound.registerTypeAdapter import ru.dbotthepony.kvector.vector.Color data class LiquidDefinition( val name: String, val liquidId: Int, val description: String = "...", val tickDelta: Int = 1, val color: Color, val itemDrop: String? = null, val statusEffects: List = listOf(), val interactions: List = listOf(), val texture: String, val bottomLightMix: Color, val textureMovementFactor: Double, ) { data class Interaction(val liquid: Int, val liquidResult: Int? = null, val materialResult: String? = null) { init { require(liquidResult != null || materialResult != null) { "Both liquidResult and materialResult are missing" } } } companion object { val ADAPTER = KConcreteTypeAdapter.Builder(LiquidDefinition::class) .auto(LiquidDefinition::name) .auto(LiquidDefinition::liquidId) .auto(LiquidDefinition::description) .auto(LiquidDefinition::tickDelta) .auto(LiquidDefinition::color) .auto(LiquidDefinition::itemDrop) .list(LiquidDefinition::statusEffects) .list(LiquidDefinition::interactions) .auto(LiquidDefinition::texture) .auto(LiquidDefinition::bottomLightMix) .auto(LiquidDefinition::textureMovementFactor) .build() val INTERACTION_ADAPTER = KConcreteTypeAdapter.Builder(Interaction::class) .auto(Interaction::liquid) .auto(Interaction::liquidResult) .auto(Interaction::materialResult) .build() fun registerGson(gsonBuilder: GsonBuilder) { gsonBuilder.registerTypeAdapter(ADAPTER) gsonBuilder.registerTypeAdapter(INTERACTION_ADAPTER) } } }