139 lines
5.2 KiB
Java
139 lines
5.2 KiB
Java
package tc.oc.commons.bukkit.commands;
|
|
|
|
import com.sk89q.minecraft.util.commands.Command;
|
|
import com.sk89q.minecraft.util.commands.CommandContext;
|
|
import com.sk89q.minecraft.util.commands.CommandException;
|
|
import com.sk89q.minecraft.util.commands.CommandPermissions;
|
|
import com.sk89q.minecraft.util.commands.NestedCommand;
|
|
import org.bukkit.ChatColor;
|
|
import org.bukkit.command.CommandSender;
|
|
import org.bukkit.permissions.Permission;
|
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
|
import org.bukkit.plugin.PluginManager;
|
|
import tc.oc.api.util.Permissions;
|
|
import tc.oc.commons.core.commands.Commands;
|
|
import tc.oc.commons.core.commands.NestedCommands;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.Comparator;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
public class PermissionCommands implements NestedCommands {
|
|
public static class Parent implements Commands {
|
|
@Command(
|
|
aliases = {"permission", "perm"},
|
|
desc = "Commands to query permissions",
|
|
min = 1,
|
|
max = -1
|
|
)
|
|
@NestedCommand({PermissionCommands.class})
|
|
@CommandPermissions(Permissions.DEVELOPER)
|
|
public void perm() {
|
|
}
|
|
}
|
|
|
|
void sendPermissionInfo(String name, CommandSender sender) {
|
|
PluginManager pm = sender.getServer().getPluginManager();
|
|
Permission permission = pm.getPermission(name);
|
|
|
|
if(permission == null) {
|
|
sender.sendMessage(ChatColor.RED + "Permission " + name + " is unregistered");
|
|
} else {
|
|
sender.sendMessage(ChatColor.GOLD + "Permission " + ChatColor.WHITE + permission.getName());
|
|
sender.sendMessage(ChatColor.WHITE.toString() + ChatColor.ITALIC + permission.getDescription());
|
|
sender.sendMessage(ChatColor.GOLD + "Default: " + ChatColor.WHITE + permission.getDefault());
|
|
|
|
boolean first = true;
|
|
for(Permission parent : pm.getPermissions()) {
|
|
Boolean value = parent.getChildren().get(permission.getName());
|
|
if(value != null) {
|
|
if(first) {
|
|
first = false;
|
|
sender.sendMessage(ChatColor.GOLD + "Parents:");
|
|
}
|
|
|
|
if(value) {
|
|
sender.sendMessage(ChatColor.GREEN + " +" + parent.getName());
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + " -" + parent.getName());
|
|
}
|
|
}
|
|
}
|
|
|
|
first = true;
|
|
for(Map.Entry<String, Boolean> child : permission.getChildren().entrySet()) {
|
|
if(first) {
|
|
first = false;
|
|
sender.sendMessage(ChatColor.GOLD + "Children:");
|
|
}
|
|
|
|
if(child.getValue()) {
|
|
sender.sendMessage(ChatColor.GREEN + " +" + child.getKey());
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + " -" + child.getKey());
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
aliases = {"info"},
|
|
desc = "Get detailed info about a permission",
|
|
usage = "<permission>",
|
|
min = 1,
|
|
max = 1
|
|
)
|
|
public void info(CommandContext args, CommandSender sender) throws CommandException {
|
|
sendPermissionInfo(args.getString(0), sender);
|
|
}
|
|
|
|
@Command(
|
|
aliases = {"test"},
|
|
desc = "Test for a specific permission",
|
|
usage = "<permission> [player]",
|
|
min = 1,
|
|
max = 2
|
|
)
|
|
public void test(CommandContext args, CommandSender sender) throws CommandException {
|
|
CommandSender player = CommandUtils.getCommandSenderOrSelf(args, sender, 1);
|
|
String perm = args.getString(0);
|
|
if(player.hasPermission(perm)) {
|
|
sender.sendMessage(ChatColor.GREEN + player.getName() + " has permission " + perm);
|
|
} else {
|
|
sender.sendMessage(ChatColor.RED + player.getName() + " does NOT have permission " + perm);
|
|
}
|
|
}
|
|
|
|
@Command(
|
|
aliases = {"list"},
|
|
desc = "List all permissions",
|
|
usage = "[player] [prefix]",
|
|
min = 0,
|
|
max = 2
|
|
)
|
|
public void list(CommandContext args, CommandSender sender) throws CommandException {
|
|
CommandSender player = CommandUtils.getCommandSenderOrSelf(args, sender, 0);
|
|
String prefix = args.getString(1, "");
|
|
|
|
sender.sendMessage(ChatColor.WHITE + "Permissions for " + player.getName() + ":");
|
|
|
|
List<PermissionAttachmentInfo> perms = new ArrayList<>(player.getEffectivePermissions());
|
|
Collections.sort(perms, new Comparator<PermissionAttachmentInfo>() {
|
|
@Override
|
|
public int compare(PermissionAttachmentInfo a, PermissionAttachmentInfo b) {
|
|
return a.getPermission().compareTo(b.getPermission());
|
|
}
|
|
});
|
|
|
|
for(PermissionAttachmentInfo perm : perms) {
|
|
if(perm.getPermission().startsWith(prefix)) {
|
|
sender.sendMessage((perm.getValue() ? ChatColor.GREEN : ChatColor.RED) +
|
|
" " + perm.getPermission() +
|
|
(perm.getAttachment() == null ? "" : " (" + perm.getAttachment().getPlugin().getName() + ")"));
|
|
}
|
|
}
|
|
}
|
|
}
|