Skip to content

Commit 4324206

Browse files
authored
Version/1.21.8 (#157)
2 parents c02cf1a + 5d90c80 commit 4324206

File tree

130 files changed

+4181
-8
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

130 files changed

+4181
-8
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ flogger = { module = "com.google.flogger:flogger", version.ref = "flogger" }
147147
flogger-slf4j-backend = { module = "com.google.flogger:flogger-slf4j-backend", version.ref = "flogger" }
148148
aide-reflection = { module = "tech.hiddenproject:aide-reflection", version.ref = "aide-reflection" }
149149
glm = { module = "io.github.kotlin-graphics:glm", version.ref = "glm" }
150+
datafixerupper = { module = "com.mojang:datafixerupper", version.ref = "datafixerupper" }
150151

151152
auto-service-annotations = { module = "com.google.auto.service:auto-service-annotations", version.ref = "auto-service" }
152153
auto-service = { module = "dev.zacsweers.autoservice:auto-service-ksp", version.ref = "auto-service-ksp" }
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.blockdata
2+
3+
import com.mojang.serialization.Codec
4+
import com.mojang.serialization.DataResult
5+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
6+
import org.bukkit.block.data.BlockData
7+
8+
object BlockDataCodec {
9+
val CODEC: Codec<BlockData> = Codec.STRING.comapFlatMap({ data ->
10+
try {
11+
DataResult.success(server.createBlockData(data))
12+
} catch (e: IllegalArgumentException) {
13+
DataResult.error { "Invalid block data: $data (${e.message})" }
14+
}
15+
}, BlockData::getAsString)
16+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.blockdata
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.descriptors.PrimitiveKind
5+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
6+
import kotlinx.serialization.encoding.Decoder
7+
import kotlinx.serialization.encoding.Encoder
8+
import org.bukkit.Bukkit
9+
import org.bukkit.block.data.BlockData
10+
11+
object BlockDataSerializer : KSerializer<BlockData> {
12+
override val descriptor =
13+
PrimitiveSerialDescriptor("surfapi.bukkit.BlockData", PrimitiveKind.STRING)
14+
15+
override fun serialize(
16+
encoder: Encoder,
17+
value: BlockData,
18+
) {
19+
encoder.encodeString(value.asString)
20+
}
21+
22+
override fun deserialize(decoder: Decoder) =
23+
Bukkit.createBlockData(decoder.decodeString())
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.blockstate
2+
3+
import com.mojang.serialization.Codec
4+
import org.bukkit.Bukkit
5+
import org.bukkit.block.BlockState
6+
7+
object BlockStateCodec {
8+
val CODEC: Codec<BlockState> = Codec.STRING.xmap(
9+
{ str -> Bukkit.createBlockData(str).createBlockState() },
10+
{ blockState -> blockState.blockData.asString }
11+
)
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.blockstate
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.descriptors.PrimitiveKind
5+
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
6+
import kotlinx.serialization.encoding.Decoder
7+
import kotlinx.serialization.encoding.Encoder
8+
import org.bukkit.Bukkit
9+
import org.bukkit.block.BlockState
10+
11+
object BlockStateSerializer : KSerializer<BlockState> {
12+
override val descriptor =
13+
PrimitiveSerialDescriptor("surfapi.bukkit.BlockState", PrimitiveKind.STRING)
14+
15+
override fun serialize(
16+
encoder: Encoder,
17+
value: BlockState,
18+
) {
19+
encoder.encodeString(value.blockData.asString)
20+
}
21+
22+
override fun deserialize(decoder: Decoder) =
23+
Bukkit.createBlockData(decoder.decodeString()).createBlockState()
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.itemstack
2+
3+
import com.mojang.serialization.Codec
4+
import org.bukkit.inventory.ItemStack
5+
import java.nio.ByteBuffer
6+
7+
object ItemStackCodec {
8+
val CODEC: Codec<ItemStack> = Codec.BYTE_BUFFER
9+
.xmap(
10+
{ buffer ->
11+
val bytes = ByteArray(buffer.remaining())
12+
buffer.get(bytes)
13+
ItemStack.deserializeBytes(bytes)
14+
},
15+
{ itemStack -> ByteBuffer.wrap(itemStack.serializeAsBytes()) }
16+
)
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.itemstack
2+
3+
import kotlinx.serialization.KSerializer
4+
import kotlinx.serialization.builtins.ByteArraySerializer
5+
import kotlinx.serialization.descriptors.SerialDescriptor
6+
import kotlinx.serialization.encoding.Decoder
7+
import kotlinx.serialization.encoding.Encoder
8+
import org.bukkit.inventory.ItemStack
9+
10+
object ItemStackSerializer : KSerializer<ItemStack> {
11+
private val arraySerializer = ByteArraySerializer()
12+
override val descriptor =
13+
SerialDescriptor("surfapi.bukkit.ItemStack", arraySerializer.descriptor)
14+
15+
override fun serialize(
16+
encoder: Encoder,
17+
value: ItemStack,
18+
) {
19+
encoder.encodeSerializableValue(arraySerializer, value.serializeAsBytes())
20+
}
21+
22+
override fun deserialize(decoder: Decoder) =
23+
ItemStack.deserializeBytes(decoder.decodeSerializableValue(arraySerializer))
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.location
2+
3+
import com.mojang.serialization.Codec
4+
import com.mojang.serialization.codecs.RecordCodecBuilder
5+
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
6+
import org.bukkit.Bukkit
7+
import org.bukkit.Location
8+
9+
object LocationCodec {
10+
val CODEC: Codec<Location> = RecordCodecBuilder.create { instance ->
11+
instance.group(
12+
JavaUUIDCodec.CODEC.optionalFieldOf("worldUuid", null).forGetter { it.world?.uid },
13+
Codec.DOUBLE.fieldOf("x").forGetter(Location::x),
14+
Codec.DOUBLE.fieldOf("y").forGetter(Location::y),
15+
Codec.DOUBLE.fieldOf("z").forGetter(Location::z),
16+
Codec.FLOAT.fieldOf("yaw").forGetter(Location::getYaw),
17+
Codec.FLOAT.fieldOf("pitch").forGetter(Location::getPitch),
18+
).apply(instance) { worldUuid, x, y, z, yaw, pitch ->
19+
val world = worldUuid?.let { Bukkit.getWorld(it) }
20+
21+
Location(world, x, y, z, yaw, pitch)
22+
}
23+
}
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
@file:OptIn(ExperimentalSerializationApi::class)
2+
3+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.location
4+
5+
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDSerializer
6+
import kotlinx.serialization.ExperimentalSerializationApi
7+
import kotlinx.serialization.KSerializer
8+
import kotlinx.serialization.Serializable
9+
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
10+
import kotlinx.serialization.descriptors.element
11+
import kotlinx.serialization.encoding.*
12+
import org.bukkit.Bukkit
13+
import org.bukkit.Location
14+
import java.util.*
15+
16+
typealias SerializableLocation = @Serializable(with = LocationSerializer::class) Location
17+
18+
object LocationSerializer : KSerializer<Location> {
19+
override val descriptor = buildClassSerialDescriptor("surfapi.bukkit.Location") {
20+
element("worldUuid", JavaUUIDSerializer.descriptor, isOptional = true)
21+
element<Double>("x")
22+
element<Double>("y")
23+
element<Double>("z")
24+
element<Float>("yaw")
25+
element<Float>("pitch")
26+
}
27+
28+
override fun serialize(
29+
encoder: Encoder,
30+
value: Location,
31+
) = encoder.encodeStructure(descriptor) {
32+
encodeNullableSerializableElement(descriptor, 0, JavaUUIDSerializer, value.world?.uid)
33+
encodeDoubleElement(descriptor, 1, value.x)
34+
encodeDoubleElement(descriptor, 2, value.y)
35+
encodeDoubleElement(descriptor, 3, value.z)
36+
encodeFloatElement(descriptor, 4, value.yaw)
37+
encodeFloatElement(descriptor, 5, value.pitch)
38+
}
39+
40+
override fun deserialize(decoder: Decoder) = decoder.decodeStructure(descriptor) {
41+
var worldUuid: UUID? = null
42+
var x = 0.0
43+
var y = 0.0
44+
var z = 0.0
45+
var yaw = 0f
46+
var pitch = 0f
47+
48+
if (decodeSequentially()) {
49+
worldUuid = decodeNullableSerializableElement(descriptor, 0, JavaUUIDSerializer)
50+
x = decodeDoubleElement(descriptor, 1)
51+
y = decodeDoubleElement(descriptor, 2)
52+
z = decodeDoubleElement(descriptor, 3)
53+
yaw = decodeFloatElement(descriptor, 4)
54+
pitch = decodeFloatElement(descriptor, 5)
55+
} else while (true) {
56+
when (val index = decodeElementIndex(descriptor)) {
57+
0 -> worldUuid =
58+
decodeNullableSerializableElement(descriptor, 0, JavaUUIDSerializer)
59+
60+
1 -> x = decodeDoubleElement(descriptor, 1)
61+
2 -> y = decodeDoubleElement(descriptor, 2)
62+
3 -> z = decodeDoubleElement(descriptor, 3)
63+
4 -> yaw = decodeFloatElement(descriptor, 4)
64+
5 -> pitch = decodeFloatElement(descriptor, 5)
65+
CompositeDecoder.DECODE_DONE -> break
66+
else -> error("Unexpected index: $index")
67+
}
68+
}
69+
70+
val world = worldUuid?.let { Bukkit.getWorld(it) }
71+
72+
Location(world, x, y, z, yaw, pitch)
73+
}
74+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.offlineplayer
2+
3+
import com.mojang.serialization.Codec
4+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
5+
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
6+
import org.bukkit.OfflinePlayer
7+
8+
object OfflinePlayerCodec {
9+
val CODEC: Codec<OfflinePlayer> = JavaUUIDCodec.CODEC
10+
.xmap(server::getOfflinePlayer, OfflinePlayer::getUniqueId)
11+
}

0 commit comments

Comments
 (0)