diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/AddedData.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/AddedData.kt | 73 |
1 files changed, 41 insertions, 32 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/AddedData.kt b/src/main/kotlin/io/dico/parcels2/AddedData.kt index 633fe72..9249c7f 100644 --- a/src/main/kotlin/io/dico/parcels2/AddedData.kt +++ b/src/main/kotlin/io/dico/parcels2/AddedData.kt @@ -1,41 +1,50 @@ package io.dico.parcels2 -import io.dico.parcels2.util.uuid import org.bukkit.OfflinePlayer -import java.util.UUID -typealias MutableAddedDataMap = MutableMap<UUID, AddedStatus> -typealias AddedDataMap = Map<UUID, AddedStatus> +typealias StatusKey = PlayerProfile.Real +typealias MutableAddedDataMap = MutableMap<StatusKey, AddedStatus> +typealias AddedDataMap = Map<StatusKey, AddedStatus> + +@Suppress("FunctionName") +fun MutableAddedDataMap(): MutableAddedDataMap = hashMapOf() interface AddedData { val addedMap: AddedDataMap + var addedStatusOfStar: AddedStatus + + fun getAddedStatus(key: StatusKey): AddedStatus + fun setAddedStatus(key: StatusKey, status: AddedStatus): Boolean + + fun compareAndSetAddedStatus(key: StatusKey, expect: AddedStatus, status: AddedStatus): Boolean = + (getAddedStatus(key) == expect).also { if (it) setAddedStatus(key, status) } + + fun isAllowed(key: StatusKey) = getAddedStatus(key) == AddedStatus.ALLOWED + fun allow(key: StatusKey) = setAddedStatus(key, AddedStatus.ALLOWED) + fun disallow(key: StatusKey) = compareAndSetAddedStatus(key, AddedStatus.ALLOWED, AddedStatus.DEFAULT) + fun isBanned(key: StatusKey) = getAddedStatus(key) == AddedStatus.BANNED + fun ban(key: StatusKey) = setAddedStatus(key, AddedStatus.BANNED) + fun unban(key: StatusKey) = compareAndSetAddedStatus(key, AddedStatus.BANNED, AddedStatus.DEFAULT) - fun getAddedStatus(uuid: UUID): AddedStatus - fun setAddedStatus(uuid: UUID, status: AddedStatus): Boolean - - fun compareAndSetAddedStatus(uuid: UUID, expect: AddedStatus, status: AddedStatus): Boolean = - (getAddedStatus(uuid) == expect).also { if (it) setAddedStatus(uuid, status) } - - fun isAllowed(uuid: UUID) = getAddedStatus(uuid) == AddedStatus.ALLOWED - fun allow(uuid: UUID) = setAddedStatus(uuid, AddedStatus.ALLOWED) - fun disallow(uuid: UUID) = compareAndSetAddedStatus(uuid, AddedStatus.ALLOWED, AddedStatus.DEFAULT) - fun isBanned(uuid: UUID) = getAddedStatus(uuid) == AddedStatus.BANNED - fun ban(uuid: UUID) = setAddedStatus(uuid, AddedStatus.BANNED) - fun unban(uuid: UUID) = compareAndSetAddedStatus(uuid, AddedStatus.BANNED, AddedStatus.DEFAULT) - - fun isAllowed(player: OfflinePlayer) = isAllowed(player.uuid) - fun allow(player: OfflinePlayer) = allow(player.uuid) - fun disallow(player: OfflinePlayer) = disallow(player.uuid) - fun isBanned(player: OfflinePlayer) = isBanned(player.uuid) - fun ban(player: OfflinePlayer) = ban(player.uuid) - fun unban(player: OfflinePlayer) = unban(player.uuid) + fun isAllowed(player: OfflinePlayer) = isAllowed(player.statusKey) + fun allow(player: OfflinePlayer) = allow(player.statusKey) + fun disallow(player: OfflinePlayer) = disallow(player.statusKey) + fun isBanned(player: OfflinePlayer) = isBanned(player.statusKey) + fun ban(player: OfflinePlayer) = ban(player.statusKey) + fun unban(player: OfflinePlayer) = unban(player.statusKey) } +inline val OfflinePlayer.statusKey get() = PlayerProfile.nameless(this) + open class AddedDataHolder(override var addedMap: MutableAddedDataMap = mutableMapOf()) : AddedData { - override fun getAddedStatus(uuid: UUID): AddedStatus = addedMap.getOrDefault(uuid, AddedStatus.DEFAULT) - override fun setAddedStatus(uuid: UUID, status: AddedStatus): Boolean = status.takeIf { it != AddedStatus.DEFAULT } - ?.let { addedMap.put(uuid, it) != it } - ?: addedMap.remove(uuid) != null + override var addedStatusOfStar: AddedStatus = AddedStatus.DEFAULT + + override fun getAddedStatus(key: StatusKey): AddedStatus = addedMap.getOrDefault(key, addedStatusOfStar) + + override fun setAddedStatus(key: StatusKey, status: AddedStatus): Boolean { + return if (status.isDefault) addedMap.remove(key) != null + else addedMap.put(key, status) != status + } } enum class AddedStatus { @@ -43,15 +52,15 @@ enum class AddedStatus { ALLOWED, BANNED; - val isDefault get() = this == DEFAULT - val isAllowed get() = this == ALLOWED - val isBanned get() = this == BANNED + inline val isDefault get() = this == DEFAULT + inline val isAllowed get() = this == ALLOWED + inline val isBanned get() = this == BANNED } interface GlobalAddedData : AddedData { - val owner: ParcelOwner + val owner: PlayerProfile } interface GlobalAddedDataManager { - operator fun get(owner: ParcelOwner): GlobalAddedData + operator fun get(owner: PlayerProfile): GlobalAddedData } |