diff options
author | Dico200 <dico.karssiens@gmail.com> | 2018-07-22 07:12:53 +0200 |
---|---|---|
committer | Dico200 <dico.karssiens@gmail.com> | 2018-07-22 07:12:53 +0200 |
commit | 9f81a74bd9e89541448bf79d73d0b9bc297e72ee (patch) | |
tree | d32eb5e641bf8f81c172d866fdf05d22018c08ba /src/main/kotlin/io/dico/parcels2/Parcel.kt | |
parent | dbcc90ac8a938e9098dc93206f061cc2a4765ad6 (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.kt | 31 |
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 |