summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/defaultimpl/GlobalPrivilegesManagerImpl.kt
blob: 769cee6a7e7b417c639bd1dbc224063876c235cf (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)
            }
        }
    }

}