diff --git a/api/knbt.api b/api/knbt.api index 810a7302..7847e407 100644 --- a/api/knbt.api +++ b/api/knbt.api @@ -1,4 +1,6 @@ public final class net/benwoodworth/knbt/BedrockNbt : net/benwoodworth/knbt/BinaryNbtFormat { + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtNamed;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtNamed; public fun getConfiguration ()Lnet/benwoodworth/knbt/BedrockNbtConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/BinaryNbtFormatConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; @@ -23,6 +25,8 @@ public final class net/benwoodworth/knbt/BedrockNbtKt { } public final class net/benwoodworth/knbt/BedrockNetworkNbt : net/benwoodworth/knbt/BinaryNbtFormat { + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtTag;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtTag; public fun getConfiguration ()Lnet/benwoodworth/knbt/BedrockNetworkNbtConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/BinaryNbtFormatConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; @@ -73,6 +77,8 @@ public abstract interface annotation class net/benwoodworth/knbt/ExperimentalNbt } public final class net/benwoodworth/knbt/JavaNbt : net/benwoodworth/knbt/BinaryNbtFormat { + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtNamed;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtNamed; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/BinaryNbtFormatConfiguration; public fun getConfiguration ()Lnet/benwoodworth/knbt/JavaNbtConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; @@ -97,6 +103,8 @@ public final class net/benwoodworth/knbt/JavaNbtKt { } public final class net/benwoodworth/knbt/JavaNetworkNbt : net/benwoodworth/knbt/BinaryNbtFormat { + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtTag;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtTag; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/BinaryNbtFormatConfiguration; public fun getConfiguration ()Lnet/benwoodworth/knbt/JavaNetworkNbtConfiguration; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; @@ -524,8 +532,8 @@ public final class net/benwoodworth/knbt/NbtFloat$Companion { } public abstract class net/benwoodworth/knbt/NbtFormat : kotlinx/serialization/SerialFormat { - public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtNamed;)Ljava/lang/Object; - public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtNamed; + protected final fun decodeFromNbtTagUnsafe (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtNamed;)Ljava/lang/Object; + protected final fun encodeToNbtTagUnsafe (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtNamed; public abstract fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; } @@ -1036,44 +1044,14 @@ public abstract class net/benwoodworth/knbt/NbtTransformingSerializer : kotlinx/ protected fun transformSerialize (Lnet/benwoodworth/knbt/NbtTag;)Lnet/benwoodworth/knbt/NbtTag; } -public abstract class net/benwoodworth/knbt/NbtVariant { -} - -public final class net/benwoodworth/knbt/NbtVariant$Bedrock : net/benwoodworth/knbt/NbtVariant { - public static final field INSTANCE Lnet/benwoodworth/knbt/NbtVariant$Bedrock; - public fun equals (Ljava/lang/Object;)Z - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class net/benwoodworth/knbt/NbtVariant$BedrockNetwork : net/benwoodworth/knbt/NbtVariant { - public static final field INSTANCE Lnet/benwoodworth/knbt/NbtVariant$BedrockNetwork; - public fun equals (Ljava/lang/Object;)Z - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class net/benwoodworth/knbt/NbtVariant$Java : net/benwoodworth/knbt/NbtVariant { - public static final field INSTANCE Lnet/benwoodworth/knbt/NbtVariant$Java; - public fun equals (Ljava/lang/Object;)Z - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - -public final class net/benwoodworth/knbt/NbtVariant$JavaNetwork : net/benwoodworth/knbt/NbtVariant { - public fun (I)V - public fun equals (Ljava/lang/Object;)Z - public final fun getProtocolVersion ()I - public fun hashCode ()I - public fun toString ()Ljava/lang/String; -} - public abstract interface annotation class net/benwoodworth/knbt/OkioApi : java/lang/annotation/Annotation { } public class net/benwoodworth/knbt/StringifiedNbt : net/benwoodworth/knbt/NbtFormat, kotlinx/serialization/StringFormat { public static final field Default Lnet/benwoodworth/knbt/StringifiedNbt$Default; + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtTag;)Ljava/lang/Object; public fun decodeFromString (Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/String;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtTag; public fun encodeToString (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ljava/lang/String; public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; public fun getConfiguration ()Lnet/benwoodworth/knbt/StringifiedNbtConfiguration; @@ -1106,8 +1084,9 @@ public final class net/benwoodworth/knbt/StringifiedNbtKt { public class net/benwoodworth/knbt/TagNbt : net/benwoodworth/knbt/NbtFormat { public static final field Default Lnet/benwoodworth/knbt/TagNbt$Default; - public synthetic fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; - public fun getConfiguration ()Lnet/benwoodworth/knbt/TagNbtConfiguration; + public final fun decodeFromNbtTag (Lkotlinx/serialization/DeserializationStrategy;Lnet/benwoodworth/knbt/NbtNamed;)Ljava/lang/Object; + public final fun encodeToNbtTag (Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Lnet/benwoodworth/knbt/NbtNamed; + public fun getConfiguration ()Lnet/benwoodworth/knbt/NbtFormatConfiguration; public fun getSerializersModule ()Lkotlinx/serialization/modules/SerializersModule; } @@ -1116,8 +1095,8 @@ public final class net/benwoodworth/knbt/TagNbt$Default : net/benwoodworth/knbt/ public final class net/benwoodworth/knbt/TagNbtBuilder : net/benwoodworth/knbt/NbtFormatBuilder { public fun ()V - public fun (Lnet/benwoodworth/knbt/TagNbt;)V - public synthetic fun (Lnet/benwoodworth/knbt/TagNbt;ILkotlin/jvm/internal/DefaultConstructorMarker;)V + public fun (Lnet/benwoodworth/knbt/NbtFormat;)V + public synthetic fun (Lnet/benwoodworth/knbt/NbtFormat;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public synthetic fun build$knbt ()Lnet/benwoodworth/knbt/NbtFormat; } @@ -1128,8 +1107,9 @@ public final class net/benwoodworth/knbt/TagNbtConfiguration : net/benwoodworth/ } public final class net/benwoodworth/knbt/TagNbtKt { - public static final fun TagNbt (Lnet/benwoodworth/knbt/TagNbt;Lkotlin/jvm/functions/Function1;)Lnet/benwoodworth/knbt/TagNbt; - public static synthetic fun TagNbt$default (Lnet/benwoodworth/knbt/TagNbt;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lnet/benwoodworth/knbt/TagNbt; + public static final fun TagNbt (Lnet/benwoodworth/knbt/NbtFormat;)Lnet/benwoodworth/knbt/TagNbt; + public static final fun TagNbt (Lnet/benwoodworth/knbt/NbtFormat;Lkotlin/jvm/functions/Function1;)Lnet/benwoodworth/knbt/TagNbt; + public static synthetic fun TagNbt$default (Lnet/benwoodworth/knbt/NbtFormat;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lnet/benwoodworth/knbt/TagNbt; } public final class net/benwoodworth/knbt/_DeprecationsKt { diff --git a/src/commonMain/kotlin/NbtContentPolymorphicSerializer.kt b/src/commonMain/kotlin/NbtContentPolymorphicSerializer.kt index 63577fd3..e1cfdf6e 100644 --- a/src/commonMain/kotlin/NbtContentPolymorphicSerializer.kt +++ b/src/commonMain/kotlin/NbtContentPolymorphicSerializer.kt @@ -98,9 +98,10 @@ public abstract class NbtContentPolymorphicSerializer(private val baseC val input = decoder.asNbtDecoder() val tree = input.decodeNbtTag() + val nbt = TagNbt(input.nbt) val actualSerializer = selectDeserializer(tree) as KSerializer val tagName = actualSerializer.descriptor.nbtName - return input.nbt.decodeFromNbtTag(actualSerializer, NbtNamed(tagName, tree)) + return nbt.decodeFromNbtTag(actualSerializer, NbtNamed(tagName, tree)) } /** diff --git a/src/commonMain/kotlin/NbtTransformingSerializer.kt b/src/commonMain/kotlin/NbtTransformingSerializer.kt index 9492da32..9fbc9b7c 100644 --- a/src/commonMain/kotlin/NbtTransformingSerializer.kt +++ b/src/commonMain/kotlin/NbtTransformingSerializer.kt @@ -71,16 +71,18 @@ public abstract class NbtTransformingSerializer( final override fun serialize(encoder: Encoder, value: T) { val output = encoder.asNbtEncoder() - var tag = output.nbt.encodeToNbtTag(tSerializer, value).value + val nbt = TagNbt(output.nbt) + var tag = nbt.encodeToNbtTag(tSerializer, value).value tag = transformSerialize(tag) output.encodeNbtTag(tag) } final override fun deserialize(decoder: Decoder): T { val input = decoder.asNbtDecoder() + val nbt = TagNbt(input.nbt) val tag = input.decodeNbtTag() val transformed = transformDeserialize(tag) - return input.nbt.decodeFromNbtTag(tSerializer, NbtNamed(nbtName, transformed)) + return nbt.decodeFromNbtTag(tSerializer, NbtNamed(nbtName, transformed)) } /** diff --git a/src/commonMain/kotlin/TagNbt.kt b/src/commonMain/kotlin/TagNbt.kt index 19c0c3c9..23b5653d 100644 --- a/src/commonMain/kotlin/TagNbt.kt +++ b/src/commonMain/kotlin/TagNbt.kt @@ -13,7 +13,7 @@ private val tagNbtCapabilities = NbtCapabilities( ) public open class TagNbt internal constructor( - override val configuration: TagNbtConfiguration, + override val configuration: NbtFormatConfiguration, override val serializersModule: SerializersModule, ) : NbtFormat() { override val name get() = "NbtTag" @@ -46,11 +46,11 @@ public open class TagNbt internal constructor( } /** - * Creates an instance of [TagNbt] configured from the optionally given [TagNbt instance][from] + * Creates an instance of [TagNbt] configured from the optionally given [NbtFormat instance][from] * and adjusted with [builderAction]. */ public fun TagNbt( - from: TagNbt? = null, + from: NbtFormat? = null, builderAction: TagNbtBuilder.() -> Unit, ): TagNbt { val builder = TagNbtBuilder(from) @@ -58,6 +58,12 @@ public fun TagNbt( return builder.build() } +/** + * Creates an instance of [TagNbt] configured from the given [NbtFormat instance][from]. + */ +public fun TagNbt(from: NbtFormat): TagNbt = + TagNbt(from.configuration, from.serializersModule) + /** * Serializes the given [value] into an equivalent named [NbtTag] using a serializer retrieved from the reified type * parameter. diff --git a/src/commonMain/kotlin/TagNbtConfiguration.kt b/src/commonMain/kotlin/TagNbtConfiguration.kt index e880aa59..c1af24be 100644 --- a/src/commonMain/kotlin/TagNbtConfiguration.kt +++ b/src/commonMain/kotlin/TagNbtConfiguration.kt @@ -11,7 +11,7 @@ public class TagNbtConfiguration internal constructor( ")" } -public class TagNbtBuilder(nbt: TagNbt? = null) : NbtFormatBuilder(nbt) { +public class TagNbtBuilder(nbt: NbtFormat? = null) : NbtFormatBuilder(nbt) { override fun build(): TagNbt { return TagNbt( configuration = TagNbtConfiguration(