Added serializable support
This commit is contained in:
@@ -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)
|
@@ -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() }
|
||||||
|
|
||||||
|
}
|
@@ -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)
|
||||||
|
|
||||||
|
}
|
Reference in New Issue
Block a user