PermissionManager.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. package me.km.permissions;
  2. import java.util.ArrayList;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.UUID;
  6. import me.kcm.command.ICommandManager;
  7. import me.km.KajetansMod;
  8. import me.km.api.Module;
  9. import me.km.snuviscript.ScriptEvents;
  10. import net.minecraft.command.ICommand;
  11. import net.minecraft.command.ICommandSender;
  12. import net.minecraft.entity.player.EntityPlayer;
  13. import net.minecraft.server.MinecraftServer;
  14. import net.minecraft.util.text.TextComponentString;
  15. import net.minecraft.util.text.TextFormatting;
  16. import net.minecraftforge.fml.relauncher.Side;
  17. import net.minecraftforge.fml.relauncher.SideOnly;
  18. @SideOnly(Side.SERVER)
  19. public class PermissionManager extends Module implements ICommandManager
  20. {
  21. private final HashMap<UUID, ArrayList<Integer>> playerGroups;
  22. private final ArrayList<HashSet<String>> stringGroupPerms;
  23. public PermissionManager(String mname, String prefix, TextFormatting color)
  24. {
  25. super(mname, prefix, color);
  26. playerGroups = new HashMap<>();
  27. stringGroupPerms = new ArrayList<>();
  28. }
  29. public void clear()
  30. {
  31. playerGroups.clear();
  32. stringGroupPerms.clear();
  33. }
  34. // -------------------------------------------------------------------------
  35. // Permission-Check
  36. // -------------------------------------------------------------------------
  37. @Override
  38. public boolean hasPermission(ICommandSender cs, String perm)
  39. {
  40. if(KajetansMod.debugMode)
  41. {
  42. return true;
  43. }
  44. if(cs instanceof EntityPlayer)
  45. {
  46. ArrayList<Integer> groups = playerGroups.get(((EntityPlayer) cs).getUniqueID());
  47. if(groups == null)
  48. {
  49. //falling back to default group
  50. if(!stringGroupPerms.isEmpty())
  51. {
  52. return stringGroupPerms.get(0).contains(perm);
  53. }
  54. else
  55. {
  56. return false;
  57. }
  58. }
  59. // check for valid group id is done at the registry
  60. return groups.stream().anyMatch(i -> stringGroupPerms.get(i).contains(perm));
  61. }
  62. return cs instanceof MinecraftServer;
  63. }
  64. // -------------------------------------------------------------------------
  65. // Permission-Registry
  66. // -------------------------------------------------------------------------
  67. public void registerPlayerGroup(UUID uuid, int id)
  68. {
  69. if(id < 0 || id >= stringGroupPerms.size())
  70. {
  71. throw new IllegalArgumentException("'" + id + "' is no valid group id");
  72. }
  73. ArrayList<Integer> groups = playerGroups.get(uuid);
  74. if(groups == null)
  75. {
  76. groups = new ArrayList<>();
  77. // adding default group
  78. groups.add(0);
  79. playerGroups.put(uuid, groups);
  80. }
  81. groups.add(id);
  82. }
  83. public void registerGroupPermission(int id, String perm)
  84. {
  85. if(perm.isEmpty())
  86. {
  87. throw new IllegalArgumentException("empty permission string");
  88. }
  89. if(id >= stringGroupPerms.size())
  90. {
  91. HashSet<String> set = new HashSet<>();
  92. set.add(perm);
  93. stringGroupPerms.add(set);
  94. return;
  95. }
  96. stringGroupPerms.get(id).add(perm);
  97. }
  98. // -------------------------------------------------------------------------
  99. // command manager
  100. // -------------------------------------------------------------------------
  101. @Override
  102. public boolean executeCustomCommand(ICommandSender cs, String command, String[] args)
  103. {
  104. System.out.println(command + " " + String.join(" ", args));
  105. if(cs instanceof EntityPlayer && KajetansMod.scripts.isRegisteredScriptCommand(command))
  106. {
  107. KajetansMod.scripts.getEvent(ScriptEvents.class).onCustomCommand((EntityPlayer) cs, command, args);
  108. return true;
  109. }
  110. return false;
  111. }
  112. @Override
  113. public void printMissingCommand(ICommandSender cs, String command)
  114. {
  115. cs.sendMessage(new TextComponentString("Keine Command " + command));
  116. }
  117. @Override
  118. public void printMissingPermission(ICommandSender cs, ICommand command)
  119. {
  120. cs.sendMessage(new TextComponentString("Keine Perms für " + command.getName()));
  121. }
  122. }