From 35151c8187b022637438de8e1c2dccd9ede2d17f Mon Sep 17 00:00:00 2001 From: DBotThePony Date: Fri, 30 Dec 2022 16:33:51 +0700 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D1=84=D0=B0=D0=BA=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=D0=B3=20=D0=B8=D0=BC=D1=91=D0=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kstarbound/defs/item/ItemDefinition.kt | 79 +++++++++---------- .../defs/liquid/LiquidDefinition.kt | 24 +++--- .../kstarbound/defs/tile/MaterialModifier.kt | 20 ++--- .../kstarbound/defs/tile/RenderParameters.kt | 2 +- .../kstarbound/defs/tile/RenderTemplate.kt | 22 +++--- .../kstarbound/defs/tile/TileDefinition.kt | 4 +- .../kstarbound/io/KConcreteTypeAdapter.kt | 31 +------- 7 files changed, 79 insertions(+), 103 deletions(-) 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 0fc84c81..3529d73f 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/item/ItemDefinition.kt @@ -1,6 +1,5 @@ package ru.dbotthepony.kstarbound.defs.item -import com.google.common.collect.ImmutableList import com.google.gson.GsonBuilder import ru.dbotthepony.kstarbound.Starbound import ru.dbotthepony.kstarbound.io.KConcreteTypeAdapter @@ -255,78 +254,78 @@ data class ItemDefinition( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(ItemDefinition::class) - .plain(ItemDefinition::itemName) - .plain(ItemDefinition::price) - .plain(ItemDefinition::rarity) - .plain(ItemDefinition::category) - .plain(ItemDefinition::inventoryIcon, Starbound::readingFolderTransformerNullable) - .plain(ItemDefinition::description) - .plain(ItemDefinition::shortdescription) + .auto(ItemDefinition::itemName) + .auto(ItemDefinition::price) + .auto(ItemDefinition::rarity) + .auto(ItemDefinition::category) + .auto(ItemDefinition::inventoryIcon, Starbound::readingFolderTransformerNullable) + .auto(ItemDefinition::description) + .auto(ItemDefinition::shortdescription) .list(ItemDefinition::itemTags) .list(ItemDefinition::learnBlueprintsOnPickup) - .plain(ItemDefinition::maxStack) - .plain(ItemDefinition::eventCategory) - .plain(ItemDefinition::consumeOnPickup) + .auto(ItemDefinition::maxStack) + .auto(ItemDefinition::eventCategory) + .auto(ItemDefinition::consumeOnPickup) .list(ItemDefinition::pickupQuestTemplates) - .plain(ItemDefinition::race) - .plain(ItemDefinition::displayImage, transformer = Starbound::readingFolderTransformerNullable) - .plain(ItemDefinition::displayoffset) - .plain(ItemDefinition::fossilSetName) - .plain(ItemDefinition::setIndex) - .plain(ItemDefinition::setCount) + .auto(ItemDefinition::race) + .auto(ItemDefinition::displayImage, transformer = Starbound::readingFolderTransformerNullable) + .auto(ItemDefinition::displayoffset) + .auto(ItemDefinition::fossilSetName) + .auto(ItemDefinition::setIndex) + .auto(ItemDefinition::setCount) .map(ItemDefinition::setCollectables, String::class) - .plain(ItemDefinition::completeFossilIcon) - .plain(ItemDefinition::completeFossilObject) + .auto(ItemDefinition::completeFossilIcon) + .auto(ItemDefinition::completeFossilObject) - .plain(ItemDefinition::completeSetDescriptions) + .auto(ItemDefinition::completeSetDescriptions) .list(ItemDefinition::radioMessagesOnPickup) - .plain(ItemDefinition::fuelAmount) + .auto(ItemDefinition::fuelAmount) .list(ItemDefinition::pickupSoundsSmall) .list(ItemDefinition::pickupSoundsMedium) .list(ItemDefinition::pickupSoundsLarge) - .plain(ItemDefinition::smallStackLimit) - .plain(ItemDefinition::mediumStackLimit) - .plain(ItemDefinition::currency) - .plain(ItemDefinition::value) + .auto(ItemDefinition::smallStackLimit) + .auto(ItemDefinition::mediumStackLimit) + .auto(ItemDefinition::currency) + .auto(ItemDefinition::value) .list(ItemDefinition::scripts, transformer = Starbound::readingFolderListTransformer) .list(ItemDefinition::animationScripts, transformer = Starbound::readingFolderListTransformer) - .plain(ItemDefinition::tooltipKind) - .plain(ItemDefinition::level) + .auto(ItemDefinition::tooltipKind) + .auto(ItemDefinition::level) .list(ItemDefinition::leveledStatusEffects) // .map(ItemDefinition::colorOptions) - .plain(ItemDefinition::maleFrames) - .plain(ItemDefinition::femaleFrames) + .auto(ItemDefinition::maleFrames) + .auto(ItemDefinition::femaleFrames) - .plain(ItemDefinition::animation, transformer = Starbound::readingFolderTransformerNullable) - .plain(ItemDefinition::twoHanded) + .auto(ItemDefinition::animation, transformer = Starbound::readingFolderTransformerNullable) + .auto(ItemDefinition::twoHanded) .storesJson() .build() val FOSSIL_ADAPTER = KConcreteTypeAdapter.Builder(FossilSetDescription::class) - .plain(FossilSetDescription::price) - .plain(FossilSetDescription::shortdescription) - .plain(FossilSetDescription::description) + .auto(FossilSetDescription::price) + .auto(FossilSetDescription::shortdescription) + .auto(FossilSetDescription::description) .specifyStringInterner(ADAPTER.stringInterner) .build() val ARMOR_FRAMES_ADAPTER = KConcreteTypeAdapter.Builder(ArmorFrames::class) - .plain(ArmorFrames::body, transformer = Starbound::readingFolderTransformer) - .plain(ArmorFrames::backSleeve, transformer = Starbound::readingFolderTransformer) - .plain(ArmorFrames::frontSleeve, transformer = Starbound::readingFolderTransformer) + .auto(ArmorFrames::body, transformer = Starbound::readingFolderTransformer) + .auto(ArmorFrames::backSleeve, transformer = Starbound::readingFolderTransformer) + .auto(ArmorFrames::frontSleeve, transformer = Starbound::readingFolderTransformer) .build() val STATUS_EFFECT_ADAPTER = KConcreteTypeAdapter.Builder(StatusEffect::class) - .plain(StatusEffect::levelFunction) - .plain(StatusEffect::stat) - .plain(StatusEffect::baseMultiplier) + .auto(StatusEffect::levelFunction) + .auto(StatusEffect::stat) + .auto(StatusEffect::baseMultiplier) .build() fun registerGson(gsonBuilder: GsonBuilder) { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/liquid/LiquidDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/liquid/LiquidDefinition.kt index ccf0c0ea..718a6918 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/liquid/LiquidDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/liquid/LiquidDefinition.kt @@ -26,23 +26,23 @@ data class LiquidDefinition( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(LiquidDefinition::class) - .plain(LiquidDefinition::name) - .plain(LiquidDefinition::liquidId) - .plain(LiquidDefinition::description) - .plain(LiquidDefinition::tickDelta) - .plain(LiquidDefinition::color) - .plain(LiquidDefinition::itemDrop) + .auto(LiquidDefinition::name) + .auto(LiquidDefinition::liquidId) + .auto(LiquidDefinition::description) + .auto(LiquidDefinition::tickDelta) + .auto(LiquidDefinition::color) + .auto(LiquidDefinition::itemDrop) .list(LiquidDefinition::statusEffects) .list(LiquidDefinition::interactions) - .plain(LiquidDefinition::texture) - .plain(LiquidDefinition::bottomLightMix) - .plain(LiquidDefinition::textureMovementFactor) + .auto(LiquidDefinition::texture) + .auto(LiquidDefinition::bottomLightMix) + .auto(LiquidDefinition::textureMovementFactor) .build() val INTERACTION_ADAPTER = KConcreteTypeAdapter.Builder(Interaction::class) - .plain(Interaction::liquid) - .plain(Interaction::liquidResult) - .plain(Interaction::materialResult) + .auto(Interaction::liquid) + .auto(Interaction::liquidResult) + .auto(Interaction::materialResult) .build() fun registerGson(gsonBuilder: GsonBuilder) { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/MaterialModifier.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/MaterialModifier.kt index 49dc0e0d..1a3a33b9 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/MaterialModifier.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/MaterialModifier.kt @@ -23,18 +23,18 @@ data class MaterialModifier( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(MaterialModifier::class) - .plain(MaterialModifier::modId) - .plain(MaterialModifier::modName) - .plain(MaterialModifier::itemDrop) - .plain(MaterialModifier::description) - .plain(MaterialModifier::health) - .plain(MaterialModifier::harvestLevel) - .plain(MaterialModifier::breaksWithTile) - .plain(MaterialModifier::grass) + .auto(MaterialModifier::modId) + .auto(MaterialModifier::modName) + .auto(MaterialModifier::itemDrop) + .auto(MaterialModifier::description) + .auto(MaterialModifier::health) + .auto(MaterialModifier::harvestLevel) + .auto(MaterialModifier::breaksWithTile) + .auto(MaterialModifier::grass) .list(MaterialModifier::miningSounds) - .plain(MaterialModifier::miningParticle) + .auto(MaterialModifier::miningParticle) .plain(MaterialModifier::renderTemplate, RenderTemplate.CACHE) - .plain(MaterialModifier::renderParameters) + .auto(MaterialModifier::renderParameters) .build() fun registerGson(gsonBuilder: GsonBuilder) { diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderParameters.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderParameters.kt index 23eab3a0..bf921227 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderParameters.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderParameters.kt @@ -28,7 +28,7 @@ data class RenderParameters( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderParameters::class) - .plain( + .auto( RenderParameters::texture, RenderParameters::variants, RenderParameters::multiColored, 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 1a48368e..f4883bfd 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/RenderTemplate.kt @@ -27,7 +27,7 @@ data class RenderPiece( ) { companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderPiece::class) - .plain( + .auto( RenderPiece::texture, RenderPiece::textureSize, RenderPiece::texturePosition, @@ -83,7 +83,7 @@ data class RenderRuleList( private val LOGGED = ObjectArraySet() val ADAPTER = KConcreteTypeAdapter.Builder(Entry::class) - .plain( + .auto( Entry::type, Entry::matchHue, Entry::inverse, @@ -119,7 +119,7 @@ data class RenderRuleList( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderRuleList::class) .list(RenderRuleList::entries) - .plain(RenderRuleList::join) + .auto(RenderRuleList::join) .build() } } @@ -211,19 +211,19 @@ data class RenderMatch( .list(RenderMatch::matchAllPoints) .list(RenderMatch::matchAnyPoints) .list(RenderMatch::subMatches) - .plain(RenderMatch::haltOnMatch) - .plain(RenderMatch::haltOnSubMatch) + .auto(RenderMatch::haltOnMatch) + .auto(RenderMatch::haltOnSubMatch) .build() val PIECE_ADAPTER = KConcreteTypeAdapter.Builder(Piece::class) - .plain(Piece::name) - .plain(Piece::offset) + .auto(Piece::name) + .auto(Piece::offset) .inputAsList() .build() val MATCHER_ADAPTER = KConcreteTypeAdapter.Builder(Matcher::class) - .plain(Matcher::offset) - .plain(Matcher::ruleName) + .auto(Matcher::offset) + .auto(Matcher::ruleName) .inputAsList() .build() } @@ -241,7 +241,7 @@ data class RenderMatchList( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderMatchList::class) - .plain(RenderMatchList::name) + .auto(RenderMatchList::name) .list(RenderMatchList::list) .inputAsList() .build() @@ -263,7 +263,7 @@ data class RenderTemplate( companion object { val ADAPTER = KConcreteTypeAdapter.Builder(RenderTemplate::class) .map(RenderTemplate::pieces, RenderPiece::class.java) - .plain(RenderTemplate::representativePiece) + .auto(RenderTemplate::representativePiece) .list(RenderTemplate::matches, RenderMatchList::class.java) .map(RenderTemplate::rules, RenderRuleList::class.java) .build() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/TileDefinition.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/TileDefinition.kt index 3a8cd2ce..3026687c 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/TileDefinition.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/defs/tile/TileDefinition.kt @@ -25,7 +25,7 @@ data class TileDefinition( ) : IRenderableTile { companion object { val ADAPTER = KConcreteTypeAdapter.Builder(TileDefinition::class) - .plain( + .auto( TileDefinition::materialId, TileDefinition::materialName, TileDefinition::particleColor, @@ -39,7 +39,7 @@ data class TileDefinition( TileDefinition::category ) .plain(TileDefinition::renderTemplate, RenderTemplate.CACHE) - .plain( + .auto( TileDefinition::renderParameters, ) .build() diff --git a/src/main/kotlin/ru/dbotthepony/kstarbound/io/KConcreteTypeAdapter.kt b/src/main/kotlin/ru/dbotthepony/kstarbound/io/KConcreteTypeAdapter.kt index e029af8d..a8dc3384 100644 --- a/src/main/kotlin/ru/dbotthepony/kstarbound/io/KConcreteTypeAdapter.kt +++ b/src/main/kotlin/ru/dbotthepony/kstarbound/io/KConcreteTypeAdapter.kt @@ -29,7 +29,6 @@ import kotlin.reflect.* import kotlin.reflect.full.isSubclassOf import kotlin.reflect.full.isSuperclassOf import kotlin.reflect.full.isSupertypeOf -import kotlin.reflect.full.memberProperties @Suppress("unchecked_cast") private fun resolveBound(bound: Class, stringAdapter: TypeAdapter): TypeAdapter { @@ -543,18 +542,18 @@ class KConcreteTypeAdapter private constructor( * Добавляет поля без generic типов и без преобразователей */ @Suppress("unchecked_cast") - fun plain(vararg fields: KProperty1): Builder { + fun auto(vararg fields: KProperty1): Builder { for (field in fields) - plain(field) + auto(field) return this } /** - * Добавляет поле без generic типов, опционально с преобразователем + * Автоматически определяет тип поля и необходимый адаптор типа к нему */ @Suppress("unchecked_cast") - fun plain(field: KProperty1, transformer: (In) -> In = { it }): Builder { + fun auto(field: KProperty1, transformer: (In) -> In = { it }): Builder { val returnType = field.returnType val classifier = returnType.classifier as? KClass<*> ?: throw ClassCastException("Unable to cast ${returnType.classifier} to KClass of property ${field.name}!") @@ -577,20 +576,6 @@ class KConcreteTypeAdapter private constructor( return this } - /** - * Добавляет поле(я) без generic типов. - * - * Если поле с данным именем не найдено, кидается [NoSuchElementException] - */ - fun plain(vararg fields: String): Builder { - val members = clazz.memberProperties - - return this.plain(*Array(fields.size) { - val field = fields[it] - return@Array members.firstOrNull { it.name == field } ?: throw NoSuchElementException("Unable to find field $field") - }) - } - /** * Добавляет поле, которое содержит список значений V (без null). * @@ -601,14 +586,6 @@ class KConcreteTypeAdapter private constructor( return this } - fun makeListAdapter(type: Class): TypeAdapter?> { - return ListAdapter(type, internedStringAdapter) - } - - fun makeObjectAdapter(type: Class): TypeAdapter?> { - return StringMapAdapter(type, internedStringAdapter, stringInterner) - } - /** * Добавляет поле, которое содержит список значений V (без null). *