summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/AddedData.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/AddedData.kt')
-rw-r--r--src/main/kotlin/io/dico/parcels2/AddedData.kt73
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
}