我尝试创建类似于一个小权限插件的内容,但我的问题是我不知道如何给予播放器例如权限aplugin.chat
和aplugin.color
他是权限aplugin.*
。当然,如果注册了Permission并且我可以从Bukkit.getPluginManager().getPermissions()
检查每个权限,那就没问题了。如果没有注册,我该如何解决?在BungeeCord中有一个事件,我可以看到所需的Permission,但是在Spigot / Bukkit中?
以下是我设置权限的最新版本代码:
// setPerms
public static void setPerms(Player p) {
try {
PreparedStatement ps = MySQL.getConnection()
.prepareStatement("SELECT Permission FROM Permissions WHERE Gruppe = ?");
ps.setString(1, User.getPermGroup(p.getName()));
ResultSet rs = ps.executeQuery();
PermissionAttachment pa;
if (main.perms.containsKey(p.getName())) {
pa = main.perms.get(p.getName());
} else {
pa = p.addAttachment(plugin);
}
while (rs.next() == true) {
String perm = rs.getString("Permission");
boolean value = true;
if (perm.startsWith("-")) {
perm = perm.substring(1);
value = false;
}
if (perm.endsWith("*")) {
if (perm.equals("*")) {
for (Permission pe : Bukkit.getPluginManager().getPermissions()) {
pa.setPermission(pe, value);
}
pa.setPermission(perm, value);
} else {
String search = perm.substring(0, perm.length() - 1);
for (Permission pe : Bukkit.getPluginManager().getPermissions()) {
if (pe.getName().startsWith(search)) {
pa.setPermission(pe, value);
}
}
pa.setPermission(perm, value);
}
}
pa.setPermission(perm, value);
}
main.perms.replace(p.getName(), pa);
} catch (SQLException e) {
e.printStackTrace();
}
}
感谢您的帮助,抱歉我的英语不好;)
答案 0 :(得分:1)
你可以创建这个' *'通过覆盖权限检查的权限。 Info(Click me)
PermissionBase是扩展PermissibleBase的类,它覆盖了hasPermission方法。
只需使用线程中的反射将任何玩家的PermissibleBase设置为你的允许你覆盖bukkit的权限检查。
这将覆盖bukkit,这意味着所有其他插件将遵循PermissionBase中的相同规则(或者无论你怎么命名)类。
'插件。*' >
创建一个&#39;插件。&#39;如果被检查的权限在所述插件中并且所述用户具有权限插件,则必须获得所述“插件”的所有权限才允许访问权限。&#39;。< / p>
如果您的系统知道所说的权限是插件权限,并且用户有权访问所有插件权限,那么这只会让用户访问所有插件权限(&#39;插件。*&#39; )无论如何都允许访问。