Solved Wildcard Permissions Not Working

Discussion in 'Plugin Development' started by CommonSenze, Jun 22, 2018.

Thread Status:
Not open for further replies.
  1. Offline

    CommonSenze

    [FAT EDIT]I ended up solving the issue. It turns out I needed to restart. Also, the child permissions were suppose to be turned to turned to true. But the thing was, even if you turned them on and didn't restart, it wouldn't activate that permission, you turned to true.

    Apologize for this idiotic mistake and hope everyone can learn from my mistake[/FAT EDIT]

    Hello all,

    I've been having this problem for a while and can't seem to solve it.

    Wildcard permissions, for those who don't know, are permissions that end with the star (*) character. (ie. permissions.*) This is meant to give the player who contains this permission all permissions that are under this sub permission section (Well it's suppose to but you can make it give any permissions you want.)

    Now that I'm done explaining let me introduce my problem. I can't seem to make wildcard permissions work for my server. I've made the permissions exactly like how I am suppose to, or I believe I have, but the permission wild cards don't seem to work as I want it to. Here's my Permissions class:
    package me.commonsenze.util.permissions;
    Code:java
    1. import java.util.ArrayList;
    2. import java.util.Collection;
    3. import java.util.HashMap;
    4. import java.util.List;
    5. import java.util.Map.Entry;
    6. import java.util.UUID;
    7.  
    8. import org.bukkit.Bukkit;
    9. import org.bukkit.configuration.ConfigurationSection;
    10. import org.bukkit.entity.Player;
    11. import org.bukkit.permissions.PermissionAttachment;
    12. import org.bukkit.plugin.Plugin;
    13.  
    14. import me.commonsenze.Main;
    15. import me.commonsenze.Player.User;
    16. import me.commonsenze.util.Config;
    17. import me.commonsenze.util.Settings;
    18.  
    19. public class Permissions {
    20.  
    21. private HashMap<String, PermissionAttachment> attachments = new HashMap<String, PermissionAttachment>();
    22. private ArrayList<Group> groups = new ArrayList<Group>();
    23. private Main plugin;
    24. private Config config;
    25. private static Permissions instance = new Permissions();
    26.  
    27.  
    28. public static Permissions getInstance() {
    29. return instance;
    30. }
    31.  
    32. public void register(Main plugin) {
    33. this.plugin = plugin;
    34. config = new Config(Settings.PERMSFILE);
    35. setupGroups();
    36. for (Player p : Bukkit.getOnlinePlayers()) {
    37. loadPlayer(p);
    38. injectPlayer(p);
    39. if (!hasGroup(p.getUniqueId())){
    40. for (Group group : getGroups()) {
    41. if (group.isDefault()) {
    42. setGroup(p.getUniqueId(), group);
    43. }
    44. }
    45. }
    46.  
    47.  
    48. }
    49. }
    50.  
    51. public void reload() {
    52. config = new Config(Settings.PERMSFILE);
    53. setupGroups();
    54. for (Player p : Bukkit.getOnlinePlayers()) {
    55. injectPlayer(p);
    56. if (!hasGroup(p.getUniqueId())){
    57. for (Group group : getGroups()) {
    58. if (group.isDefault()) {
    59. setGroup(p.getUniqueId(), group);
    60. }
    61. }
    62. }
    63. }
    64. }
    65.  
    66. public void loadPlayer(Player p) {
    67. Config config = getFile();
    68. if (!config.getConfig().contains("Users." + p.getUniqueId() + ".Name"))
    69. config.getConfig().set("Users." + p.getUniqueId() + ".Name", p.getName());
    70. if (!config.getConfig().contains("Users." + p.getUniqueId() + ".Permissions"))
    71. config.getConfig().set("Users." + p.getUniqueId() + ".Permissions", new ArrayList<>());
    72. if (!config.getConfig().contains("Users." + p.getUniqueId() + ".Group"))
    73. config.getConfig().set("Users." + p.getUniqueId() + ".Group", "");
    74. config.saveConfig();
    75. }
    76.  
    77. public Config getFile() {
    78. config = new Config(Settings.PERMSFILE);
    79. return config;
    80. }
    81.  
    82. public Plugin getPlugin() {
    83. return plugin;
    84. }
    85.  
    86. public void addPerm(UUID uuid, String perm) {
    87. Config config = getFile();
    88. Player p = Bukkit.getServer().getPlayer(uuid);
    89.  
    90. if (p != null) {
    91. injectPlayer(p);
    92. attachments.get(p.getName()).setPermission(perm, true);
    93. }
    94.  
    95. List<String> perms = getPerms(uuid);
    96. perms.add(perm);
    97. config.getConfig().set("Users." + p.getUniqueId() + ".Permissions", perm);
    98.  
    99. config.saveConfig();
    100. }
    101.  
    102. public void removePerm(UUID uuid, String perm) {
    103. Config config = getFile();
    104. Player p = Bukkit.getServer().getPlayer(uuid);
    105.  
    106. if (p != null) {
    107. injectPlayer(p);
    108. attachments.get(p.getName()).setPermission(perm, false);
    109. }
    110.  
    111. List<String> perms = getPerms(uuid);
    112. perms.remove(perm);
    113. config.getConfig().set("Users." + uuid + ".Permissions", perm);
    114.  
    115. config.saveConfig();
    116. }
    117.  
    118. public void clearPerms(UUID uuid) {
    119. Config config = getFile();
    120. Player p = Bukkit.getServer().getPlayer(uuid);
    121. if (p != null) {
    122. for (String perm : getPerms(uuid)) {
    123. injectPlayer(p);
    124. attachments.get(p.getName()).setPermission(perm, false);
    125. }
    126. }
    127.  
    128. config.getConfig().set("Users." + uuid + ".Permissions", new ArrayList<String>());
    129.  
    130. config.saveConfig();
    131. }
    132.  
    133. public List<String> getPerms(UUID uuid) {
    134. return getFile().getConfig().getStringList("Users." + uuid + ".Permissions");
    135. }
    136.  
    137. public boolean isSaved(String player) {
    138. player = player.toLowerCase();
    139. return getFile().getConfig().contains("Users."+player);
    140. }
    141.  
    142. public ArrayList<User> getStaff(){
    143. ArrayList<User> users = new ArrayList<>();
    144. for (Player player : Bukkit.getOnlinePlayers()) {
    145. if (hasGroup(player.getUniqueId()))
    146. if (getPlayerGroup(player.getUniqueId()).isStaff())users.add(plugin.getUserManager().get(player));
    147. }
    148. return users;
    149. }
    150.  
    151. public void setGroup(String player, String g) {
    152. Config config = getFile();
    153. player = player.toLowerCase();
    154.  
    155. Group group = getGroup(g);
    156. config.getConfig().set("Users." + player + ".Group", group);
    157.  
    158. config.saveConfig();
    159.  
    160. Player p = Bukkit.getServer().getPlayer(player);
    161.  
    162. if (p != null) {
    163. injectPlayer(p);
    164. }
    165. }
    166.  
    167. public void setGroup(UUID uuid, Group group) {
    168. Config config = getFile();
    169. config.getConfig().set("Users." + uuid + ".Group", group.getName());
    170.  
    171. config.saveConfig();
    172.  
    173. Player p = Bukkit.getServer().getPlayer(uuid);
    174.  
    175. if (p != null) {
    176. injectPlayer(p);
    177. }
    178. }
    179.  
    180. public ArrayList<String> getUsers(Group group){
    181. Config config = getFile();
    182. ArrayList<String> users = new ArrayList<>();
    183. for (String id : config.getConfig().getConfigurationSection("Users").getKeys(false)) {
    184. UUID uuid = UUID.fromString(id);
    185. if (hasGroup(uuid)) {
    186. Group g = getGroup(config.getConfig().getString("Users."+uuid+".Group"));
    187. if (g == group)
    188. users.add(config.getConfig().getString("Users."+uuid+".Name"));
    189. }
    190. }
    191. return users;
    192. }
    193.  
    194. public void createGroup(String group) {
    195. Config config = getFile();
    196. config.getConfig().createSection("Group."+group);
    197. ConfigurationSection s = config.getConfig().getConfigurationSection("Group." + group);
    198. s.addDefault("Permissions", new ArrayList<String>());
    199. s.addDefault("Default", false);
    200. s.addDefault("Build", false);
    201. s.addDefault("List Prefix", "");
    202. s.addDefault("Ranking", 0);
    203. s.addDefault("Staff", false);
    204. config.getConfig().options().copyDefaults(true);
    205. config.saveConfig();
    206. setupGroups();
    207. }
    208.  
    209. public void deleteGroup(String group) {
    210. Config config = getFile();
    211. config.getConfig().getConfigurationSection("Group").set(group, null);
    212. config.saveConfig();
    213. setupGroups();
    214. }
    215.  
    216. public void setupGroups() {
    217. groups.clear();
    218.  
    219. Config config = getFile();
    220.  
    221. if (config.getConfig().getConfigurationSection("Group") != null) {
    222. for (String groupName : config.getConfig().getConfigurationSection("Group").getKeys(false)) {
    223. groups.add(new Group(groupName));
    224. }
    225. }
    226. }
    227.  
    228. public void injectPlayer(Player... pl) {
    229. for (Player p : pl) {
    230. if (attachments.get(p.getName()) == null) attachments.put(p.getName(), p.addAttachment(getPlugin()));
    231.  
    232. for (Entry<String, Boolean> perm : attachments.get(p.getName()).getPermissions().entrySet()) {
    233. if (getPerms(p.getUniqueId()).contains(perm.getKey())) attachments.get(p.getName()).setPermission(perm.getKey(), true);
    234. else attachments.get(p.getName()).setPermission(perm.getKey(), false);
    235. }
    236.  
    237. Group group = getPlayerGroup(p.getUniqueId());
    238. if (group != null) {
    239. Bukkit.broadcastMessage(p.getName() + "'s group: " + group.getName());
    240. for (Group g : getGroups()) {
    241. if (g.getRanking() < group.getRanking()) {
    242. for (String perm : g.getPerms()) {
    243. attachments.get(p.getName()).setPermission(perm, true);
    244. Bukkit.broadcastMessage(group.getName() + "'s Permission: " + perm + " for " + p.getName());
    245. }
    246. }
    247. }
    248. for (String perm : group.getPerms()) {
    249. attachments.get(p.getName()).setPermission(perm, true);
    250. Bukkit.broadcastMessage(group.getName() + "'s Permission: " + perm + " for " + p.getName());
    251. }
    252. }
    253. }
    254. }
    255.  
    256. public void injectPlayer(Collection<? extends Player> pl) {
    257. for (Player p : pl) {
    258. getFile().getConfig().set("Users." + p.getUniqueId() + ".Name", p.getName());
    259. if (attachments.get(p.getName()) == null) attachments.put(p.getName(), p.addAttachment(getPlugin()));
    260.  
    261. for (Entry<String, Boolean> perm : attachments.get(p.getName()).getPermissions().entrySet()) {
    262. if (getPerms(p.getUniqueId()).contains(perm.getKey())) attachments.get(p.getName()).setPermission(perm.getKey(), true);
    263. else attachments.get(p.getName()).setPermission(perm.getKey(), false);
    264. }
    265.  
    266. Group group = getPlayerGroup(p.getUniqueId());
    267. if (group != null) {
    268. Bukkit.broadcastMessage(p.getName() + "'s group: " + group.getName());
    269. for (Group g : getGroups()) {
    270. if (g.getRanking() <= group.getRanking()) {
    271. for (String perm : g.getPerms()) {
    272. attachments.get(p.getName()).setPermission(perm, true);
    273. Bukkit.broadcastMessage(group.getName() + "'s Permission: " + perm + " for " + p.getName());
    274. }
    275. }
    276. }
    277. for (String perm : group.getPerms()) {
    278. attachments.get(p.getName()).setPermission(perm, true);
    279. Bukkit.broadcastMessage(group.getName() + "'s Permission: " + perm + " for " + p.getName());
    280. }
    281. }
    282. }
    283. }
    284.  
    285. public void uninjectPlayer(Player pl) {
    286. if (attachments.get(pl.getName()) == null) return;
    287. pl.removeAttachment(attachments.get(pl.getName()));
    288. attachments.remove(pl.getName());
    289. }
    290.  
    291. public Group getGroup(String name) {
    292. for (Group g : groups) {
    293. if (g.getName().equalsIgnoreCase(name)) return g;
    294. }
    295.  
    296. return null;
    297. }
    298.  
    299. public Group getGroup(int ranking) {
    300. for (Group g : groups) {
    301. if (g.getRanking() == ranking) return g;
    302. }
    303.  
    304. return null;
    305. }
    306.  
    307. public Group getPlayerGroup(UUID uuid) {
    308. String name = getFile().getConfig().getString("Users."+uuid+".Group");
    309. for (Group g : groups) {
    310. if (g.getName().equalsIgnoreCase(name)) return g;
    311. }
    312. return null;
    313. }
    314.  
    315. public boolean hasGroup(UUID uuid) {
    316. return getPlayerGroup(uuid)!=null;
    317. }
    318.  
    319. public ConfigurationSection getGroupSection(String name) {
    320. return getFile().getConfig().getConfigurationSection("Group." + name);
    321. }
    322.  
    323. public ArrayList<Group> getGroups(){
    324. return groups;
    325. }
    326.  
    327. public void save() {
    328. getFile().saveConfig();
    329. }
    330. }

    And my plugin.yml file
    Code:
    permissions:
      simple.staff.teleport:
       default: op
      simple.tags.premade:
       default: op
      simple.tags.custom:
       default: op
      simple.staff.gamemode:
        default: op
      simple.chat.color:
        default: op
      simple.chat.clearchat:
        default: op
      simple.chat.broadcast:
        default: op
      simple.staff.regions:
        default: op
      simple.staff.permissions.user.set.rank:
        default: op
      simple.staff.permissions.user.set.info:
        default: op
      simple.staff.permissions.user.view.info:
        default: op
      simple.staff.permissions.user.add:
        default: op
      simple.staff.permissions.user.remove:
        default: op
      simple.staff.permissions.group.create:
        default: op
      simple.staff.permissions.group.delete:
        default: op
      simple.staff.permissions.group.set.info:
        default: op
      simple.staff.permissions.group.view.info:
        default: op
      simple.staff.permissions.group.add:
        default: op
      simple.staff.permissions.group.remove:
        default: op
      simple.staff.permissions.promote:
        default: op
      simple.staff.permissions.demote:
        default: op
      simple.server.reload:
        default: op
      simple.staff.duel:
        default: op
      simple.*:
        children:
          simple.staff.teleport: false
          simple.tags.premade: false
          simple.tags.custom: false
          simple.staff.gamemode: false
          simple.staff.duel: false
          simple.staff.regions: false
          simple.chat.clearchat: false
          simple.chat.broadcast: false
          simple.chat.color: false
          simple.staff.permissions.user.set.rank: false
          simple.staff.permissions.user.set.info: false
          simple.staff.permissions.user.view.info: false
          simple.staff.permissions.user.add: false
          simple.staff.permissions.user.remove: false
          simple.staff.permissions.group.create: false
          simple.staff.permissions.group.delete: false
          simple.staff.permissions.group.set.info: false
          simple.staff.permissions.group.view.info: false
          simple.staff.permissions.group.add: false
          simple.staff.permissions.group.remove: false
          simple.staff.permissions.promote: false
          simple.staff.permissions.demote: false
          simple.server.reload: false
      simple.staff.*:
        children:
          simple.staff.teleport: false
          simple.staff.gamemode: false
          simple.staff.duel: false
          simple.staff.regions: false
          simple.chat.clearchat: false
          simple.chat.broadcast: false
          simple.chat.color: false
          simple.staff.permissions.user.set.rank: false
          simple.staff.permissions.user.set.info: false
          simple.staff.permissions.user.view.info: false
          simple.staff.permissions.user.add: false
          simple.staff.permissions.user.remove: false
          simple.staff.permissions.group.create: false
          simple.staff.permissions.group.delete: false
          simple.staff.permissions.group.set.info: false
          simple.staff.permissions.group.view.info: false
          simple.staff.permissions.group.add: false
          simple.staff.permissions.group.remove: false
          simple.staff.permissions.promote: false
          simple.staff.permissions.demote: false
      simple.chat.*:
        children:
          simple.chat.clearchat: false
          simple.chat.broadcast: false
          simple.chat.color: false
      simple.staff.permissions.*:
        children:
          simple.staff.permissions.user.set.rank: false
          simple.staff.permissions.user.set.info: false
          simple.staff.permissions.user.view.info: false
          simple.staff.permissions.user.add: false
          simple.staff.permissions.user.remove: false
          simple.staff.permissions.group.create: false
          simple.staff.permissions.group.delete: false
          simple.staff.permissions.group.set.info: false
          simple.staff.permissions.group.view.info: false
          simple.staff.permissions.group.add: false
          simple.staff.permissions.group.remove: false
          simple.staff.permissions.promote: false
          simple.staff.permissions.demote: false
      simple.staff.permissions.group.*:
        children:
          simple.staff.permissions.group.create: false
          simple.staff.permissions.group.delete: false
          simple.staff.permissions.group.set.info: false
          simple.staff.permissions.group.view.info: false
          simple.staff.permissions.group.add: false
          simple.staff.permissions.group.remove: false
      simple.staff.permissions.user.*:
        children:
          simple.staff.permissions.user.set.rank: false
          simple.staff.permissions.user.set.info: false
          simple.staff.permissions.user.view.info: false
          simple.staff.permissions.user.add: false
          simple.staff.permissions.user.remove: false
      simple.server.*:
        children:
          simple.server.reload: false
      simple.tag.*:
        children:
          simple.tags.premade: false
          simple.tags.custom: false
    Much help is appreciated! Thanks in advanced :D
     
    Last edited: Jun 22, 2018
Thread Status:
Not open for further replies.

Share This Page