package tc.oc.commons.bukkit.util;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.google.common.collect.ImmutableMap;
import net.md_5.bungee.api.chat.BaseComponent;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.inventory.ItemFactory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.potion.PotionEffectType;
import tc.oc.commons.core.chat.ChatUtils;
import tc.oc.commons.core.chat.Component;
public class BukkitUtils {
private static final ItemFactory factory = Bukkit.getServer().getItemFactory();
/** Makes strings have pretty colors */
public static String colorize(String s) {
return ChatColor.translateAlternateColorCodes('&', ChatColor.translateAlternateColorCodes('`', s));
}
public static String decolorize(String s) {
return ChatColor.stripColor(colorize(s));
}
public static List<String> colorizeList(List<String> list) {
List<String> result = new ArrayList<>();
for (String line : list) {
result.add(colorize(line));
}
return result;
}
public static String escapeColors(String text) {
return escapeColors(text, '&');
}
public static String escapeColors(String text, char placeholder) {
return text.replace(ChatColor.COLOR_CHAR, placeholder);
}
public static String woolMessage(DyeColor color) {
return dyeColorToChatColor(color) + color.toString().replace("_", " ") + " WOOL";
}
public static BaseComponent woolName(DyeColor color) {
return new Component(color.toString().replace("_", " ") + " WOOL", ChatUtils.convert(dyeColorToChatColor(color)));
}
public static ItemStack generateBook(String title, String author, List<String> pages) {
ItemStack stack = new ItemStack(Material.WRITTEN_BOOK);
BookMeta meta = (BookMeta) factory.getItemMeta(Material.WRITTEN_BOOK);
meta.setTitle(title);
meta.setAuthor(author);
meta.setPages(pages);
stack.setItemMeta(meta);
return stack;
}
public static ChatColor dyeColorToChatColor(DyeColor dyeColor) {
ChatColor chatColor = DYE_CHAT_MAP.get(dyeColor);
if (chatColor != null) {
return chatColor;
} else {
return ChatColor.WHITE;
}
}
public static net.md_5.bungee.api.ChatColor toChatColor(DyeColor dyeColor) {
return convertColor(dyeColorToChatColor(dyeColor));
}
public static DyeColor chatColorToDyeColor(ChatColor chatColor) {
DyeColor dyeColor = CHAT_DYE_MAP.get(chatColor);
if (dyeColor != null) {
return dyeColor;
} else {
return DyeColor.WHITE;
}
}
public static DyeColor chatColorToDyeColor(net.md_5.bungee.api.ChatColor chatColor) {
return chatColorToDyeColor(convertColor(chatColor));
}
private static final Map<DyeColor, ChatColor> DYE_CHAT_MAP = ImmutableMap.<DyeColor, ChatColor>builder()
.put(DyeColor.BLACK, ChatColor.BLACK)
.put(DyeColor.BLUE, ChatColor.BLUE) // DARK_BLUE always looks ugly in chat
.put(DyeColor.GREEN, ChatColor.DARK_GREEN)
.put(DyeColor.CYAN, ChatColor.DARK_AQUA)
.put(DyeColor.RED, ChatColor.DARK_RED)
.put(DyeColor.PURPLE, ChatColor.DARK_PURPLE)
.put(DyeColor.ORANGE, ChatColor.GOLD)
.put(DyeColor.SILVER, ChatColor.GRAY)
.put(DyeColor.GRAY, ChatColor.DARK_GRAY)
.put(DyeColor.LIGHT_BLUE, ChatColor.BLUE)
.put(DyeColor.LIME, ChatColor.GREEN)
.put(DyeColor.BROWN, ChatColor.DARK_RED)
.put(DyeColor.MAGENTA, ChatColor.LIGHT_PURPLE)
.put(DyeColor.YELLOW, ChatColor.YELLOW)
.put(DyeColor.WHITE, ChatColor.WHITE)
.put(DyeColor.PINK, ChatColor.RED)
.build();
private static final Map<ChatColor, DyeColor> CHAT_DYE_MAP = ImmutableMap.<ChatColor, DyeColor>builder()
.put(ChatColor.AQUA, DyeColor.LIGHT_BLUE)
.put(ChatColor.BLACK, DyeColor.BLACK)
.put(ChatColor.BLUE, DyeColor.BLUE)
.put(ChatColor.DARK_AQUA, DyeColor.CYAN)
.put(ChatColor.DARK_BLUE, DyeColor.BLUE)
.put(ChatColor.DARK_GRAY, DyeColor.GRAY)
.put(ChatColor.DARK_GREEN, DyeColor.GREEN)
.put(ChatColor.DARK_PURPLE, DyeColor.PURPLE)
.put(ChatColor.DARK_RED, DyeColor.RED)
.put(ChatColor.GOLD, DyeColor.ORANGE)
.put(ChatColor.GRAY, DyeColor.SILVER)
.put(ChatColor.GREEN, DyeColor.LIME)
.put(ChatColor.LIGHT_PURPLE, DyeColor.MAGENTA)
.put(ChatColor.RED, DyeColor.PINK)
.put(ChatColor.WHITE, DyeColor.WHITE)
.put(ChatColor.YELLOW, DyeColor.YELLOW).build();
public static Color colorOf(ChatColor chatColor) {
Color color = CHAT_COLOR_MAP.get(chatColor);
if (color != null) {
return color;
} else {
return Color.WHITE;
}
}
public static Color colorOf(net.md_5.bungee.api.ChatColor chatColor) {
return colorOf(convertColor(chatColor));
}
private static final Map<ChatColor, Color> CHAT_COLOR_MAP = ImmutableMap.<ChatColor, Color>builder()
.put(ChatColor.BLACK, Color.fromRGB(0, 0, 0))
.put(ChatColor.DARK_BLUE, Color.fromRGB(0, 0, 170))
.put(ChatColor.DARK_GREEN, Color.fromRGB(0, 170, 0))
.put(ChatColor.DARK_AQUA, Color.fromRGB(0, 170, 170))
.put(ChatColor.DARK_RED, Color.fromRGB(170, 0, 0))
.put(ChatColor.DARK_PURPLE, Color.fromRGB(170, 0, 170))
.put(ChatColor.GOLD, Color.fromRGB(255, 170, 0))
.put(ChatColor.GRAY, Color.fromRGB(170, 170, 170))
.put(ChatColor.DARK_GRAY, Color.fromRGB(85, 85, 85))
.put(ChatColor.BLUE, Color.fromRGB(85, 85, 255))
.put(ChatColor.GREEN, Color.fromRGB(85, 255, 85))
.put(ChatColor.AQUA, Color.fromRGB(85, 255, 255))
.put(ChatColor.RED, Color.fromRGB(255, 85, 85))
.put(ChatColor.LIGHT_PURPLE, Color.fromRGB(255, 85, 255))
.put(ChatColor.YELLOW, Color.fromRGB(255, 255, 85))
.put(ChatColor.WHITE, Color.fromRGB(255, 255, 255)).build();
public static String potionEffectTypeName(final PotionEffectType type) {
String name = POTION_EFFECT_MAP.get(type);
if (name != null) {
return name;
} else {
return "Unknown";
}
}
public static final Map<PotionEffectType, String> POTION_EFFECT_MAP = ImmutableMap.<PotionEffectType, String>builder()
.put(PotionEffectType.BLINDNESS, "Blindness")
.put(PotionEffectType.CONFUSION, "Nausea")
.put(PotionEffectType.DAMAGE_RESISTANCE, "Resistance")
.put(PotionEffectType.FAST_DIGGING, "Haste")
.put(PotionEffectType.FIRE_RESISTANCE, "Fire Resistance")
.put(PotionEffectType.HARM, "Instant Damage")
.put(PotionEffectType.HEAL, "Instant Health")
.put(PotionEffectType.HUNGER, "Hunger")
.put(PotionEffectType.INCREASE_DAMAGE, "Strength")
.put(PotionEffectType.INVISIBILITY, "Invisibility")
.put(PotionEffectType.JUMP, "Jump Boost")
.put(PotionEffectType.NIGHT_VISION, "Night Vision")
.put(PotionEffectType.POISON, "Poison")
.put(PotionEffectType.REGENERATION, "Regeneration")
.put(PotionEffectType.SLOW, "Slowness")
.put(PotionEffectType.SLOW_DIGGING, "Mining Fatigue")
.put(PotionEffectType.SPEED, "Speed")
.put(PotionEffectType.WATER_BREATHING, "Water Breating")
.put(PotionEffectType.WEAKNESS, "Weakness")
.put(PotionEffectType.WITHER, "Wither")
.put(PotionEffectType.HEALTH_BOOST, "Health Boost")
.put(PotionEffectType.ABSORPTION, "Absorption")
.put(PotionEffectType.SATURATION, "Saturation")
.build();
public static ChatColor convertColor(net.md_5.bungee.api.ChatColor color) {
return ChatColor.getByChar(color.toString().charAt(1));
}
public static net.md_5.bungee.api.ChatColor convertColor(ChatColor color) {
return net.md_5.bungee.api.ChatColor.getByChar(color.toString().charAt(1));
}
}