diff options
Diffstat (limited to 'Essentials/src/net/ess3/utils/Util.java')
-rw-r--r-- | Essentials/src/net/ess3/utils/Util.java | 115 |
1 files changed, 102 insertions, 13 deletions
diff --git a/Essentials/src/net/ess3/utils/Util.java b/Essentials/src/net/ess3/utils/Util.java index f00570685..273cd4679 100644 --- a/Essentials/src/net/ess3/utils/Util.java +++ b/Essentials/src/net/ess3/utils/Util.java @@ -1,17 +1,19 @@ package net.ess3.utils; -import static net.ess3.I18n._; -import net.ess3.api.IEssentials; -import net.ess3.api.ISettings; -import net.ess3.api.InvalidNameException; -import net.ess3.utils.gnu.inet.encoding.Punycode; -import net.ess3.utils.gnu.inet.encoding.PunycodeException; +import de.bananaco.bpermissions.imp.Permissions; import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.Collection; import java.util.Locale; import java.util.regex.Pattern; import lombok.Cleanup; +import static net.ess3.I18n._; +import net.ess3.api.IEssentials; +import net.ess3.api.ISettings; +import net.ess3.api.IUser; +import net.ess3.api.InvalidNameException; +import net.ess3.utils.gnu.inet.encoding.Punycode; +import net.ess3.utils.gnu.inet.encoding.PunycodeException; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.block.Block; @@ -173,7 +175,7 @@ public final class Util public static String formatAsCurrency(final double value) { - + String str = dFormat.format(value); if (str.endsWith(".00")) { @@ -328,26 +330,113 @@ public final class Util perm.recalculatePermissibles(); return perm; } - private static transient final Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00A7+[0-9A-FKa-fk]"); - private static transient final Pattern EASY_COLOR_PATTERN = Pattern.compile("&([0-9a-fk])"); + private static transient final Pattern URL_PATTERN = Pattern.compile("((?:(?:https?)://)?[\\w-_\\.]{2,})\\.([a-z]{2,3}(?:/\\S+)?)"); + private static transient final Pattern VANILLA_PATTERN = Pattern.compile("\u00A7+[0-9A-FK-ORa-fk-or]"); + private static transient final Pattern REPLACE_PATTERN = Pattern.compile("&([0-9a-fk-or])"); + private static transient final Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00A7+[0-9A-Fa-f]"); + private static transient final Pattern VANILLA_MAGIC_PATTERN = Pattern.compile("\u00A7+[Kk]"); + private static transient final Pattern VANILLA_FORMAT_PATTERN = Pattern.compile("\u00A7+[L-ORl-or]"); + private static transient final Pattern REPLACE_COLOR_PATTERN = Pattern.compile("&([0-9a-f])"); + private static transient final Pattern REPLACE_MAGIC_PATTERN = Pattern.compile("&(k)"); + private static transient final Pattern REPLACE_FORMAT_PATTERN = Pattern.compile("&([l-or])"); - public static String stripColor(final String input) + public static String stripFormat(final String input) { if (input == null) { return null; } + return VANILLA_PATTERN.matcher(input).replaceAll(""); + } - return VANILLA_COLOR_PATTERN.matcher(input).replaceAll(""); + public static String replaceFormat(final String input) + { + if (input == null) + { + return null; + } + return REPLACE_PATTERN.matcher(input).replaceAll("\u00a7$1"); + } + + public static String blockURL(final String input) + { + if (input == null) + { + return null; + } + String text = URL_PATTERN.matcher(input).replaceAll("$1 $2"); + while (URL_PATTERN.matcher(text).find()) + { + text = URL_PATTERN.matcher(text).replaceAll("$1 $2"); + } + return text; + } + + public static String formatString(final IUser user, final String permBase, final String input) + { + if (input == null) + { + return null; + } + String message; + if (Permissions.hasPermission(user.getBase(), permBase + ".color")) + { + message = Util.replaceColor(input, REPLACE_COLOR_PATTERN); + } + else + { + message = Util.stripColor(input, VANILLA_COLOR_PATTERN); + } + if (Permissions.hasPermission(user.getBase(), permBase + ".magic")) + { + message = Util.replaceColor(message, REPLACE_MAGIC_PATTERN); + } + else + { + message = Util.stripColor(message, VANILLA_MAGIC_PATTERN); + } + if (Permissions.hasPermission(user.getBase(), permBase + ".format")) + { + message = Util.replaceColor(message, REPLACE_FORMAT_PATTERN); + } + else + { + message = Util.stripColor(message, VANILLA_FORMAT_PATTERN); + } + return message; } - public static String replaceColor(final String input) + public static String formatMessage(final IUser user, final String permBase, final String input) { if (input == null) { return null; } + String message = formatString(user, permBase, input); + if (!Permissions.hasPermission(user.getBase(), permBase + ".url")) + { + message = Util.blockURL(message); + } + return message; + } + + public static String stripColor(final String input) + { + if (input == null) + { + return null; + } + + return VANILLA_COLOR_PATTERN.matcher(input).replaceAll(""); + } - return EASY_COLOR_PATTERN.matcher(input).replaceAll("\u00a7$1"); + private static String stripColor(final String input, final Pattern pattern) + { + return pattern.matcher(input).replaceAll(""); + } + + private static String replaceColor(final String input, final Pattern pattern) + { + return pattern.matcher(input).replaceAll("\u00a7$1"); } } |