2016-03-25 2 views
0

Я попытался создать что-то вроде плагина Permissions, но моя проблема в том, что я не знаю, как дать игроку, например, разрешения aplugin.chat и aplugin.color когда я только даю ему разрешение aplugin.*. Конечно, это не проблема, если разрешение зарегистрировано, и я могу проверить каждое разрешение от Bukkit.getPluginManager().getPermissions(). Как я могу его решить, если он не зарегистрирован? В BungeeCord есть Событие, где я могу видеть требуемое разрешение, но в Spigot/Bukkit?Создать плагин разрешений (aplugin. *) - Spigot/Bukkit - Java

Вот моя новая версия кода для установки прав:

// 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(); 
    } 
} 

Благодарим Вас за помощь и извините за мой плохой английский;)

+1

Вы не можете решить эту проблему, модель разрешения на использование bukkits основана на том, что плагины регистрируют разрешение и что у этого разрешения есть дети. Если вы создаете свою собственную систему для пропавшей звезды, некоторые плагины будут ошибаться – Ferrybig

+0

Хорошо:/Than thank you :) – Nightfighter001

+0

Только еще один вопрос: как это возможно для плагинов, таких как PermissionsEx? – Nightfighter001

ответ

1

Вы можете создать этот «*» разрешение на переопределение проверки разрешений. Info(Click me)

PermissionBase - это ваш класс, который расширяет PermabledBase, который переопределяет методы hasPermission.

Просто используйте отражение в потоке, чтобы установить допустимую базу для любого игрока, чтобы вы могли переопределить проверки разрешений bukkit.

Это будет переопределять bukkit, что означает, что все другие плагины будут следовать тем же правилам в вашем классе PermissionBase (или как его назвать).

Для'плагин. *>

Чтобы создать «плагин. 'вам нужно будет получить все разрешения от упомянутого «плагина», разрешающего доступ, если проверенное разрешение находится в указанном плагине, а у пользователя есть разрешение ». '.

Это просто даст пользователю доступ ко всем разрешениям плагинов ТОЛЬКО, если ваша система знает, что указанное разрешение называется разрешением плагинов, и если у пользователя есть доступ ко всем разрешениям плагинов («плагин. *»), Разрешите доступ независимо от того, какие.

+0

Он работает очень хорошо <3 Я думаю, что теперь моя улыбка слишком большая для моего лица; D – Nightfighter001

+0

@ Nightfighter001 О, мое тоже было, когда я понял это вне себя. Никто не дал мне awnser Мне просто нравится использовать рефлексию и придумал идею. _My лицо расширено только для того, чтобы соответствовать моей улыбке; -; _ – Lightspeed360

+1

@ Nightfighter001 Я планирую сделать что-то вроде этого, чтобы добавить логику к игроку, нажав в 1.9. Так что если вам когда-нибудь понадобится отключить его для паркура или что-то еще, я уже пытаюсь подойти с идеей. – Lightspeed360

Смежные вопросы