001package fr.aumgn.dac2.config; 002 003import java.util.Arrays; 004import java.util.Iterator; 005import java.util.LinkedHashMap; 006import java.util.List; 007import java.util.Locale; 008import java.util.Map; 009 010import org.bukkit.ChatColor; 011import org.bukkit.Material; 012 013import fr.aumgn.bukkitutils.gson.GsonLoadException; 014import fr.aumgn.bukkitutils.util.Util; 015import fr.aumgn.dac2.DAC; 016 017public class Colors implements Iterable<Color> { 018 019 private final Color[] colors; 020 021 public Colors(DAC dac) { 022 Color[] colorsTmp; 023 try { 024 colorsTmp = dac.getPlugin().getGsonLoader() 025 .loadOrCreate("colors.json", Color[].class); 026 if (colorsTmp.length < 2) { 027 dac.getLogger().severe("Unable to load colors.json. " + 028 "Using defaults colors instead."); 029 colorsTmp = getDefaults(dac.getConfig().getLocale()); 030 } 031 } catch (GsonLoadException _) { 032 colorsTmp = getDefaults(dac.getConfig().getLocale()); 033 try { 034 dac.getPlugin().getGsonLoader() 035 .write("colors.json", colorsTmp); 036 } catch (GsonLoadException __) { 037 dac.getLogger().info("Unable to write default color.json."); 038 } 039 } 040 041 colors = colorsTmp; 042 } 043 044 public boolean contains(String name) { 045 for (Color color : colors) { 046 if (color.name.equals(name)) { 047 return true; 048 } 049 } 050 051 return false; 052 } 053 054 public Color get(String name) { 055 for (Color color : colors) { 056 if (color.name.equals(name)) { 057 return color; 058 } 059 } 060 061 return null; 062 } 063 064 public Color random() { 065 return colors[Util.getRandom().nextInt(colors.length)]; 066 } 067 068 public int size() { 069 return colors.length; 070 } 071 072 public List<Color> asList() { 073 return Arrays.asList(colors); 074 } 075 076 public Map<String, Color> asMap() { 077 Map<String, Color> map = new LinkedHashMap<String, Color>(); 078 for (Color color : colors) { 079 map.put(color.name, color); 080 } 081 082 return map; 083 } 084 085 public Iterator<Color> iterator() { 086 return Arrays.asList(colors).iterator(); 087 } 088 089 private static Color[] getDefaults(Locale locale) { 090 if (locale.getLanguage().equals(Locale.FRENCH.getLanguage())) { 091 return new Color[] { 092 createDefault("Rouge", ChatColor.DARK_RED, 14), 093 createDefault("Vert", ChatColor.DARK_GREEN, 13), 094 createDefault("Argent", ChatColor.GRAY, 8), 095 createDefault("Violet", ChatColor.DARK_PURPLE, 10), 096 createDefault("Orange", ChatColor.GOLD, 1), 097 createDefault("Blanc", ChatColor.WHITE, 0), 098 createDefault("Jaune", ChatColor.YELLOW, 4), 099 createDefault("Magenta", ChatColor.RED, 2), 100 createDefault("Gris", ChatColor.DARK_GRAY, 7), 101 createDefault("Citron", ChatColor.GREEN, 5), 102 createDefault("Rose", ChatColor.LIGHT_PURPLE, 6), 103 createDefault("Noir", ChatColor.BLACK, 15) 104 }; 105 } 106 107 return new Color[] { 108 createDefault("Red", ChatColor.DARK_RED, 14), 109 createDefault("Green", ChatColor.DARK_GREEN, 13), 110 createDefault("Silver", ChatColor.GRAY, 8), 111 createDefault("Purple", ChatColor.DARK_PURPLE, 10), 112 createDefault("Orange", ChatColor.GOLD, 1), 113 createDefault("White", ChatColor.WHITE, 0), 114 createDefault("Yellow", ChatColor.YELLOW, 4), 115 createDefault("Magenta", ChatColor.RED, 2), 116 createDefault("Gray", ChatColor.DARK_GRAY, 7), 117 createDefault("Lemon", ChatColor.GREEN, 5), 118 createDefault("Pink", ChatColor.LIGHT_PURPLE, 6), 119 createDefault("Black", ChatColor.BLACK, 15) 120 }; 121 } 122 123 private static Color createDefault(String name, ChatColor chat, int data) { 124 return new Color(name, chat, Material.WOOL, (byte) data); 125 } 126}