2016-03-25 10 views
0

小さなPermissionsプラグインのようなものを作成しようとしましたが、私の問題はPlayerを与える方法がわかりませんaplugin.chataplugin.color私は彼に許可を与えるときにaplugin.*。もちろん、パーミッションが登録されていれば、すべてのパーミッションをBukkit.getPluginManager().getPermissions()からチェックできます。登録されていないとどうすれば解決できますか? BungeeCordにはSpigot/Bukkitで必要なPermissionを見ることができるイベントがありますか?ここで権限の作成プラグイン(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

OK:/ありがとうございます:) – Nightfighter001

+0

もう1つ質問:PermissionsExのようなプラグインはどうしたらできますか? – Nightfighter001

答えて

1

あなたがオーバーライドすることで、この「*」権限を作成することができます許可チェック。 Info(Click me)

PermissionBaseは、hasPermissionメソッドをオーバーライドするPermissibleBaseを継承するクラスです。

スレッドのリフレクションを使用して、プレーヤーのPermissibleBaseを自分のものに設定するだけで、バケットの権限チェックを無効にすることができます。

これは、他のすべてのプラグインがあなたのPermissionBase(または名前をつけて何でも)クラスの同じルールに従うことを意味するbukkitを上書きします。については

'プラグイン。*'>

「プラグインを作成します。 'の許可を得るには、チェックされた権限が前記プラグインに含まれていて、かつ前記ユーザーに許可のプラグインがある場合にのみ、'プラグイン ' '。

これは、あなたのシステムが上記プラグインのアクセス権を持っていることを知っていて、ユーザーがすべてのプラグインにアクセスできる場合のみ、すべてのプラグインのアクセス権をユーザに与えます。permission( 'plugin。*')何。

+0

これはとてもうまくいっています3私の笑顔は私の顔には大きすぎますD – Nightfighter001

+0

@ Nightfighter001ああ、私自身。誰も私に反射を使用してアイデアを思いついたような私を与えました。 _私の顔は私の笑顔に合うように拡張されました; - ; – Lightspeed360

+1

@ Nightfighter001 1.9を押しているプレーヤーにロジックを追加するために、このようなことをするつもりです。だから、パーカーのためにそれを無効にする必要があれば、アイデアをもって – Lightspeed360

関連する問題