Skip to content

Commit f2a6c5d

Browse files
committed
feat: add serializers and codecs for SpongePowered vector math types
- Implemented codecs and serializers for `Vector2i`, `Vector2f`, `Vector2l`, `Vector3i`, `Vector3f`, `Vector3d`, `Vector4l`, `VectorNl`, `VectorNi`, and `VectorNf`. - Updated `SurfCodecs` and `SurfSerializerModule` to support SpongePowered math vectors. - Refactored Adventure sound serialization for improved source handling.
1 parent 2db9e0a commit f2a6c5d

38 files changed

+805
-36
lines changed

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/SurfCodecs.kt

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,22 @@ import dev.slne.surf.surfapi.core.api.serializer.adventure.sound.stop.AdventureS
1313
import dev.slne.surf.surfapi.core.api.serializer.adventure.title.AdventureTitleCodec
1414
import dev.slne.surf.surfapi.core.api.serializer.java.uri.JavaURICodec
1515
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
16+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2d.SpongeVector2dCodec
17+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2f.SpongeVector2fCodec
18+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2i.SpongeVector2iCodec
19+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2l.SpongeVector2lCodec
20+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3d.SpongeVector3dCodec
21+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3f.SpongeVector3fCodec
22+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3i.SpongeVector3iCodec
23+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3l.SpongeVector3lCodec
24+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4d.SpongeVector4dCodec
25+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4f.SpongeVector4fCodec
26+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4i.SpongeVector4iCodec
27+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4l.SpongeVector4lCodec
28+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnd.SpongeVectorNdCodec
29+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnf.SpongeVectorNfCodec
30+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vni.SpongeVectorNiCodec
31+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnl.SpongeVectorNlCodec
1632

