Added serializable support

This commit is contained in:
bluefireoly
2020-10-16 23:46:44 +02:00
parent 71ff0d47f8
commit c4cea5b921
3 changed files with 74 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
package net.axay.kspigot.serialization
import net.axay.kspigot.main.ValueHolder
interface SpigotSerializable<T> {
/**
* Converts this serializable object
* into the corresponding spigot object.
*/
fun toSpigot(): T
}
interface SpigotSerialzableCompanion<T>
/**
* @return A json string.
*/
fun SpigotSerializable<*>.serialize(pretty: Boolean = true): String
= ValueHolder.getGson(pretty).toJson(this)
/**
* Deserializes the given json string and
* returns the deserialized object.
*/
@Suppress("unused")
inline fun <reified T> SpigotSerialzableCompanion<T>.deserialize(json: String): T
= ValueHolder.getGson(false).fromJson(json, T::class.java)

View File

@@ -0,0 +1,26 @@
@file:Suppress("MemberVisibilityCanBePrivate")
package net.axay.kspigot.serialization.serializables
import net.axay.kspigot.serialization.SpigotSerializable
import net.axay.kspigot.serialization.SpigotSerialzableCompanion
import org.bukkit.Bukkit
import org.bukkit.Location
class SerializableLocation(
val world: String?,
val x: Double,
val y: Double,
val z: Double,
val direction: SerializableVector
) : SpigotSerializable<Location> {
companion object : SpigotSerialzableCompanion<SerializableLocation>
constructor(loc: Location) : this(loc.world?.name, loc.x, loc.y, loc.z, SerializableVector(loc.direction))
override fun toSpigot()
= Location(world?.let { Bukkit.getWorld(world) }, x, y, z)
.apply { direction = this@SerializableLocation.direction.toSpigot() }
}

View File

@@ -0,0 +1,21 @@
@file:Suppress("MemberVisibilityCanBePrivate")
package net.axay.kspigot.serialization.serializables
import net.axay.kspigot.serialization.SpigotSerializable
import net.axay.kspigot.serialization.SpigotSerialzableCompanion
import org.bukkit.util.Vector
class SerializableVector(
val x: Double,
val y: Double,
val z: Double
) : SpigotSerializable<Vector> {
companion object : SpigotSerialzableCompanion<SerializableVector>
constructor(vec: Vector) : this(vec.x, vec.y, vec.z)
override fun toSpigot() = Vector(x, y, z)
}