2016-03-25 28 views
0

我試圖創建一些類似Permissions的插件,但我的問題是我不知道如何給播放器例如權限aplugin.chataplugin.color當我只給他的權限aplugin.*。當然,如果權限已註冊,則不會有任何問題,我可以從Bukkit.getPluginManager().getPermissions()檢查每個權限。如果未註冊,我該如何解決?在BungeeCord有一個事件,我可以看到所需的權限,但在Spigot/Bukkit中?創建權限plugin(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權限模型是基於該插件註冊一個權限,並且該權限有子級。如果你正在爲失蹤的明星製作你自己的系統,一些插件將會出現bug – Ferrybig

+0

好的:/比謝謝:) – Nightfighter001

+0

只有一個問題:對於像PermissionsEx這樣的插件怎麼可能? – Nightfighter001

回答

1

您可以通過重寫創建這個「*」許可權限檢查。 Info(Click me)

PermissionBase是擴展PermissibleBase的類,它覆蓋hasPermission方法。

只需使用線程中的反射將任何玩家的PermissibleBase設置爲允許您覆蓋bukkit的權限檢查。

這將覆蓋bukkit,這意味着所有其他插件將遵循您的PermissionBase(或其他任何名稱)類中的相同規則。

對於'插件。*'>

要創建一個「插件。 '的權限,如果檢查的權限在所述插件中且所述用戶具有權限'插件,則必須獲得所述'插件'的所有權限。'。

這隻會讓用戶訪問所有的插件權限,只要你的系統知道所說的權限是說插件權限,並且用戶有權訪問所有的插件權限('插件。*')允許訪問,不管什麼。

+0

它工作得很好<3我認爲現在我的笑容對我而言太大了; D – Nightfighter001

+0

@ Nightfighter001哦我的也是當我想到這個我自己。沒有人給我一個awnser,我只是喜歡用反思,並提出了一個想法。 _我的臉擴大了,以適應我的微笑; - ; _ – Lightspeed360

+1

@ Nightfighter001我打算做這樣的事情來增加邏輯推動1.9的玩家所以,如果你需要禁用它的跑酷或somthing我已經試圖上來有一個想法。 – Lightspeed360