summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDico <dico.karssiens@gmail.com>2018-09-26 11:14:33 +0100
committerDico <dico.karssiens@gmail.com>2018-09-26 11:14:33 +0100
commitc6c1bbf6701eb407eb72bc6cd04af7c1dadc5d8e (patch)
treed031d2c59bb39ce1f2759a4e22a8d4e549bc7430 /src
parente7dcf7ecc9d448e3a07ef22843ef058d72dcb225 (diff)
Fix permissions further
Diffstat (limited to 'src')
-rw-r--r--src/main/kotlin/io/dico/parcels2/command/CommandsDebug.kt48
-rw-r--r--src/main/kotlin/io/dico/parcels2/command/ParcelCommandBuilder.kt4
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()