diff options
Diffstat (limited to 'src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt b/src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt new file mode 100644 index 0000000..1bd42e8 --- /dev/null +++ b/src/main/kotlin/io/dico/parcels2/command/CommandsAdminPrivilegesGlobal.kt @@ -0,0 +1,110 @@ +@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" + } + +}
\ No newline at end of file |