Skip to content

Commit e6f16db

Browse files
committed
feat: enhance block data, item stack, offline player, and player codecs; implement error handling for invalid inputs
1 parent 2af1964 commit e6f16db

File tree

4 files changed

+24
-16
lines changed

4 files changed

+24
-16
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.blockdata
22

33
import com.mojang.serialization.Codec
4-
import org.bukkit.Bukkit
4+
import com.mojang.serialization.DataResult
5+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
56
import org.bukkit.block.data.BlockData
67

78
object BlockDataCodec {
8-
val CODEC: Codec<BlockData> = Codec.STRING.xmap(
9-
{ str -> Bukkit.createBlockData(str) },
10-
{ blockData -> blockData.asString }
11-
)
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)
1216
}

surf-api-bukkit/surf-api-bukkit-api/src/main/kotlin/dev/slne/surf/surfapi/bukkit/api/serializer/bukkit/itemstack/ItemStackCodec.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,6 @@ object ItemStackCodec {
1212
buffer.get(bytes)
1313
ItemStack.deserializeBytes(bytes)
1414
},
15-
{ itemStack -> itemStack.serializeAsBytes().let { ByteBuffer.wrap(it) } }
15+
{ itemStack -> ByteBuffer.wrap(itemStack.serializeAsBytes()) }
1616
)
1717
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.offlineplayer
22

33
import com.mojang.serialization.Codec
4+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
45
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
5-
import org.bukkit.Bukkit
66
import org.bukkit.OfflinePlayer
77

88
object OfflinePlayerCodec {
9-
val CODEC: Codec<OfflinePlayer> = JavaUUIDCodec.CODEC.xmap(
10-
{ uuid -> Bukkit.getOfflinePlayer(uuid) },
11-
{ player -> player.uniqueId }
12-
)
9+
val CODEC: Codec<OfflinePlayer> = JavaUUIDCodec.CODEC
10+
.xmap(server::getOfflinePlayer, OfflinePlayer::getUniqueId)
1311
}
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,19 @@
11
package dev.slne.surf.surfapi.bukkit.api.serializer.bukkit.player
22

33
import com.mojang.serialization.Codec
4+
import com.mojang.serialization.DataResult
5+
import dev.slne.surf.surfapi.bukkit.api.extensions.server
46
import dev.slne.surf.surfapi.core.api.serializer.java.uuid.JavaUUIDCodec
5-
import org.bukkit.Bukkit
67
import org.bukkit.entity.Player
78

89
object PlayerCodec {
9-
val CODEC: Codec<Player> = JavaUUIDCodec.CODEC.xmap(
10-
{ uuid -> Bukkit.getPlayer(uuid) },
11-
{ player -> player.uniqueId }
12-
)
10+
val CODEC: Codec<Player> = JavaUUIDCodec.CODEC.comapFlatMap({ uuid ->
11+
val player = server.getPlayer(uuid)
12+
13+
if (player != null) {
14+
DataResult.success(player)
15+
} else {
16+
DataResult.error { "Player with UUID $uuid is not online" }
17+
}
18+
}, Player::getUniqueId)
1319
}

0 commit comments

Comments
 (0)