diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index a5e091487..3a54a58bc 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -657,6 +657,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { final PluginManager pm = getServer().getPluginManager(); registerListeners(pm); + AdventureUtil.setEss(this); bukkitAudience = BukkitAudiences.create(this); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 666599a52..5fe884f7a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -53,6 +53,8 @@ import static com.earth2me.essentials.I18n.tlLiteral; public class Settings implements net.ess3.api.ISettings { private static final BigDecimal DEFAULT_MAX_MONEY = new BigDecimal("10000000000000"); private static final BigDecimal DEFAULT_MIN_MONEY = new BigDecimal("-10000000000000"); + private static final Tag DEFAULT_PRIMARY_COLOR = Tag.styling(NamedTextColor.GOLD); + private static final Tag DEFAULT_SECONDARY_COLOR = Tag.styling(NamedTextColor.RED); private final transient EssentialsConfiguration config; private final transient IEssentials ess; private final transient AtomicInteger reloadCount = new AtomicInteger(0); @@ -141,8 +143,8 @@ public class Settings implements net.ess3.api.ISettings { private double maxProjectileSpeed; private boolean removeEffectsOnHeal; private Map worldAliases; - private Tag primaryColor = Tag.styling(NamedTextColor.GOLD); - private Tag secondaryColor = Tag.styling(NamedTextColor.RED); + private Tag primaryColor = DEFAULT_PRIMARY_COLOR; + private Tag secondaryColor = DEFAULT_SECONDARY_COLOR; public Settings(final IEssentials ess) { this.ess = ess; @@ -1970,7 +1972,8 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getPrimaryColor() { final String color = config.getString("message-colors.primary", "#ffaa00"); - return Tag.styling(_getTagColor(color, NamedTextColor.GOLD)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_PRIMARY_COLOR; } @Override @@ -1980,24 +1983,23 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getSecondaryColor() { final String color = config.getString("message-colors.secondary", "#ff5555"); - return Tag.styling(_getTagColor(color, NamedTextColor.RED)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_SECONDARY_COLOR; } - private TextColor _getTagColor(final String color, final TextColor def) { + private TextColor _getTagColor(final String color) { try { - if (color.startsWith("#") && color.length() == 7 && NumberUtil.isNumeric(color.substring(1))) { + if (color.startsWith("#") && color.length() == 7 && NumberUtil.isHexadecimal(color.substring(1))) { return TextColor.color(Color.fromRGB(Integer.decode(color)).asRGB()); } if (color.length() == 1) { - final NamedTextColor named = AdventureUtil.fromChar(color.charAt(0)); - return named != null ? named : def; + return AdventureUtil.fromChar(color.charAt(0)); } - final NamedTextColor named = NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); - return named != null ? named : def; + return NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); } catch (IllegalArgumentException ignored) { } - return def; + return null; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java index 828ee6886..4016504a5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -15,13 +15,13 @@ import java.util.regex.Pattern; public final class AdventureUtil { private static final LegacyComponentSerializer LEGACY_SERIALIZER; - private static final MiniMessage MINI_MESSAGE_INSTANCE; - private static IEssentials ess; private static final Pattern NAMED_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "[0-9a-fk-orA-FK-OR]"); private static final Pattern HEX_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "x((?:" + ChatColor.COLOR_CHAR + "[0-9a-fA-F]){6})"); private static final String LOOKUP = "0123456789abcdefklmnor"; private static final String[] MINI_TAGS = new String[] {"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", "white", "obf", "b", "st", "u", "i", "reset"}; private static final NamedTextColor[] COLORS = new NamedTextColor[] {NamedTextColor.BLACK, NamedTextColor.DARK_BLUE, NamedTextColor.DARK_GREEN, NamedTextColor.DARK_AQUA, NamedTextColor.DARK_RED, NamedTextColor.DARK_PURPLE, NamedTextColor.GOLD, NamedTextColor.GRAY, NamedTextColor.DARK_GRAY, NamedTextColor.BLUE, NamedTextColor.GREEN, NamedTextColor.AQUA, NamedTextColor.RED, NamedTextColor.LIGHT_PURPLE, NamedTextColor.YELLOW, NamedTextColor.WHITE}; + private static IEssentials ess; + private static MiniMessage miniMessageInstance; static { final LegacyComponentSerializer.Builder builder = LegacyComponentSerializer.builder().flattener(ComponentFlattener.basic()).useUnusualXRepeatedCharacterHexFormat(); @@ -29,15 +29,7 @@ public final class AdventureUtil { builder.hexColors(); } LEGACY_SERIALIZER = builder.build(); - - MINI_MESSAGE_INSTANCE = MiniMessage.builder() - .tags(TagResolver.builder() - .resolvers(TagResolver.standard()) - .resolver(TagResolver.resolver("primary", supplyTag(true))) - .resolver(TagResolver.resolver("secondary", supplyTag(false))) - .build()) - .build(); - + miniMessageInstance = createMiniMessageInstance(); } private AdventureUtil() { @@ -45,10 +37,21 @@ public final class AdventureUtil { public static void setEss(final IEssentials ess) { AdventureUtil.ess = ess; + miniMessageInstance = createMiniMessageInstance(); + } + + private static MiniMessage createMiniMessageInstance() { + return MiniMessage.builder() + .tags(TagResolver.builder() + .resolvers(TagResolver.standard()) + .resolver(TagResolver.resolver("primary", supplyTag(true))) + .resolver(TagResolver.resolver("secondary", supplyTag(false))) + .build()) + .build(); } public static MiniMessage miniMessage() { - return MINI_MESSAGE_INSTANCE; + return miniMessageInstance; } /** diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java index 7bd4adcad..9b253e243 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java @@ -129,6 +129,15 @@ public final class NumberUtil { return true; } + public static boolean isHexadecimal(final String sNum) { + try { + Integer.parseInt(sNum, 16); + return true; + } catch (final NumberFormatException e) { + return false; + } + } + /** * Backport from Guava. */