我试图创建一个类似于一个小权限插件的东西,但我的问题是,当我只给一个播放器权限aplugin.chat和aplugin.color时,我不知道如何给他权限aplugin.*。当然,如果注册了该权限,并且我可以检查来自Bukkit.getPluginManager().getPermissions()的每个权限,这是没有问题的。如果它没有注册,我如何解决它?在BungeeCord中有一个事件,我可以在那里看到所需的权限,但在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();
}
}谢谢你的帮助,为我糟糕的英语感到抱歉;)
发布于 2016-04-02 21:45:52
您可以通过重写权限检查来创建此“*”权限。信息(点击我)
PermissionBase是您的类,它扩展了覆盖hasPermission方法的PermissibleBase。
只需使用线程中的反射将任何玩家的PermissibleBase设置为您的,允许您重写bukkit的权限检查。
这将覆盖bukkit,这意味着所有其他插件都将遵循您的PermissionBase(或您命名的)类中的相同规则。
For 'plugin.*' >
若要创建“plugin.‘”,请执行以下操作。您必须获得所有的权限,只有当检查的权限在上述插件中,并且用户有权限‘插件’时,才能访问该插件。
这只会让用户访问所有插件权限,只有当您的系统知道所述权限是所谓的插件权限,并且如果用户有权访问所有插件权限(“plugin.*”),则无论如何都允许访问。
https://stackoverflow.com/questions/36227822
复制相似问题