110 lines
4.9 KiB
Kotlin
110 lines
4.9 KiB
Kotlin
@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 io.dico.parcels2.util.ext.hasPermAdminManage
|
|
import org.bukkit.OfflinePlayer
|
|
import org.bukkit.command.CommandSender
|
|
import org.bukkit.entity.Player
|
|
|
|
class CommandsAdminPrivilegesGlobal(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) {
|
|
private val data
|
|
inline get() = plugin.globalPrivileges
|
|
|
|
private fun checkContext(context: ExecutionContext, owner: OfflinePlayer): OfflinePlayer {
|
|
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"
|
|
}
|
|
|
|
} |