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.kt48
1 files changed, 22 insertions, 26 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/AddedData.kt b/src/main/kotlin/io/dico/parcels2/AddedData.kt
index 9835950..a23b36e 100644
--- a/src/main/kotlin/io/dico/parcels2/AddedData.kt
+++ b/src/main/kotlin/io/dico/parcels2/AddedData.kt
@@ -1,7 +1,12 @@
package io.dico.parcels2
+import io.dico.parcels2.AddedStatus.*
import org.bukkit.OfflinePlayer
+enum class AddedStatus {
+ DEFAULT, ALLOWED, BANNED;
+}
+
typealias StatusKey = PlayerProfile.Real
typealias MutableAddedDataMap = MutableMap<StatusKey, AddedStatus>
typealias AddedDataMap = Map<StatusKey, AddedStatus>
@@ -11,20 +16,20 @@ fun MutableAddedDataMap(): MutableAddedDataMap = hashMapOf()
interface AddedData {
val addedMap: AddedDataMap
- var addedStatusOfStar: AddedStatus
+ var statusOfStar: AddedStatus
- fun getAddedStatus(key: StatusKey): AddedStatus
- fun setAddedStatus(key: StatusKey, status: AddedStatus): Boolean
+ fun getStatus(key: StatusKey): AddedStatus
+ fun setStatus(key: StatusKey, status: AddedStatus): Boolean
- fun compareAndSetAddedStatus(key: StatusKey, expect: AddedStatus, status: AddedStatus): Boolean =
- getAddedStatus(key) == expect && setAddedStatus(key, status)
+ fun casStatus(key: StatusKey, expect: AddedStatus, status: AddedStatus): Boolean =
+ getStatus(key) == expect && setStatus(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 isAllowed(key: StatusKey) = getStatus(key) == ALLOWED
+ fun allow(key: StatusKey) = setStatus(key, ALLOWED)
+ fun disallow(key: StatusKey) = casStatus(key, ALLOWED, DEFAULT)
+ fun isBanned(key: StatusKey) = getStatus(key) == BANNED
+ fun ban(key: StatusKey) = setStatus(key, BANNED)
+ fun unban(key: StatusKey) = casStatus(key, BANNED, DEFAULT)
fun isAllowed(player: OfflinePlayer) = isAllowed(player.statusKey)
fun allow(player: OfflinePlayer) = allow(player.statusKey)
@@ -34,29 +39,20 @@ interface AddedData {
fun unban(player: OfflinePlayer) = unban(player.statusKey)
}
-inline val OfflinePlayer.statusKey get() = PlayerProfile.nameless(this)
+inline val OfflinePlayer.statusKey: StatusKey
+ get() = PlayerProfile.nameless(this)
open class AddedDataHolder(override var addedMap: MutableAddedDataMap = MutableAddedDataMap()) : AddedData {
- override var addedStatusOfStar: AddedStatus = AddedStatus.DEFAULT
+ override var statusOfStar: AddedStatus = DEFAULT
- override fun getAddedStatus(key: StatusKey): AddedStatus = addedMap.getOrDefault(key, addedStatusOfStar)
+ override fun getStatus(key: StatusKey): AddedStatus = addedMap.getOrDefault(key, statusOfStar)
- override fun setAddedStatus(key: StatusKey, status: AddedStatus): Boolean {
- return if (status.isDefault) addedMap.remove(key) != null
+ override fun setStatus(key: StatusKey, status: AddedStatus): Boolean {
+ return if (status == DEFAULT) addedMap.remove(key) != null
else addedMap.put(key, status) != status
}
}
-enum class AddedStatus {
- DEFAULT,
- ALLOWED,
- BANNED;
-
- inline val isDefault get() = this == DEFAULT
- inline val isAllowed get() = this == ALLOWED
- inline val isBanned get() = this == BANNED
-}
-
interface GlobalAddedData : AddedData {
val owner: PlayerProfile
}