summaryrefslogtreecommitdiff
path: root/src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt
blob: 541ea87d53e11414de5f41d26c62c99454e5a19b (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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
@file:Suppress("NON_EXHAUSTIVE_WHEN")

package io.dico.parcels2.command

import io.dico.dicore.command.ExecutionContext
import io.dico.dicore.command.Validate
import io.dico.dicore.command.annotation.Cmd
import io.dico.dicore.command.annotation.Desc
import io.dico.parcels2.*
import io.dico.parcels2.PrivilegeChangeResult.*
import io.dico.parcels2.util.ext.PERM_ADMIN_MANAGE
import org.bukkit.OfflinePlayer

class CommandsAdminPrivilegesGlobal(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) {
    private val data
        inline get() = plugin.globalPrivileges

    private fun checkContext(context: ExecutionContext, owner: OfflinePlayer): OfflinePlayer {
        checkConnected("have privileges changed")
        val sender = context.sender
        if (sender !== owner) {
            Validate.isAuthorized(sender, PERM_ADMIN_MANAGE)
        }
        return owner
    }

    @Cmd("entrust")
    @Desc(
        "Allows a player to manage globally",
        shortVersion = "allows a player to manage globally"
    )
    suspend fun cmdEntrust(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].allowManage(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is already allowed to manage globally")
            SUCCESS -> "${player.name} is now allowed to manage globally"
        }

    @Cmd("distrust")
    @Desc(
        "Disallows a player to manage globally,",
        "they will still be able to build",
        shortVersion = "disallows a player to manage globally"
    )
    suspend fun cmdDistrust(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].disallowManage(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is not currently allowed to manage globally")
            SUCCESS -> "${player.name} is not allowed to manage globally anymore"
        }

    @Cmd("allow", aliases = ["add", "permit"])
    @Desc(
        "Globally allows a player to build on all",
        "the parcels that you own.",
        shortVersion = "globally allows a player to build on your parcels"
    )
    suspend fun cmdAllow(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].allowBuild(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is already allowed globally")
            SUCCESS -> "${player.name} is now allowed to build globally"
        }

    @Cmd("disallow", aliases = ["remove", "forbid"])
    @Desc(
        "Globally disallows a player to build on",
        "the parcels that you own.",
        "If the player is allowed to build on specific",
        "parcels, they can still build there.",
        shortVersion = "globally disallows a player to build on your parcels"
    )
    suspend fun cmdDisallow(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].disallowBuild(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is not currently allowed globally")
            SUCCESS -> "${player.name} is not allowed to build globally anymore"
        }

    @Cmd("ban", aliases = ["deny"])
    @Desc(
        "Globally bans a player from all the parcels",
        "that you own, making them unable to enter.",
        shortVersion = "globally bans a player from your parcels"
    )
    suspend fun cmdBan(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].disallowEnter(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is already banned globally")
            SUCCESS -> "${player.name} is now banned globally"
        }

    @Cmd("unban", aliases = ["undeny"])
    @Desc(
        "Globally unbans a player from all the parcels",
        "that you own, they can enter again.",
        "If the player is banned from specific parcels,",
        "they will still be banned there.",
        shortVersion = "globally unbans a player from your parcels"
    )
    suspend fun cmdUnban(context: ExecutionContext, owner: OfflinePlayer, player: PlayerProfile): Any? =
        when (data[checkContext(context, owner)].allowEnter(toPrivilegeKey(player))) {
            FAIL_OWNER -> err("The target cannot be the owner themselves")
            FAIL -> err("${player.name} is not currently banned globally")
            SUCCESS -> "${player.name} is not banned globally anymore"
        }

}