Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.ensemplix.api;
- import lombok.Getter;
- import ru.ensemplix.user.User;
- import ru.ensemplix.permission.PermissionManager;
- /**
- * Специальные коды, которые используются для изменения цвета чата.
- * http://minecraft.gamepedia.com/Formatting_codes.
- */
- public enum BundleColor {
- BLACK('0'),
- DARK_BLUE('1'),
- DARK_GREEN('2'),
- DARK_AQUA('3'),
- DARK_RED('4'),
- DARK_PURPLE('5'),
- GOLD('6'),
- GRAY('7'),
- DARK_GRAY('8'),
- BLUE('9'),
- GREEN('a'),
- AQUA('b'),
- RED('c'),
- LIGHT_PURPLE('d'),
- YELLOW('e'),
- WHITE('f'),
- MAGIC('k'),
- BOLD('l'),
- STRIKETHROUGH('m'),
- UNDERLINE('n'),
- ITALIC('o'),
- RESET('r');
- /**
- * Префикс перед цветовым кодом.
- */
- public static final String COLOR_PREFIX = "&";
- /**
- * Код выбранного цвета.
- */
- @Getter
- private final String code;
- BundleColor(char code) {
- this.code = COLOR_PREFIX + code;
- }
- /**
- * Доступен ли для использования цвет выбранному игроку.
- *
- * @param permissionManager Менеджер разрешений, через который проверяем цвет.
- * @param user Игрок, у которого мы проверяем доступ к использованию цвета.
- * @return {@code true}, если игрок может использовать цвет.
- */
- public boolean isAvailable(PermissionManager permissionManager, User user) {
- return permissionManager.hasPermission(user, "bundle.color." + name().toLowerCase());
- }
- /**
- * Содержит ли строка недопустимые для игрока цвета.
- *
- * @param permissionManager Менеджер разрешений, через который проверяем цвета.
- * @param user Игрок, у которого мы проверяем доступ к использованию цвета.
- * @param text Строка, в которой ищем недопустимые цвета.
- * @return {@code true}, если строка содержит недопустимые игроку цвета.
- */
- public static boolean containsUnavailableColor(PermissionManager permissionManager, User user, String text) {
- for(String code : text.split("&")) {
- if(code.length() > 1) {
- code = code.substring(0, 1);
- }
- BundleColor color = getColor(code);
- if(color != null && !color.isAvailable(permissionManager, user)) {
- return true;
- }
- }
- return false;
- }
- /**
- * Возвращает количество цветов в строке с учетом префикса. Например, "&2Hello &1World" вернет 4.
- *
- * @param text Строка, в которой мы считаем цветовые коды.
- * @return количество цветов в строке с учетом префикса.
- */
- public static int colorsLength(String text) {
- int length = 0;
- for(String code : text.split("&")) {
- if(code.length() > 1) {
- code = code.substring(0, 1);
- }
- BundleColor color = getColor(code);
- if(color != null) {
- length += 2;
- }
- }
- return length;
- }
- /**
- * Возвращает выбранный цвет чата. Поиск происходит по названию цветового кода.
- *
- * @param value Строка, на основе которой ищем цвет.
- * @return Выбранный цвет чата.
- */
- public static BundleColor getColor(String value) {
- if(value.startsWith("&")) {
- value = value.substring(1);
- }
- for(BundleColor color : BundleColor.values()) {
- if(color.getCode().equalsIgnoreCase(COLOR_PREFIX + value)) {
- return color;
- }
- if(color.name().equalsIgnoreCase(value)) {
- return color;
- }
- }
- return null;
- }
- @Override
- public String toString() {
- return code;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement