protected static String convertColorChars(String str) {
		if (str.contains("<")) {
			for (int i = 0; i < colorTags.length; ++i) {
				str = str.replace(colorTags[i], String.valueOf(ChatColor.COLOR_CHAR) + colors[i]);
			}
		}
		StringBuilder s = new StringBuilder();
		int i = 0;
		for (; i < str.length() - 1; ++i) {
			if (str.charAt(i) == '&') {
				if (str.charAt(i + 1) == '&') {
					s.append("&");
					++i;
					continue;
				} else {
					// test shorthand color tags
					char ch = str.charAt(i + 1);
					int chi = ArrayManip.indexOf(shortColors, (Character) ch);
					if (chi != -1) {
						ch = colors[chi];
					}
					ChatColor c = ChatColor.getByChar(ch);
					if (c != null) {
						s.append(c.toString());
						++i;
						continue;
					}
				}
			}
			s.append(str.charAt(i));
		}
		if (i < str.length()) {
			s.append(str.charAt(i));
		}
		return s.toString();
	}