ChatManager.java 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package me.km.chatmanager;
  2. import me.km.api.Module;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.HashSet;
  6. import java.util.UUID;
  7. import java.util.stream.Collectors;
  8. import me.km.KajetansMod;
  9. import me.km.permissions.Permissions;
  10. import net.minecraft.command.ICommandSender;
  11. import net.minecraft.entity.player.EntityPlayer;
  12. import net.minecraft.util.text.TextFormatting;
  13. public class ChatManager extends Module
  14. {
  15. private final HashMap<Integer, ArrayList<Rank>> ranks;
  16. private final HashMap<UUID, String> fakeRank;
  17. private final HashMap<UUID, String> nickname;
  18. private final String fallback;
  19. private final HashMap<UUID, HashSet<String>> playerRanks;
  20. public ChatManager(String mname, String prefix, TextFormatting color)
  21. {
  22. super(mname, prefix, color);
  23. ranks = new HashMap<>();
  24. fakeRank = new HashMap<>();
  25. nickname = new HashMap<>();
  26. fallback = "§8Θ";
  27. playerRanks = new HashMap<>();
  28. }
  29. // -----------------------------------------------------------------------------------
  30. // Rank-Handling
  31. // -----------------------------------------------------------------------------------
  32. /** Registers a rank by its permission, group and name. The idea is that ranks in the
  33. * same group overwrite themselves by picking the first match in the list.
  34. *
  35. * @param name the name of the rank to identify it
  36. * @param group the id of the rank group
  37. * @param text the text, which will be shown for the rank
  38. */
  39. public void registerRank(String name, int group, String text)
  40. {
  41. ArrayList<Rank> list = ranks.get(group);
  42. if(list == null)
  43. {
  44. list = new ArrayList<>();
  45. ranks.put(group, list);
  46. }
  47. list.add(new Rank(name, text));
  48. }
  49. /** Registers a rank for a players uuid
  50. *
  51. * @param uuid a uuid of a player
  52. * @param rank the rank, which should be registered
  53. */
  54. public void registerPlayerRank(UUID uuid, String rank)
  55. {
  56. HashSet<String> set = playerRanks.get(uuid);
  57. if(set == null)
  58. {
  59. set = new HashSet<>();
  60. playerRanks.put(uuid, set);
  61. }
  62. set.add(rank);
  63. }
  64. /** Gets all texts of the players ranks
  65. *
  66. * @param p a player
  67. * @return rank texts as list, the list will never be empty due to fallback
  68. */
  69. public ArrayList<String> getRanks(EntityPlayer p)
  70. {
  71. HashSet<String> pRanks = playerRanks.get(p.getUniqueID());
  72. if(pRanks != null)
  73. {
  74. ArrayList<String> list = ranks.values().stream()
  75. .map(l ->
  76. {
  77. for(Rank r : l)
  78. {
  79. if(pRanks.contains(r.getName()))
  80. {
  81. return r.getText();
  82. }
  83. }
  84. return null;
  85. })
  86. .filter(s -> s != null)
  87. .collect(Collectors.toCollection(ArrayList::new));
  88. if(list.isEmpty())
  89. {
  90. list.add(fallback);
  91. }
  92. return list;
  93. }
  94. else
  95. {
  96. ArrayList<String> list = new ArrayList<>();
  97. list.add(fallback);
  98. return list;
  99. }
  100. }
  101. /** Removes all ranks and their player registry from the cache
  102. *
  103. */
  104. public void clearRanks()
  105. {
  106. ranks.clear();
  107. playerRanks.clear();
  108. }
  109. /** Gets the players display name and its ranks
  110. *
  111. * @param p a player
  112. * @return players display name and ranks collected with specific format
  113. */
  114. public String getFullName(EntityPlayer p)
  115. {
  116. String fake = fakeRank.get(p.getUniqueID());
  117. if(fake != null)
  118. {
  119. return fake + " " + p.getDisplayNameString();
  120. }
  121. return getRanks(p).stream().collect(Collectors.joining("§r][", "[", "§r] " + p.getDisplayNameString()));
  122. }
  123. // -------------------------------------------------------------------------
  124. // Fakeranks
  125. // -------------------------------------------------------------------------
  126. public void addFakeRank(EntityPlayer p, String rank)
  127. {
  128. fakeRank.put(p.getUniqueID(), rank);
  129. }
  130. public String getFakeRank(EntityPlayer p)
  131. {
  132. return fakeRank.get(p.getUniqueID());
  133. }
  134. public void removeFakeRank(EntityPlayer p)
  135. {
  136. fakeRank.remove(p.getUniqueID());
  137. }
  138. // -------------------------------------------------------------------------
  139. // nicknames
  140. // -------------------------------------------------------------------------
  141. public void setNickname(EntityPlayer p, String name)
  142. {
  143. nickname.put(p.getUniqueID(), name);
  144. }
  145. public String getNickname(EntityPlayer p)
  146. {
  147. return nickname.get(p.getUniqueID());
  148. }
  149. public void removeNickname(EntityPlayer p)
  150. {
  151. nickname.remove(p.getUniqueID());
  152. }
  153. // -------------------------------------------------------------------------
  154. // Text-Coloring-Helper
  155. // -------------------------------------------------------------------------
  156. public static String colorMessage(String text, ICommandSender cs)
  157. {
  158. text = text.replace("&k", "");
  159. if(KajetansMod.perms.hasPermission(cs, Permissions.USE_COLOR))
  160. {
  161. text = text.replace("&", "§");
  162. return text;
  163. }
  164. text = text.replaceAll("&.", "");
  165. return text;
  166. }
  167. }