1733
object SurfCodecs {
1834
// region Adventure
@@ -29,6 +45,25 @@ object SurfCodecs {
2945
val TITLE = AdventureTitleCodec.CODEC
3046
// endregion
3147

48+
// region SpongePowered Math
49+
val SPONGE_VECTOR_2D = SpongeVector2dCodec.CODEC
50+
val SPONGE_VECTOR_2F = SpongeVector2fCodec.CODEC
51+
val SPONGE_VECTOR_2I = SpongeVector2iCodec.CODEC
52+
val SPONGE_VECTOR_2L = SpongeVector2lCodec.CODEC
53+
val SPONGE_VECTOR_3D = SpongeVector3dCodec.CODEC
54+
val SPONGE_VECTOR_3F = SpongeVector3fCodec.CODEC
55+
val SPONGE_VECTOR_3I = SpongeVector3iCodec.CODEC
56+
val SPONGE_VECTOR_3L = SpongeVector3lCodec.CODEC
57+
val SPONGE_VECTOR_4D = SpongeVector4dCodec.CODEC
58+
val SPONGE_VECTOR_4F = SpongeVector4fCodec.CODEC
59+
val SPONGE_VECTOR_4I = SpongeVector4iCodec.CODEC
60+
val SPONGE_VECTOR_4L = SpongeVector4lCodec.CODEC
61+
val SPONGE_VECTOR_ND = SpongeVectorNdCodec.CODEC
62+
val SPONGE_VECTOR_NF = SpongeVectorNfCodec.CODEC
63+
val SPONGE_VECTOR_NI = SpongeVectorNiCodec.CODEC
64+
val SPONGE_VECTOR_NL = SpongeVectorNlCodec.CODEC
65+
// endregion
66+
3267
// region Java
3368
val URI = JavaURICodec.CODEC
3469
val UUID = JavaUUIDCodec.CODEC

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/SurfSerializerModule.kt

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,22 @@ import dev.slne.surf.surfapi.core.api.serializer.adventure.title.AdventureTitleS
1414
import dev.slne.surf.surfapi.core.api.serializer.adventure.title.AdventureTitleSerializer.AdventureTitleTimes
1515
import dev.slne.surf.surfapi.core.api.serializer.java.uri.JavaURISerializer
1616
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
17+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2d.SpongeVector2dSerializer
18+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2f.SpongeVector2fSerializer
19+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2i.SpongeVector2iSerializer
20+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2l.SpongeVector2lSerializer
21+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3d.SpongeVector3dSerializer
22+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3f.SpongeVector3fSerializer
23+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3i.SpongeVector3iSerializer
24+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v3l.SpongeVector3lSerializer
25+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4d.SpongeVector4dSerializer
26+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4f.SpongeVector4fSerializer
27+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4i.SpongeVector4iSerializer
28+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v4l.SpongeVector4lSerializer
29+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnd.SpongeVectorNdSerializer
30+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnf.SpongeVectorNfSerializer
31+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vni.SpongeVectorNiSerializer
32+
import dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.vnl.SpongeVectorNlSerializer
1733
import kotlinx.serialization.modules.SerializersModule
1834
import kotlinx.serialization.modules.contextual
1935

@@ -33,6 +49,25 @@ object SurfSerializerModule {
3349
contextual(AdventureTitleTimes)
3450
}
3551

52+
val spongePoweredMath = SerializersModule {
53+
contextual(SpongeVector2dSerializer)
54+
contextual(SpongeVector2fSerializer)
55+
contextual(SpongeVector2iSerializer)
56+
contextual(SpongeVector2lSerializer)
57+
contextual(SpongeVector3dSerializer)
58+
contextual(SpongeVector3fSerializer)
59+
contextual(SpongeVector3iSerializer)
60+
contextual(SpongeVector3lSerializer)
61+
contextual(SpongeVector4dSerializer)
62+
contextual(SpongeVector4fSerializer)
63+
contextual(SpongeVector4iSerializer)
64+
contextual(SpongeVector4lSerializer)
65+
contextual(SpongeVectorNdSerializer)
66+
contextual(SpongeVectorNfSerializer)
67+
contextual(SpongeVectorNiSerializer)
68+
contextual(SpongeVectorNlSerializer)
69+
}
70+
3671
val java = SerializersModule {
3772
contextual(JavaURISerializer)
3873
contextual(JavaUUIDSerializer)
@@ -41,5 +76,6 @@ object SurfSerializerModule {
4176
val all = SerializersModule {
4277
include(adventure)
4378
include(java)
79+
include(spongePoweredMath)
4480
}
4581
}

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/adventure/bossbar/AdventureBossBarSerializer.kt

Lines changed: 13 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,24 +6,24 @@ import dev.slne.surf.surfapi.core.api.serializer.adventure.component.AdventureCo
66
import kotlinx.serialization.ExperimentalSerializationApi
77
import kotlinx.serialization.KSerializer
88
import kotlinx.serialization.Serializable
9-
import kotlinx.serialization.Serializer
109
import kotlinx.serialization.builtins.SetSerializer
1110
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
1211
import kotlinx.serialization.descriptors.element
1312
import kotlinx.serialization.encoding.*
13+
import kotlinx.serialization.serializer
1414
import net.kyori.adventure.bossbar.BossBar
1515
import net.kyori.adventure.text.Component
1616

1717
typealias SerializableBossBar = @Serializable(with = AdventureBossBarSerializer::class) BossBar
1818

1919
object AdventureBossBarSerializer : KSerializer<BossBar> {
20-
private val flagsSerializer = SetSerializer(BossBarFlagSerializer)
20+
private val flagsSerializer = SetSerializer(serializer<BossBar.Flag>())
2121

2222
override val descriptor = buildClassSerialDescriptor("surfapi.AdventureBossBar") {
2323
element("name", AdventureComponentSerializer.descriptor)
2424
element<Float>("progress")
25-
element("color", BossBarColorSerializer.descriptor)
26-
element("overlay", BossBarOverlaySerializer.descriptor)
25+
element<BossBar.Color>("color")
26+
element<BossBar.Overlay>("overlay")
2727
element("flags", flagsSerializer.descriptor)
2828
}
2929

@@ -33,8 +33,8 @@ object AdventureBossBarSerializer : KSerializer<BossBar> {
3333
) = encoder.encodeStructure(descriptor) {
3434
encodeSerializableElement(descriptor, 0, AdventureComponentSerializer, value.name())
3535
encodeFloatElement(descriptor, 1, value.progress())
36-
encodeSerializableElement(descriptor, 2, BossBarColorSerializer, value.color())
37-
encodeSerializableElement(descriptor, 3, BossBarOverlaySerializer, value.overlay())
36+
encodeSerializableElement(descriptor, 2, serializer<BossBar.Color>(), value.color())
37+
encodeSerializableElement(descriptor, 3, serializer<BossBar.Overlay>(), value.overlay())
3838
encodeSerializableElement(descriptor, 4, flagsSerializer, value.flags())
3939
}
4040

@@ -49,8 +49,8 @@ object AdventureBossBarSerializer : KSerializer<BossBar> {
4949
if (decodeSequentially()) {
5050
name = decodeSerializableElement(descriptor, 0, AdventureComponentSerializer)
5151
progress = decodeFloatElement(descriptor, 1)
52-
color = decodeSerializableElement(descriptor, 2, BossBarColorSerializer)
53-
overlay = decodeSerializableElement(descriptor, 3, BossBarOverlaySerializer)
52+
color = decodeSerializableElement(descriptor, 2, serializer<BossBar.Color>())
53+
overlay = decodeSerializableElement(descriptor, 3, serializer<BossBar.Overlay>())
5454
flags = decodeSerializableElement(descriptor, 4, flagsSerializer)
5555
} else {
5656
while (true) {
@@ -59,9 +59,11 @@ object AdventureBossBarSerializer : KSerializer<BossBar> {
5959
decodeSerializableElement(descriptor, 0, AdventureComponentSerializer)
6060

6161
1 -> progress = decodeFloatElement(descriptor, 1)
62-
2 -> color = decodeSerializableElement(descriptor, 2, BossBarColorSerializer)
62+
2 -> color =
63+
decodeSerializableElement(descriptor, 2, serializer<BossBar.Color>())
64+
6365
3 -> overlay =
64-
decodeSerializableElement(descriptor, 3, BossBarOverlaySerializer)
66+
decodeSerializableElement(descriptor, 3, serializer<BossBar.Overlay>())
6567

6668
4 -> flags = decodeSerializableElement(descriptor, 4, flagsSerializer)
6769
CompositeDecoder.DECODE_DONE -> break
@@ -78,13 +80,4 @@ object AdventureBossBarSerializer : KSerializer<BossBar> {
7880
flags ?: emptySet(),
7981
)
8082
}
81-
}
82-
83-
@Serializer(forClass = BossBar.Color::class)
84-
private object BossBarColorSerializer
85-
86-
@Serializer(forClass = BossBar.Overlay::class)
87-
private object BossBarOverlaySerializer
88-
89-
@Serializer(forClass = BossBar.Flag::class)
90-
private object BossBarFlagSerializer
83+
}

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/adventure/component/decoration/AdventureTextDecorationSerializer.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
package dev.slne.surf.surfapi.core.api.serializer.adventure.component.decoration
44

55
import kotlinx.serialization.ExperimentalSerializationApi
6+
import kotlinx.serialization.KSerializer
67
import kotlinx.serialization.Serializable
7-
import kotlinx.serialization.Serializer
8+
import kotlinx.serialization.serializer
89
import net.kyori.adventure.text.format.TextDecoration
910

1011
typealias SerializableTextDecoration = @Serializable(with = AdventureTextDecorationSerializer::class) TextDecoration
1112

12-
@Serializer(forClass = TextDecoration::class)
13-
object AdventureTextDecorationSerializer
13+
object AdventureTextDecorationSerializer : KSerializer<TextDecoration> by serializer()

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/adventure/sound/AdventureSoundSerializer.kt

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ import dev.slne.surf.surfapi.core.api.serializer.adventure.key.AdventureKeySeria
66
import kotlinx.serialization.ExperimentalSerializationApi
77
import kotlinx.serialization.KSerializer
88
import kotlinx.serialization.Serializable
9-
import kotlinx.serialization.Serializer
109
import kotlinx.serialization.builtins.serializer
1110
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
1211
import kotlinx.serialization.descriptors.element
1312
import kotlinx.serialization.encoding.*
13+
import kotlinx.serialization.serializer
1414
import net.kyori.adventure.key.Key
1515
import net.kyori.adventure.sound.Sound
1616

@@ -19,7 +19,7 @@ typealias SerializableSound = @Serializable(with = AdventureSoundSerializer::cla
1919
object AdventureSoundSerializer : KSerializer<Sound> {
2020
override val descriptor = buildClassSerialDescriptor("surfapi.Sound") {
2121
element("name", AdventureKeySerializer.descriptor)
22-
element("source", SoundSourceSerializer.descriptor)
22+
element("source", serializer<Sound.Source>().descriptor)
2323
element<Float>("volume")
2424
element<Float>("pitch")
2525
element<Long>("seed", isOptional = true)
@@ -30,7 +30,7 @@ object AdventureSoundSerializer : KSerializer<Sound> {
3030
value: Sound,
3131
) = encoder.encodeStructure(descriptor) {
3232
encodeSerializableElement(descriptor, 0, AdventureKeySerializer, value.name())
33-
encodeSerializableElement(descriptor, 1, SoundSourceSerializer, value.source())
33+
encodeSerializableElement(descriptor, 1, serializer<Sound.Source>(), value.source())
3434
encodeFloatElement(descriptor, 2, value.volume())
3535
encodeFloatElement(descriptor, 3, value.pitch())
3636
value.seed().ifPresent { seed ->
@@ -47,14 +47,14 @@ object AdventureSoundSerializer : KSerializer<Sound> {
4747

4848
if (decodeSequentially()) {
4949
name = decodeSerializableElement(descriptor, 0, AdventureKeySerializer)
50-
source = decodeSerializableElement(descriptor, 1, SoundSourceSerializer)
50+
source = decodeSerializableElement(descriptor, 1, serializer<Sound.Source>())
5151
volume = decodeFloatElement(descriptor, 2)
5252
pitch = decodeFloatElement(descriptor, 3)
5353
seed = decodeNullableSerializableElement(descriptor, 4, Long.serializer())
5454
} else while (true) {
5555
when (val index = decodeElementIndex(descriptor)) {
5656
0 -> name = decodeSerializableElement(descriptor, 0, AdventureKeySerializer)
57-
1 -> source = decodeSerializableElement(descriptor, 1, SoundSourceSerializer)
57+
1 -> source = decodeSerializableElement(descriptor, 1, serializer<Sound.Source>())
5858
2 -> volume = decodeFloatElement(descriptor, 2)
5959
3 -> pitch = decodeFloatElement(descriptor, 3)
6060
4 -> seed = decodeNullableSerializableElement(descriptor, 4, Long.serializer())
@@ -71,7 +71,4 @@ object AdventureSoundSerializer : KSerializer<Sound> {
7171
.apply { seed?.let { seed(it) } }
7272
.build()
7373
}
74-
75-
@Serializer(forClass = Sound.Source::class)
76-
object SoundSourceSerializer
7774
}

surf-api-core/surf-api-core-api/src/main/kotlin/dev/slne/surf/surfapi/core/api/serializer/adventure/sound/stop/AdventureSoundStopSerializer.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
package dev.slne.surf.surfapi.core.api.serializer.adventure.sound.stop
44

55
import dev.slne.surf.surfapi.core.api.serializer.adventure.key.AdventureKeySerializer
6-
import dev.slne.surf.surfapi.core.api.serializer.adventure.sound.AdventureSoundSerializer.SoundSourceSerializer
76
import kotlinx.serialization.ExperimentalSerializationApi
87
import kotlinx.serialization.KSerializer
98
import kotlinx.serialization.Serializable
109
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
1110
import kotlinx.serialization.encoding.*
11+
import kotlinx.serialization.serializer
1212
import net.kyori.adventure.key.Key
1313
import net.kyori.adventure.sound.Sound
1414
import net.kyori.adventure.sound.SoundStop
@@ -17,7 +17,7 @@ typealias SerializableSoundStop = @Serializable(with = AdventureSoundStopSeriali
1717

1818
object AdventureSoundStopSerializer : KSerializer<SoundStop> {
1919
override val descriptor = buildClassSerialDescriptor("surfapi.SoundStop") {
20-
element("source", SoundSourceSerializer.descriptor, isOptional = true)
20+
element("source", serializer<Sound.Source>().descriptor, isOptional = true)
2121
element("sound", AdventureKeySerializer.descriptor, isOptional = true)
2222
}
2323

@@ -28,7 +28,7 @@ object AdventureSoundStopSerializer : KSerializer<SoundStop> {
2828
encodeNullableSerializableElement(
2929
descriptor,
3030
0,
31-
SoundSourceSerializer,
31+
serializer<Sound.Source>(),
3232
value.source()
3333
)
3434

@@ -45,12 +45,12 @@ object AdventureSoundStopSerializer : KSerializer<SoundStop> {
4545
var sound: Key? = null
4646

4747
if (decodeSequentially()) {
48-
source = decodeNullableSerializableElement(descriptor, 0, SoundSourceSerializer)
48+
source = decodeNullableSerializableElement(descriptor, 0, serializer<Sound.Source>())
4949
sound = decodeNullableSerializableElement(descriptor, 1, AdventureKeySerializer)
5050
} else while (true) {
5151
when (val index = decodeElementIndex(descriptor)) {
5252
0 -> source =
53-
decodeNullableSerializableElement(descriptor, 0, SoundSourceSerializer)
53+
decodeNullableSerializableElement(descriptor, 0, serializer<Sound.Source>())
5454

5555
1 -> sound =
5656
decodeNullableSerializableElement(descriptor, 1, AdventureKeySerializer)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2d
2+
3+
import com.mojang.serialization.Codec
4+
import org.spongepowered.math.vector.Vector2d
5+
6+
object SpongeVector2dCodec {
7+
val CODEC: Codec<Vector2d> = Codec.DOUBLE
8+
.listOf(2, 2)
9+
.xmap(
10+
{ coords -> Vector2d.from(coords[0], coords[1]) },
11+
{ vector -> listOf(vector.x(), vector.y()) }
12+
)
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2d
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.DoubleArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.vector.Vector2d
10+
11+
typealias SerializableVector2d = @Serializable(with = SpongeVector2dSerializer::class) Vector2d
12+
13+
object SpongeVector2dSerializer : KSerializer<Vector2d> {
14+
private val doubleArraySerializer = DoubleArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Vector2d", doubleArraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Vector2d,
21+
) {
22+
encoder.encodeSerializableValue(doubleArraySerializer, doubleArrayOf(value.x(), value.y()))
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Vector2d {
26+
val (x, y) = decoder.decodeSerializableValue(doubleArraySerializer)
27+
return Vector2d(x, y)
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2f
2+
3+
import com.mojang.serialization.Codec
4+
import org.spongepowered.math.vector.Vector2f
5+
6+
object SpongeVector2fCodec {
7+
val CODEC: Codec<Vector2f> = Codec.FLOAT
8+
.listOf(2, 2)
9+
.xmap(
10+
{ coords -> Vector2f.from(coords[0], coords[1]) },
11+
{ vector -> listOf(vector.x(), vector.y()) }
12+
)
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package dev.slne.surf.surfapi.core.api.serializer.spongepowered.math.vector.v2f
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.Serializable
5+
import kotlinx.serialization.builtins.FloatArraySerializer
6+
import kotlinx.serialization.descriptors.SerialDescriptor
7+
import kotlinx.serialization.encoding.Decoder
8+
import kotlinx.serialization.encoding.Encoder
9+
import org.spongepowered.math.vector.Vector2f
10+
11+
typealias SerializableVector2f = @Serializable(with = SpongeVector2fSerializer::class) Vector2f
12+
13+
object SpongeVector2fSerializer : KSerializer<Vector2f> {
14+
private val arraySerializer = FloatArraySerializer()
15+
override val descriptor =
16+
SerialDescriptor("surfapi.sponge.Vector2f", arraySerializer.descriptor)
17+
18+
override fun serialize(
19+
encoder: Encoder,
20+
value: Vector2f,
21+
) {
22+
encoder.encodeSerializableValue(arraySerializer, floatArrayOf(value.x(), value.y()))
23+
}
24+
25+
override fun deserialize(decoder: Decoder): Vector2f {
26+
val (x, y) = decoder.decodeSerializableValue(arraySerializer)
27+
return Vector2f(x, y)
28+
}
29+
}

0 commit comments

Comments
 (0)