我尝试创建一些类似于小权限插件的东西,但我的问题是我不知道如何为播放器提供权限,例如权限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();
}
}
感谢您的帮助,并对我的英语不好表示歉意;)
最佳答案
您可以通过覆盖权限检查来创建此“*”权限。 Info(Click me)
PermissionBase 是扩展 PermissibleBase 的类,它重写了 hasPermission 方法。
只需使用线程中的反射即可将任何玩家的 PermissibleBase 设置为您的 PermissibleBase,从而允许您覆盖 bukkit 的权限检查。
这将覆盖 bukkit,这意味着所有其他插件将在您的 PermissionBase(或任何您命名的)类中遵循相同的规则。
对于 '插件。*'>
要创建“插件”权限。您必须获得该“插件”的所有权限,只有在检查的权限位于该插件中且该用户拥有“插件”权限时才启用访问。” .
仅当您的系统知道所述权限是所述插件权限并且用户有权访问所有插件权限('plugin.*')时,这将简单地授予用户访问所有插件权限的权限('plugin.*')无论如何都允许访问.
关于java - 创建权限插件 (aplugin.*) - Spigot/Bukkit - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36227822/