From d9720d90cf6accde2727d9a54bad89e39a5045ca Mon Sep 17 00:00:00 2001 From: bluefireoly Date: Fri, 16 Oct 2020 23:45:46 +0200 Subject: [PATCH] Updated SimpleLocations --- .../extensions/bukkit/LocationExtensions.kt | 11 ++++++ .../extensions/geometry/KSpigotLocations.kt | 38 +++++++++++++------ 2 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 src/main/kotlin/net/axay/kspigot/extensions/bukkit/LocationExtensions.kt diff --git a/src/main/kotlin/net/axay/kspigot/extensions/bukkit/LocationExtensions.kt b/src/main/kotlin/net/axay/kspigot/extensions/bukkit/LocationExtensions.kt new file mode 100644 index 00000000..5f514cbd --- /dev/null +++ b/src/main/kotlin/net/axay/kspigot/extensions/bukkit/LocationExtensions.kt @@ -0,0 +1,11 @@ +package net.axay.kspigot.extensions.bukkit + +import org.bukkit.Location +import org.bukkit.World + +/** + * Assumes that this Location has world data. + * If not, an exception will be thrown. + */ +val Location.worldOrException: World get() = world + ?: throw NullPointerException("The world of the location is null!") \ No newline at end of file diff --git a/src/main/kotlin/net/axay/kspigot/extensions/geometry/KSpigotLocations.kt b/src/main/kotlin/net/axay/kspigot/extensions/geometry/KSpigotLocations.kt index de8ab786..bbce6135 100644 --- a/src/main/kotlin/net/axay/kspigot/extensions/geometry/KSpigotLocations.kt +++ b/src/main/kotlin/net/axay/kspigot/extensions/geometry/KSpigotLocations.kt @@ -7,28 +7,42 @@ import org.bukkit.Location import org.bukkit.World import org.bukkit.util.Vector -data class SimpleLocation2D(val x: Double, val y: Double) { - constructor(x: Number, y: Number) : this(x.toDouble(), y.toDouble()) +data class SimpleLocation2D( + val x: Double, + val y: Double +) { + constructor(x: Number, y: Number) + : this(x.toDouble(), y.toDouble()) } -data class SimpleLocation3D(val x: Double, val y: Double, val z: Double) { - constructor(x: Number, y: Number, z: Number) : this(x.toDouble(), y.toDouble(), z.toDouble()) - val chunk: SimpleChunkLocation get() = SimpleChunkLocation(x.toInt() shr 4, z.toInt() shr 4) +data class SimpleLocation3D( + val x: Double, + val y: Double, + val z: Double, + val direction: Vector = vec(0, 0, 0) +) { + + constructor(x: Number, y: Number, z: Number) + : this(x.toDouble(), y.toDouble(), z.toDouble()) + + val chunk: SimpleChunkLocation + get() = SimpleChunkLocation(x.toInt() shr 4, z.toInt() shr 4) + } -data class SimpleChunkLocation(val x: Int, val z: Int) +data class SimpleChunkLocation( + val x: Int, + val z: Int +) // CONVERTER fun Location.toSimple() = SimpleLocation3D(x, y, z) fun Chunk.toSimple() = SimpleChunkLocation(x, z) -fun Vector.toSimpleLoc() = SimpleLocation3D(x, y, z) -fun SimpleLocation3D.withWorld(world: World) = Location(world, x, y, z) +fun SimpleLocation3D.withWorld(world: World) = Location(world, x, y, z).apply { direction = this@withWorld.direction } fun SimpleChunkLocation.withWorld(world: World) = world.getChunkAt(x, z) -fun SimpleLocation3D.toVector() = Vector(x, y, z) +fun Vector.toSimpleLoc() = SimpleLocation3D(x, y, z) -// EXTENSIONS - -val Location.worldOrException: World get() = world ?: throw NullPointerException("The world of the location is null!") \ No newline at end of file +fun SimpleLocation3D.toVector() = Vector(x, y, z) \ No newline at end of file