Archived
0

Fix permissions further

This commit is contained in:
Dico
2018-09-26 11:14:33 +01:00
parent e7dcf7ecc9
commit c6c1bbf670
8 changed files with 93 additions and 18 deletions

View File

@@ -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
}
}

View File

@@ -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()