From c4cea5b92157d4a1ce2e924a3a6087ed1dc88885 Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Fri, 16 Oct 2020 23:46:44 +0200 Subject: [PATCH] Added serializable support --- .../serialization/SpigotSerializable.kt | 27 +++++++++++++++++++ .../serializables/SerializableLocation.kt | 26 ++++++++++++++++++ .../serializables/SerializableVector.kt | 21 +++++++++++++++ 3 files changed, 74 insertions(+) create mode 100644 src/main/kotlin/net/axay/kspigot/serialization/SpigotSerializable.kt create mode 100644 src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableLocation.kt create mode 100644 src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableVector.kt diff --git a/src/main/kotlin/net/axay/kspigot/serialization/SpigotSerializable.kt b/src/main/kotlin/net/axay/kspigot/serialization/SpigotSerializable.kt new file mode 100644 index 00000000..07a58498 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/serialization/SpigotSerializable.kt @@ -0,0 +1,27 @@ +package net.axay.kspigot.serialization + +import net.axay.kspigot.main.ValueHolder + +interface SpigotSerializable { + /** + * Converts this serializable object + * into the corresponding spigot object. + */ + fun toSpigot(): T +} + +interface SpigotSerialzableCompanion + +/** + * @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 SpigotSerialzableCompanion.deserialize(json: String): T + = ValueHolder.getGson(false).fromJson(json, T::class.java) \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableLocation.kt b/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableLocation.kt new file mode 100644 index 00000000..ffcb19df --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableLocation.kt @@ -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 { + + companion object : SpigotSerialzableCompanion + + 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() } + +} \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableVector.kt b/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableVector.kt new file mode 100644 index 00000000..6d874da2 --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/serialization/serializables/SerializableVector.kt @@ -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 { + + companion object : SpigotSerialzableCompanion + + constructor(vec: Vector) : this(vec.x, vec.y, vec.z) + + override fun toSpigot() = Vector(x, y, z) + +} \ No newline at end of file