package de.jaschastarke.minecraft.limitedcreative.cmdblocker; import java.util.Collection; import org.bukkit.permissions.PermissionDefault; import de.jaschastarke.maven.ArchiveDocComments; import de.jaschastarke.maven.PluginPermissions; import de.jaschastarke.minecraft.lib.permissions.BasicPermission; import de.jaschastarke.minecraft.lib.permissions.DynamicPermission; import de.jaschastarke.minecraft.lib.permissions.IAbstractPermission; import de.jaschastarke.minecraft.lib.permissions.IDynamicPermission; import de.jaschastarke.minecraft.lib.permissions.IPermission; import de.jaschastarke.minecraft.lib.permissions.SimplePermissionContainerNode; import de.jaschastarke.minecraft.limitedcreative.Permissions; @ArchiveDocComments public class CmdBlockPermissions extends SimplePermissionContainerNode { public CmdBlockPermissions(IAbstractPermission parent, String name) { super(parent, name); } @PluginPermissions public static final SimplePermissionContainerNode CONTAINER = new CmdBlockPermissions(Permissions.CONTAINER, "cmdblock"); /** * Allows bypassing the "command block"-limitation. So no commands are blocked for this users. */ public static final IPermission ALL = new BasicPermission(CONTAINER, "*", PermissionDefault.OP); /** * Allows to bypass specific blockings of commands as it tests against all partial permissions: * * Example: * A Command "/execute a fuzzy command -n 256" is entered by the player which is blocked by the configuration the * following permissions are tested, and if one is present for the user, he is allowed to execute the command: * - limitedcreative.cmdblock.* * - limitedcreative.cmdblock.execute * - limitedcreative.cmdblock.execute.a * - limitedcreative.cmdblock.execute.a.fuzzy * - limitedcreative.cmdblock.execute.a.fuzzy.command * - limitedcreative.cmdblock.execute.a.fuzzy.command.-n * - limitedcreative.cmdblock.execute.a.fuzzy.command.-n.256 */ public static IDynamicPermission COMMAND(String cmd) { return new CommandPermission(ALL, cmd); } public static class CommandPermission extends DynamicPermission { private String cmd; public CommandPermission(IAbstractPermission parent, String cmd) { super(parent); this.cmd = cmd; } @Override protected void buildPermissionsToCheck(Collection<IAbstractPermission> perms) { String[] chunks = cmd.split("\\s+"); String chain = ""; for (String chunk : chunks) { if (chain.length() > 0) chain += IAbstractPermission.SEP; chain += chunk; perms.add(new BasicPermission(CONTAINER, chain)); } } } }