summaryrefslogtreecommitdiffstats
path: root/Essentials/src/net/ess3/bukkit/PermissionFactory.java
blob: f3e84b54b282bee37b1faa9e03898695ed5e168c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package net.ess3.bukkit;

import java.util.StringTokenizer;
import net.ess3.api.IPermission;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;


public class PermissionFactory
{
	public static String registerParentPermission(String permission)
	{
		final PluginManager pluginManager = Bukkit.getServer().getPluginManager();
		final StringTokenizer tokenizer = new StringTokenizer(permission, ".");
		final StringBuilder builder = new StringBuilder(permission.length());
		Permission parent = null;
		while (tokenizer.hasMoreTokens())
		{
			String part = tokenizer.nextToken();
			if (!tokenizer.hasMoreTokens())
			{
				break;
			}
			builder.append(part).append(".*");
			String permString = builder.toString();
			Permission perm = pluginManager.getPermission(permString);
			if (perm == null)
			{
				perm = new Permission(permString, PermissionDefault.FALSE);
				pluginManager.addPermission(perm);
				if (parent != null)
				{
					parent.getChildren().put(perm.getName(), Boolean.TRUE);
				}
				parent = perm;
				perm.recalculatePermissibles();
			}
			builder.deleteCharAt(builder.length() - 1);
		}
		return parent == null ? null : parent.getName();
	}

	public static boolean checkPermission(CommandSender sender, IPermission perm)
	{
		final String permission = perm.getPermissionName();
		if (sender.isPermissionSet(permission))
		{
			return sender.hasPermission(permission);
		}
		else
		{
			final String parentPermission = perm.getParentPermission();
			if (parentPermission != null && sender.isPermissionSet(parentPermission))
			{
				return sender.hasPermission(parentPermission);
			}
			else
			{
				return perm.getPermissionDefault().getValue(sender.isOp());
			}
		}
	}
}