package org.mctourney.autoreferee.util;
import java.util.Map;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.DyeColor;
import com.google.common.collect.Maps;
public abstract class ColorConverter
{
private static Map<DyeColor, ChatColor> dyeChatMap;
static
{
dyeChatMap = Maps.newHashMap();
dyeChatMap.put(DyeColor.BLACK, ChatColor.DARK_GRAY);
dyeChatMap.put(DyeColor.BLUE, ChatColor.DARK_BLUE);
dyeChatMap.put(DyeColor.BROWN, ChatColor.GOLD);
dyeChatMap.put(DyeColor.CYAN, ChatColor.AQUA);
dyeChatMap.put(DyeColor.GRAY, ChatColor.GRAY);
dyeChatMap.put(DyeColor.GREEN, ChatColor.DARK_GREEN);
dyeChatMap.put(DyeColor.LIGHT_BLUE, ChatColor.BLUE);
dyeChatMap.put(DyeColor.LIME, ChatColor.GREEN);
dyeChatMap.put(DyeColor.MAGENTA, ChatColor.LIGHT_PURPLE);
dyeChatMap.put(DyeColor.ORANGE, ChatColor.GOLD);
dyeChatMap.put(DyeColor.PINK, ChatColor.LIGHT_PURPLE);
dyeChatMap.put(DyeColor.PURPLE, ChatColor.DARK_PURPLE);
dyeChatMap.put(DyeColor.RED, ChatColor.DARK_RED);
dyeChatMap.put(DyeColor.SILVER, ChatColor.GRAY);
dyeChatMap.put(DyeColor.WHITE, ChatColor.WHITE);
dyeChatMap.put(DyeColor.YELLOW, ChatColor.YELLOW);
}
public static ChatColor dyeToChat(DyeColor dclr)
{
if (dyeChatMap.containsKey(dclr))
return dyeChatMap.get(dclr);
return ChatColor.MAGIC;
}
private static Map<ChatColor, String> chatHexMap;
static
{
chatHexMap = Maps.newHashMap();
chatHexMap.put(ChatColor.BLACK, "#000");
chatHexMap.put(ChatColor.DARK_BLUE, "#00a");
chatHexMap.put(ChatColor.DARK_GREEN, "#0a0");
chatHexMap.put(ChatColor.DARK_AQUA, "#0aa");
chatHexMap.put(ChatColor.DARK_RED, "#a00");
chatHexMap.put(ChatColor.DARK_PURPLE, "#a0a");
chatHexMap.put(ChatColor.GOLD, "#fa0");
chatHexMap.put(ChatColor.GRAY, "#999");
chatHexMap.put(ChatColor.DARK_GRAY, "#555");
chatHexMap.put(ChatColor.BLUE, "#55f");
chatHexMap.put(ChatColor.GREEN, "#5c5");
chatHexMap.put(ChatColor.AQUA, "#5cc");
chatHexMap.put(ChatColor.RED, "#f55");
chatHexMap.put(ChatColor.LIGHT_PURPLE, "#f5f");
chatHexMap.put(ChatColor.YELLOW, "#cc5");
chatHexMap.put(ChatColor.WHITE, "#aaa");
}
public static String chatToHex(ChatColor clr)
{
if (chatHexMap.containsKey(clr))
return chatHexMap.get(clr);
return "#000";
}
private static Map<DyeColor, String> dyeHexMap;
static
{
dyeHexMap = Maps.newHashMap();
dyeHexMap.put(DyeColor.BLACK, "#181414");
dyeHexMap.put(DyeColor.BLUE, "#253193");
dyeHexMap.put(DyeColor.BROWN, "#56331c");
dyeHexMap.put(DyeColor.CYAN, "#267191");
dyeHexMap.put(DyeColor.GRAY, "#414141");
dyeHexMap.put(DyeColor.GREEN, "#364b18");
dyeHexMap.put(DyeColor.LIGHT_BLUE, "#6387d2");
dyeHexMap.put(DyeColor.LIME, "#39ba2e");
dyeHexMap.put(DyeColor.MAGENTA, "#be49c9");
dyeHexMap.put(DyeColor.ORANGE, "#ea7e35");
dyeHexMap.put(DyeColor.PINK, "#d98199");
dyeHexMap.put(DyeColor.PURPLE, "#7e34bf");
dyeHexMap.put(DyeColor.RED, "#9e2b27");
dyeHexMap.put(DyeColor.SILVER, "#a0a7a7");
dyeHexMap.put(DyeColor.WHITE, "#a4a4a4");
dyeHexMap.put(DyeColor.YELLOW, "#c2b51c");
}
public static String dyeToHex(DyeColor clr)
{
if (dyeHexMap.containsKey(clr))
return dyeHexMap.get(clr);
return "#000";
}
public static Color hexToColor(String hex)
{
// get rid of typical hex color cruft
if (hex.startsWith("#")) hex = hex.substring(1);
if (hex.indexOf("x") != -1) hex = hex.substring(hex.indexOf("x"));
// if the length isn't the standard 0xRRGGBB or 0xRGB, just quit
if (hex.length() != 6 && hex.length() != 3) return null;
// construct and return color object
int sz = hex.length() / 3, mult = 1 << ((2 - sz)*4), x = 0;
for (int i = 0, z = 0; z < hex.length(); ++i, z += sz)
x |= (mult * Integer.parseInt(hex.substring(z, z+sz), 16)) << (i*8);
return Color.fromBGR(x & 0xffffff);
}
public static Color rgbToColor(String rgb)
{
String parts[] = rgb.split("[^0-9]+");
if (parts.length < 3) return null;
int x = 0, i; for (i = 0; i < 3; ++i)
x |= Integer.parseInt(parts[i]) << (i*8);
return Color.fromBGR(x & 0xffffff);
}
public static String generateColorTable()
{
StringBuilder str = new StringBuilder();
str.append("<table><tr><td>Chat Color</td><td>Color</td></tr>");
for (Map.Entry<ChatColor, String> e : chatHexMap.entrySet())
str.append(String.format("<tr><td style='color: %2$s;'>%1$s</td>" +
"<td style='color: %2$s;'>Test String</td></tr>", e.getKey().name(), e.getValue()));
str.append("</table>");
str.append("<table><tr><td>Dye Color</td><td>Color</td></tr>");
for (Map.Entry<DyeColor, String> e : dyeHexMap.entrySet())
str.append(String.format("<tr><td style='color: %2$s;'>%1$s</td>" +
"<td style='color: %2$s;'>Test String</td></tr>", e.getKey().name(), e.getValue()));
str.append("</table>");
return str.toString();
}
}