diff options
author | Dico <dico.karssiens@gmail.com> | 2018-09-26 11:14:33 +0100 |
---|---|---|
committer | Dico <dico.karssiens@gmail.com> | 2018-09-26 11:14:33 +0100 |
commit | c6c1bbf6701eb407eb72bc6cd04af7c1dadc5d8e (patch) | |
tree | d031d2c59bb39ce1f2759a4e22a8d4e549bc7430 /src | |
parent | e7dcf7ecc9d448e3a07ef22843ef058d72dcb225 (diff) |
Fix permissions further
Diffstat (limited to 'src')
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt | 48 | ||||
-rw-r--r-- | src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt | 4 |
2 files changed, 46 insertions, 6 deletions
diff --git a/src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt b/src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt index 60518af..b3b632f 100644 --- a/src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt +++ b/src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt @@ -1,10 +1,10 @@ package io.dico.parcels2.command -import io.dico.dicore.command.CommandException -import io.dico.dicore.command.EMessageType -import io.dico.dicore.command.ExecutionContext -import io.dico.dicore.command.Validate +import io.dico.dicore.command.* +import io.dico.dicore.command.IContextFilter.Priority.* import io.dico.dicore.command.annotation.Cmd +import io.dico.dicore.command.annotation.PreprocessArgs +import io.dico.dicore.command.parameter.ArgumentBuffer import io.dico.parcels2.ParcelsPlugin import io.dico.parcels2.Privilege import io.dico.parcels2.blockvisitor.RegionTraverser @@ -95,4 +95,44 @@ class CommandsDebug(plugin: ParcelsPlugin) : AbstractParcelCommands(plugin) { return target.hasPermission(permission).toString() } + @Cmd("message") + @PreprocessArgs + fun cmdMessage(sender: CommandSender, message: String): Any? { + sender.sendMessage(message) + return null + } + + @Cmd("permissions") + fun cmdPermissions(context: ExecutionContext, vararg address: String): Any? { + val target = context.address.dispatcherForTree.getDeepChild(ArgumentBuffer(address)) + Validate.isTrue(target.depth == address.size && target.hasCommand(), "Not found: /${address.joinToString(separator = " ")}") + + val permissions = getPermissionsOf(target) + return permissions.joinToString(separator = "\n") + } + + private fun getPermissionsOf(address: ICommandAddress, + path: Array<String> = emptyArray(), + result: MutableList<String> = mutableListOf()): List<String> { + val command = address.command ?: return result + + var inherited = false + for (filter in command.contextFilters) { + when (filter) { + is PermissionContextFilter -> { + if (path.isEmpty()) result.add(filter.permission) + else if (filter.isInheritable) result.add(filter.getInheritedPermission(path)) + } + is InheritingContextFilter -> { + if (filter.priority == PERMISSION && address.hasParent() && !inherited) { + inherited = true + getPermissionsOf(address.parent, arrayOf(address.mainKey, *path), result) + } + } + } + } + + return result + } + }
\ No newline at end of file diff --git a/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt b/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt index 7be112d..e7d8663 100644 --- a/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt +++ b/src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt @@ -55,13 +55,13 @@ fun getParcelCommands(plugin: ParcelsPlugin): ICommandDispatcher = CommandBuilde generateHelpAndSyntaxCommands(parcelsAddress) }.getDispatcher() -inline fun CommandBuilder.group(name: String, vararg aliases: String, config: CommandBuilder.() -> Unit) { +private inline fun CommandBuilder.group(name: String, vararg aliases: String, config: CommandBuilder.() -> Unit) { group(name, *aliases) config() parent() } -inline fun CommandBuilder.group(address: ICommandAddress, name: String, vararg aliases: String, config: CommandBuilder.() -> Unit) { +private inline fun CommandBuilder.group(address: ICommandAddress, name: String, vararg aliases: String, config: CommandBuilder.() -> Unit) { group(address, name, *aliases) config() parent() |