summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/Parcel.kt
diff options
context:
space:
mode:
authorDico200 <dico.karssiens@gmail.com>2018-07-22 07:12:53 +0200
committerDico200 <dico.karssiens@gmail.com>2018-07-22 07:12:53 +0200
commit9f81a74bd9e89541448bf79d73d0b9bc297e72ee (patch)
treed32eb5e641bf8f81c172d866fdf05d22018c08ba /src/main/kotlin/io/dico/parcels2/Parcel.kt
parentdbcc90ac8a938e9098dc93206f061cc2a4765ad6 (diff)
port RedstonerPlots a bit
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/Parcel.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/Parcel.kt31
1 files changed, 25 insertions, 6 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/Parcel.kt b/src/main/kotlin/io/dico/parcels2/Parcel.kt
index 6fd8cf3..0ec2c0b 100644
--- a/src/main/kotlin/io/dico/parcels2/Parcel.kt
+++ b/src/main/kotlin/io/dico/parcels2/Parcel.kt
@@ -2,6 +2,7 @@ package io.dico.parcels2
import io.dico.parcels2.math.Vec2i
import io.dico.parcels2.util.getPlayerName
+import io.dico.parcels2.util.hasBuildAnywhere
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import java.util.*
@@ -10,13 +11,29 @@ class Parcel(val world: ParcelWorld,
val pos: Vec2i,
var data: ParcelData = ParcelData()) {
-
+ val id get() = "${pos.x}:${pos.z}"
}
class ParcelData {
- val owner: ParcelOwner? = null
- val added = mutableMapOf<UUID, Boolean>()
+ private val added = mutableMapOf<UUID, AddedStatus>()
+ var owner: ParcelOwner? = null
+
+ fun setAddedStatus(uuid: UUID): AddedStatus = added.getOrDefault(uuid, AddedStatus.DEFAULT)
+ fun setAddedStatus(uuid: UUID, state: AddedStatus) = state.takeIf { it != AddedStatus.DEFAULT }?.let { added[uuid] = it }
+ ?: added.remove(uuid)
+
+ fun isBanned(uuid: UUID) = setAddedStatus(uuid) == AddedStatus.BANNED
+ fun isAllowed(uuid: UUID) = setAddedStatus(uuid) == AddedStatus.ALLOWED
+ fun canBuild(player: Player) = isAllowed(player.uniqueId)
+ || owner?.matches(player, allowNameMatch = false) ?: false
+ || player.hasBuildAnywhere
+}
+
+enum class AddedStatus {
+ DEFAULT,
+ ALLOWED,
+ BANNED
}
data class ParcelOwner(val uuid: UUID? = null,
@@ -29,11 +46,13 @@ data class ParcelOwner(val uuid: UUID? = null,
val playerName get() = getPlayerName(uuid, name)
@Suppress("DEPRECATION")
- val offlinePlayer get() = (uuid?.let { Bukkit.getOfflinePlayer(it) } ?: Bukkit.getOfflinePlayer(name))
- ?.takeIf { it.isOnline() || it.hasPlayedBefore() }
+ val offlinePlayer
+ get() = (uuid?.let { Bukkit.getOfflinePlayer(it) } ?: Bukkit.getOfflinePlayer(name))
+ ?.takeIf { it.isOnline() || it.hasPlayedBefore() }
fun matches(player: Player, allowNameMatch: Boolean = false): Boolean {
- return player.uniqueId == uuid || (allowNameMatch && player.name == name)
+ return uuid?.let { it == player.uniqueId } ?: false
+ || (allowNameMatch && name?.let { it == player.name } ?: false)
}
} \ No newline at end of file