Advertisement
Guest User

Untitled

a guest
Feb 24th, 2017
48
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.43 KB | None | 0 0
  1. package ru.ensemplix.api;
  2.  
  3. import lombok.Getter;
  4. import ru.ensemplix.user.User;
  5. import ru.ensemplix.permission.PermissionManager;
  6.  
  7. /**
  8. * Специальные коды, которые используются для изменения цвета чата.
  9. * http://minecraft.gamepedia.com/Formatting_codes.
  10. */
  11. public enum BundleColor {
  12.  
  13. BLACK('0'),
  14. DARK_BLUE('1'),
  15. DARK_GREEN('2'),
  16. DARK_AQUA('3'),
  17. DARK_RED('4'),
  18. DARK_PURPLE('5'),
  19. GOLD('6'),
  20. GRAY('7'),
  21. DARK_GRAY('8'),
  22. BLUE('9'),
  23. GREEN('a'),
  24. AQUA('b'),
  25. RED('c'),
  26. LIGHT_PURPLE('d'),
  27. YELLOW('e'),
  28. WHITE('f'),
  29. MAGIC('k'),
  30. BOLD('l'),
  31. STRIKETHROUGH('m'),
  32. UNDERLINE('n'),
  33. ITALIC('o'),
  34. RESET('r');
  35.  
  36. /**
  37. * Префикс перед цветовым кодом.
  38. */
  39. public static final String COLOR_PREFIX = "&";
  40.  
  41. /**
  42. * Код выбранного цвета.
  43. */
  44. @Getter
  45. private final String code;
  46.  
  47. BundleColor(char code) {
  48. this.code = COLOR_PREFIX + code;
  49. }
  50.  
  51. /**
  52. * Доступен ли для использования цвет выбранному игроку.
  53. *
  54. * @param permissionManager Менеджер разрешений, через который проверяем цвет.
  55. * @param user Игрок, у которого мы проверяем доступ к использованию цвета.
  56. * @return {@code true}, если игрок может использовать цвет.
  57. */
  58. public boolean isAvailable(PermissionManager permissionManager, User user) {
  59. return permissionManager.hasPermission(user, "bundle.color." + name().toLowerCase());
  60. }
  61.  
  62. /**
  63. * Содержит ли строка недопустимые для игрока цвета.
  64. *
  65. * @param permissionManager Менеджер разрешений, через который проверяем цвета.
  66. * @param user Игрок, у которого мы проверяем доступ к использованию цвета.
  67. * @param text Строка, в которой ищем недопустимые цвета.
  68. * @return {@code true}, если строка содержит недопустимые игроку цвета.
  69. */
  70. public static boolean containsUnavailableColor(PermissionManager permissionManager, User user, String text) {
  71. for(String code : text.split("&")) {
  72. if(code.length() > 1) {
  73. code = code.substring(0, 1);
  74. }
  75.  
  76. BundleColor color = getColor(code);
  77.  
  78. if(color != null && !color.isAvailable(permissionManager, user)) {
  79. return true;
  80. }
  81. }
  82.  
  83. return false;
  84. }
  85.  
  86. /**
  87. * Возвращает количество цветов в строке с учетом префикса. Например, "&2Hello &1World" вернет 4.
  88. *
  89. * @param text Строка, в которой мы считаем цветовые коды.
  90. * @return количество цветов в строке с учетом префикса.
  91. */
  92. public static int colorsLength(String text) {
  93. int length = 0;
  94.  
  95. for(String code : text.split("&")) {
  96. if(code.length() > 1) {
  97. code = code.substring(0, 1);
  98. }
  99.  
  100. BundleColor color = getColor(code);
  101.  
  102. if(color != null) {
  103. length += 2;
  104. }
  105. }
  106.  
  107. return length;
  108. }
  109.  
  110. /**
  111. * Возвращает выбранный цвет чата. Поиск происходит по названию цветового кода.
  112. *
  113. * @param value Строка, на основе которой ищем цвет.
  114. * @return Выбранный цвет чата.
  115. */
  116. public static BundleColor getColor(String value) {
  117. if(value.startsWith("&")) {
  118. value = value.substring(1);
  119. }
  120.  
  121. for(BundleColor color : BundleColor.values()) {
  122. if(color.getCode().equalsIgnoreCase(COLOR_PREFIX + value)) {
  123. return color;
  124. }
  125.  
  126. if(color.name().equalsIgnoreCase(value)) {
  127. return color;
  128. }
  129. }
  130.  
  131. return null;
  132. }
  133.  
  134. @Override
  135. public String toString() {
  136. return code;
  137. }
  138.  
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement