PermissionManager.java 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. package me.km.permissions;
  2. import java.util.ArrayList;
  3. import java.util.EnumSet;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.UUID;
  7. import me.km.KajetansMod;
  8. import me.km.api.Module;
  9. import net.minecraft.command.ICommandSender;
  10. import net.minecraft.entity.player.EntityPlayer;
  11. import net.minecraft.server.MinecraftServer;
  12. import net.minecraft.util.text.TextFormatting;
  13. public class PermissionManager extends Module
  14. {
  15. private final HashMap<UUID, ArrayList<Integer>> playerGroups;
  16. private final ArrayList<EnumSet<Permissions>> enumGroupPerms;
  17. private final ArrayList<HashSet<String>> stringGroupPerms;
  18. public PermissionManager(String mname, String prefix, TextFormatting color)
  19. {
  20. super(mname, prefix, color);
  21. playerGroups = new HashMap<>();
  22. enumGroupPerms = new ArrayList<>();
  23. stringGroupPerms = new ArrayList<>();
  24. }
  25. public void clear()
  26. {
  27. playerGroups.clear();
  28. enumGroupPerms.clear();
  29. stringGroupPerms.clear();
  30. }
  31. // -----------------------------------------------------------------------------------
  32. // Permission-Check
  33. // -----------------------------------------------------------------------------------
  34. public boolean has(ICommandSender cs, Permissions perm)
  35. {
  36. if(KajetansMod.debugMode)
  37. {
  38. return true;
  39. }
  40. if(cs instanceof EntityPlayer)
  41. {
  42. ArrayList<Integer> groups = playerGroups.get(((EntityPlayer) cs).getUniqueID());
  43. if(groups == null)
  44. {
  45. //falling back to default group
  46. if(!enumGroupPerms.isEmpty())
  47. {
  48. return enumGroupPerms.get(0).contains(perm);
  49. }
  50. else
  51. {
  52. return false;
  53. }
  54. }
  55. // check for valid group id takes place at the registry
  56. return groups.stream().anyMatch(i -> enumGroupPerms.get(i).contains(perm));
  57. }
  58. return cs instanceof MinecraftServer;
  59. }
  60. public boolean has(ICommandSender cs, String perm)
  61. {
  62. if(KajetansMod.debugMode)
  63. {
  64. return true;
  65. }
  66. if(cs instanceof EntityPlayer)
  67. {
  68. ArrayList<Integer> groups = playerGroups.get(((EntityPlayer) cs).getUniqueID());
  69. if(groups == null)
  70. {
  71. //falling back to default group
  72. if(!stringGroupPerms.isEmpty())
  73. {
  74. return stringGroupPerms.get(0).contains(perm);
  75. }
  76. else
  77. {
  78. return false;
  79. }
  80. }
  81. // check for valid group id is done at the registry
  82. return groups.stream().anyMatch(i -> stringGroupPerms.get(i).contains(perm));
  83. }
  84. return cs instanceof MinecraftServer;
  85. }
  86. // -----------------------------------------------------------------------------------
  87. // Permission-Registry
  88. // -----------------------------------------------------------------------------------
  89. public void registerPlayerGroup(UUID uuid, int id)
  90. {
  91. if(id < 0 || id >= stringGroupPerms.size())
  92. {
  93. throw new IllegalArgumentException("'" + id + "' is no valid group id");
  94. }
  95. ArrayList<Integer> groups = playerGroups.get(uuid);
  96. if(groups == null)
  97. {
  98. groups = new ArrayList<>();
  99. // adding default group
  100. groups.add(0);
  101. playerGroups.put(uuid, groups);
  102. }
  103. groups.add(id);
  104. }
  105. public void registerGroupPermission(int id, String perm)
  106. {
  107. if(perm.isEmpty())
  108. {
  109. throw new IllegalArgumentException("empty permission string");
  110. }
  111. else if(Character.isUpperCase(perm.charAt(0)))
  112. {
  113. // guess it's an enum ...
  114. Permissions permission = Permissions.valueOf(perm);
  115. if(id >= enumGroupPerms.size())
  116. {
  117. EnumSet<Permissions> set = EnumSet.of(permission);
  118. enumGroupPerms.add(set);
  119. // keep other permissions at same id level
  120. stringGroupPerms.add(new HashSet<>());
  121. return;
  122. }
  123. enumGroupPerms.get(id).add(permission);
  124. }
  125. else
  126. {
  127. // just a string ...
  128. if(id >= stringGroupPerms.size())
  129. {
  130. HashSet<String> set = new HashSet<>();
  131. set.add(perm);
  132. stringGroupPerms.add(set);
  133. // keep other permissions at same id level
  134. enumGroupPerms.add(EnumSet.noneOf(Permissions.class));
  135. return;
  136. }
  137. stringGroupPerms.get(id).add(perm);
  138. }
  139. }
  140. }