summaryrefslogtreecommitdiffstats
path: root/Essentials/src/net/ess3/utils/FormatUtil.java
blob: 4cba2a71b3d185b87d64964a575c54ade3c7e466 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package net.ess3.utils;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
import java.util.regex.Pattern;
import static net.ess3.I18n._;
import net.ess3.api.IEssentials;
import net.ess3.api.ISettings;
import net.ess3.api.IUser;
import net.ess3.permissions.DotStarPermission;


public class FormatUtil
{
	static final transient Pattern REPLACE_COLOR_PATTERN = Pattern.compile("&([0-9a-f])");
	static final transient Pattern REPLACE_MAGIC_PATTERN = Pattern.compile("&(k)");
	static final transient Pattern REPLACE_PATTERN = Pattern.compile("&([0-9a-fk-or])");
	static final transient Pattern VANILLA_PATTERN = Pattern.compile("\u00a7+[0-9A-FK-ORa-fk-or]");
	static final transient Pattern VANILLA_COLOR_PATTERN = Pattern.compile("\u00a7+[0-9A-Fa-f]");
	static final transient Pattern REPLACE_FORMAT_PATTERN = Pattern.compile("&([l-or])");
	static final transient Pattern VANILLA_FORMAT_PATTERN = Pattern.compile("\u00a7+[L-ORl-or]");
	static final transient Pattern VANILLA_MAGIC_PATTERN = Pattern.compile("\u00a7+[Kk]");
	static final transient Pattern URL_PATTERN = Pattern.compile("((?:(?:https?)://)?[\\w-_\\.]{2,})\\.([a-z]{2,3}(?:/\\S+)?)");
	static DecimalFormat dFormat = new DecimalFormat("#0.00", DecimalFormatSymbols.getInstance(Locale.US));

	static String stripColor(final String input, final Pattern pattern)
	{
		return pattern.matcher(input).replaceAll("");
	}

	public static String stripColor(final String input)
	{
		if (input == null)
		{
			return null;
		}
		return VANILLA_COLOR_PATTERN.matcher(input).replaceAll("");
	}

	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;
	}

	static String replaceColor(final String input, final Pattern pattern)
	{
		return pattern.matcher(input).replaceAll("\u00a7$1");
	}

	public static String stripFormat(final String input)
	{
		if (input == null)
		{
			return null;
		}
		return VANILLA_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 formatString(final IUser user, final DotStarPermission permBase, final String input)
	{
		if (input == null)
		{
			return null;
		}
		String message;
		if (permBase.isAuthorized(user.getPlayer(), "color"))
		{
			message = replaceColor(input, REPLACE_COLOR_PATTERN);
		}
		else
		{
			message = stripColor(input, VANILLA_COLOR_PATTERN);
		}
		if (permBase.isAuthorized(user.getPlayer(), "magic"))
		{
			message = replaceColor(message, REPLACE_MAGIC_PATTERN);
		}
		else
		{
			message = stripColor(message, VANILLA_MAGIC_PATTERN);
		}
		if (permBase.isAuthorized(user.getPlayer(), "format"))
		{
			message = replaceColor(message, REPLACE_FORMAT_PATTERN);
		}
		else
		{
			message = stripColor(message, VANILLA_FORMAT_PATTERN);
		}
		return message;
	}

	public static String formatMessage(final IUser user, final DotStarPermission permBase, final String input)
	{
		if (input == null)
		{
			return null;
		}
		String message = formatString(user, permBase, input);
		if (!permBase.isAuthorized(user.getPlayer(), "url"))
		{
			message = blockURL(message);
		}
		return message;
	}

	public static String shortCurrency(final double value, final IEssentials ess)
	{
		final ISettings settings = ess.getSettings();
		return settings.getData().getEconomy().getCurrencySymbol() + formatAsCurrency(value);
	}

	public static String displayCurrency(final double value, final IEssentials ess)
	{
		final ISettings settings = ess.getSettings();
		return _("currency", settings.getData().getEconomy().getCurrencySymbol(), formatAsCurrency(value));
	}

	public static String formatAsCurrency(final double value)
	{
		String str = dFormat.format(value);
		if (str.endsWith(".00"))
		{
			str = str.substring(0, str.length() - 3);
		}
		return str;
	}
}