summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/defaultimpl/GlobalPrivilegesManagerImpl.kt
blob: 670dd9463d5c0687e1530c3a305aa961d24d565d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
@file:Suppress("UNCHECKED_CAST")

package io.dico.parcels2.defaultimpl

import io.dico.parcels2.*
import io.dico.parcels2.util.ext.alsoIfTrue
import java.util.Collections

class GlobalPrivilegesManagerImpl(val plugin: ParcelsPlugin) : GlobalPrivilegesManager {
    private val map = mutableMapOf<PlayerProfile, GlobalPrivileges>()

    override fun get(owner: PlayerProfile.Real): GlobalPrivileges {
        return map[owner] ?: GlobalPrivilegesImpl(owner).also { map[owner] = it }
    }

    private inner class GlobalPrivilegesImpl(override val keyOfOwner: PlayerProfile.Real) : PrivilegesHolder(), GlobalPrivileges {
        override var privilegeOfStar: Privilege
            get() = super<GlobalPrivileges>.privilegeOfStar
            set(value) = run { super<GlobalPrivileges>.privilegeOfStar = value }

        override fun setRawStoredPrivilege(key: PrivilegeKey, privilege: Privilege): Boolean {
            return super.setRawStoredPrivilege(key, privilege).alsoIfTrue {
                plugin.storage.setGlobalPrivilege(keyOfOwner, key, privilege)
            }
        }
    }

}