创建权限插件 (aplugin.*) - Spigot/Bukkit - Java
Create Permissions plugin (aplugin.*) - Spigot/Bukkit - Java
我试图创建类似权限插件的东西,但我的问题是我不知道如何给玩家权限,例如权限 aplugin.chat
和 aplugin.color
当我只给他的许可 aplugin.*
。当然Permission注册了也没问题,我可以查看Bukkit.getPluginManager().getPermissions()
的每一个Permission。没有注册怎么解决?在 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 是您的 class,它扩展了覆盖 hasPermission 方法的 PermissibleBase。
只需使用线程中的反射将任何玩家的 PermissibleBase 设置为您的,即可覆盖 bukkit 的权限检查。
这将覆盖 bukkit,这意味着所有其他插件将遵循您的 PermissionBase(或任何您命名的)中的相同规则class。
For 'plugin.*' >
要创建 'plugin.' 权限,您将必须获得所述“插件”的所有权限,如果检查的权限在所述插件中并且所述用户具有权限 'plugin.'.
仅当您的系统知道该权限是插件权限并且用户有权访问所有插件权限时,这才会简单地授予用户访问所有插件的权限('plugin.*')允许访问否不管怎样
我试图创建类似权限插件的东西,但我的问题是我不知道如何给玩家权限,例如权限 aplugin.chat
和 aplugin.color
当我只给他的许可 aplugin.*
。当然Permission注册了也没问题,我可以查看Bukkit.getPluginManager().getPermissions()
的每一个Permission。没有注册怎么解决?在 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 是您的 class,它扩展了覆盖 hasPermission 方法的 PermissibleBase。
只需使用线程中的反射将任何玩家的 PermissibleBase 设置为您的,即可覆盖 bukkit 的权限检查。
这将覆盖 bukkit,这意味着所有其他插件将遵循您的 PermissionBase(或任何您命名的)中的相同规则class。
For 'plugin.*' >
要创建 'plugin.' 权限,您将必须获得所述“插件”的所有权限,如果检查的权限在所述插件中并且所述用户具有权限 'plugin.'.
仅当您的系统知道该权限是插件权限并且用户有权访问所有插件权限时,这才会简单地授予用户访问所有插件的权限('plugin.*')允许访问否不管怎样