package org.bukkit.map; /** * Represents the built-in Minecraft font. */ public class MinecraftFont extends MapFont { private static final int spaceSize = 2; private static final String fontChars = " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "'abcdefghijklmnopqrstuvwxyz{|}~\u007F" + "\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7" + // Çüéâäàåç "\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5" + // êëèïîìÄÅ "\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9" + // ÉæÆôöòûù "\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0191" + // ÿÖÜø£Ø×ƒ "\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA" + // áíóúñѪº "\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB"; // ¿®¬½¼¡«» private static final int[][] fontData = new int[][] { /* null */ { 0, 0, 0, 0, 0, 0, 0, 0 }, /* 1 */ { 126, 129, 165, 129, 189, 153, 129, 126 }, /* 2 */ { 126, 255, 219, 255, 195, 231, 255, 126 }, /* 3 */ { 54, 127, 127, 127, 62, 28, 8, 0 }, /* 4 */ { 8, 28, 62, 127, 62, 28, 8, 0 }, /* 5 */ { 28, 62, 28, 127, 127, 62, 28, 62 }, /* 6 */ { 8, 8, 28, 62, 127, 62, 28, 62 }, /* 7 */ { 0, 0, 24, 60, 60, 24, 0, 0 }, /* 8 */ { 255, 255, 231, 195, 195, 231, 255, 255 }, /* 9 */ { 0, 60, 102, 66, 66, 102, 60, 0 }, /* 10 */ { 255, 195, 153, 189, 189, 153, 195, 255 }, /* 11 */ { 240, 224, 240, 190, 51, 51, 51, 30 }, /* 12 */ { 60, 102, 102, 102, 60, 24, 126, 24 }, /* 13 */ { 252, 204, 252, 12, 12, 14, 15, 7 }, /* 14 */ { 254, 198, 254, 198, 198, 230, 103, 3 }, /* 15 */ { 153, 90, 60, 231, 231, 60, 90, 153 }, /* 16 */ { 1, 7, 31, 127, 31, 7, 1, 0 }, /* 17 */ { 64, 112, 124, 127, 124, 112, 64, 0 }, /* 18 */ { 24, 60, 126, 24, 24, 126, 60, 24 }, /* 19 */ { 102, 102, 102, 102, 102, 0, 102, 0 }, /* 20 */ { 254, 219, 219, 222, 216, 216, 216, 0 }, /* 21 */ { 124, 198, 28, 54, 54, 28, 51, 30 }, /* 22 */ { 0, 0, 0, 0, 126, 126, 126, 0 }, /* 23 */ { 24, 60, 126, 24, 126, 60, 24, 255 }, /* 24 */ { 24, 60, 126, 24, 24, 24, 24, 0 }, /* 25 */ { 24, 24, 24, 24, 126, 60, 24, 0 }, /* 26 */ { 0, 24, 48, 127, 48, 24, 0, 0 }, /* 27 */ { 0, 12, 6, 127, 6, 12, 0, 0 }, /* 28 */ { 0, 0, 3, 3, 3, 127, 0, 0 }, /* 29 */ { 0, 36, 102, 255, 102, 36, 0, 0 }, /* 30 */ { 0, 24, 60, 126, 255, 255, 0, 0 }, /* 31 */ { 0, 255, 255, 126, 60, 24, 0, 0 }, /* */ { 0, 0, 0, 0, 0, 0, 0, 0 }, /* ! */ { 1, 1, 1, 1, 1, 0, 1, 0 }, /* " */ { 10, 10, 5, 0, 0, 0, 0, 0 }, /* # */ { 10, 10, 31, 10, 31, 10, 10, 0 }, /* $ */ { 4, 30, 1, 14, 16, 15, 4, 0 }, /* % */ { 17, 9, 8, 4, 2, 18, 17, 0 }, /* & */ { 4, 10, 4, 22, 13, 9, 22, 0 }, /* ' */ { 2, 2, 1, 0, 0, 0, 0, 0 }, /* ( */ { 12, 2, 1, 1, 1, 2, 12, 0 }, /* ) */ { 3, 4, 8, 8, 8, 4, 3, 0 }, /* * */ { 0, 0, 9, 6, 9, 0, 0, 0 }, /* + */ { 0, 4, 4, 31, 4, 4, 0, 0 }, /* , */ { 0, 0, 0, 0, 0, 1, 1, 1 }, /* - */ { 0, 0, 0, 31, 0, 0, 0, 0 }, /* . */ { 0, 0, 0, 0, 0, 1, 1, 0 }, /* / */ { 16, 8, 8, 4, 2, 2, 1, 0 }, /* 0 */ { 14, 17, 25, 21, 19, 17, 14, 0 }, /* 1 */ { 4, 6, 4, 4, 4, 4, 31, 0 }, /* 2 */ { 14, 17, 16, 12, 2, 17, 31, 0 }, /* 3 */ { 14, 17, 16, 12, 16, 17, 14, 0 }, /* 4 */ { 24, 20, 18, 17, 31, 16, 16, 0 }, /* 5 */ { 31, 1, 15, 16, 16, 17, 14, 0 }, /* 6 */ { 12, 2, 1, 15, 17, 17, 14, 0 }, /* 7 */ { 31, 17, 16, 8, 4, 4, 4, 0 }, /* 8 */ { 14, 17, 17, 14, 17, 17, 14, 0 }, /* 9 */ { 14, 17, 17, 30, 16, 8, 6, 0 }, /* : */ { 0, 1, 1, 0, 0, 1, 1, 0 }, /* ; */ { 0, 1, 1, 0, 0, 1, 1, 1 }, /* < */ { 8, 4, 2, 1, 2, 4, 8, 0 }, /* = */ { 0, 0, 31, 0, 0, 31, 0, 0 }, /* > */ { 1, 2, 4, 8, 4, 2, 1, 0 }, /* ? */ { 14, 17, 16, 8, 4, 0, 4, 0 }, /* @ */ { 30, 33, 45, 45, 61, 1, 30, 0 }, /* A */ { 14, 17, 31, 17, 17, 17, 17, 0 }, /* B */ { 15, 17, 15, 17, 17, 17, 15, 0 }, /* C */ { 14, 17, 1, 1, 1, 17, 14, 0 }, /* D */ { 15, 17, 17, 17, 17, 17, 15, 0 }, /* E */ { 31, 1, 7, 1, 1, 1, 31, 0 }, /* F */ { 31, 1, 7, 1, 1, 1, 1, 0 }, /* G */ { 30, 1, 25, 17, 17, 17, 14, 0 }, /* H */ { 17, 17, 31, 17, 17, 17, 17, 0 }, /* I */ { 7, 2, 2, 2, 2, 2, 7, 0 }, /* J */ { 16, 16, 16, 16, 16, 17, 14, 0 }, /* K */ { 17, 9, 7, 9, 17, 17, 17, 0 }, /* L */ { 1, 1, 1, 1, 1, 1, 31, 0 }, /* M */ { 17, 27, 21, 17, 17, 17, 17, 0 }, /* N */ { 17, 19, 21, 25, 17, 17, 17, 0 }, /* O */ { 14, 17, 17, 17, 17, 17, 14, 0 }, /* P */ { 15, 17, 15, 1, 1, 1, 1, 0 }, /* Q */ { 14, 17, 17, 17, 17, 9, 22, 0 }, /* R */ { 15, 17, 15, 17, 17, 17, 17, 0 }, /* S */ { 30, 1, 14, 16, 16, 17, 14, 0 }, /* T */ { 31, 4, 4, 4, 4, 4, 4, 0 }, /* U */ { 17, 17, 17, 17, 17, 17, 14, 0 }, /* V */ { 17, 17, 17, 17, 10, 10, 4, 0 }, /* W */ { 17, 17, 17, 17, 21, 27, 17, 0 }, /* X */ { 17, 10, 4, 10, 17, 17, 17, 0 }, /* Y */ { 17, 10, 4, 4, 4, 4, 4, 0 }, /* Z */ { 31, 16, 8, 4, 2, 1, 31, 0 }, /* [ */ { 7, 1, 1, 1, 1, 1, 7, 0 }, /* \ */ { 1, 2, 2, 4, 8, 8, 16, 0 }, /* ] */ { 7, 4, 4, 4, 4, 4, 7, 0 }, /* ^ */ { 4, 10, 17, 0, 0, 0, 0, 0 }, /* _ */ { 0, 0, 0, 0, 0, 0, 0, 31 }, /* ` */ { 1, 1, 2, 0, 0, 0, 0, 0 }, /* a */ { 0, 0, 14, 16, 30, 17, 30, 0 }, /* b */ { 1, 1, 13, 19, 17, 17, 15, 0 }, /* c */ { 0, 0, 14, 17, 1, 17, 14, 0 }, /* d */ { 16, 16, 22, 25, 17, 17, 30, 0 }, /* e */ { 0, 0, 14, 17, 31, 1, 30, 0 }, /* f */ { 12, 2, 15, 2, 2, 2, 2, 0 }, /* g */ { 0, 0, 30, 17, 17, 30, 16, 15 }, /* h */ { 1, 1, 13, 19, 17, 17, 17, 0 }, /* i */ { 1, 0, 1, 1, 1, 1, 1, 0 }, /* j */ { 16, 0, 16, 16, 16, 17, 17, 14 }, /* k */ { 1, 1, 9, 5, 3, 5, 9, 0 }, /* l */ { 1, 1, 1, 1, 1, 1, 2, 0 }, /* m */ { 0, 0, 11, 21, 21, 17, 17, 0 }, /* n */ { 0, 0, 15, 17, 17, 17, 17, 0 }, /* o */ { 0, 0, 14, 17, 17, 17, 14, 0 }, /* p */ { 0, 0, 13, 19, 17, 15, 1, 1 }, /* q */ { 0, 0, 22, 25, 17, 30, 16, 16 }, /* r */ { 0, 0, 13, 19, 1, 1, 1, 0 }, /* s */ { 0, 0, 30, 1, 14, 16, 15, 0 }, /* t */ { 2, 2, 7, 2, 2, 2, 4, 0 }, /* u */ { 0, 0, 17, 17, 17, 17, 30, 0 }, /* v */ { 0, 0, 17, 17, 17, 10, 4, 0 }, /* w */ { 0, 0, 17, 17, 21, 21, 30, 0 }, /* x */ { 0, 0, 17, 10, 4, 10, 17, 0 }, /* y */ { 0, 0, 17, 17, 17, 30, 16, 15 }, /* z */ { 0, 0, 31, 8, 4, 2, 31, 0 }, /* { */ { 12, 2, 2, 1, 2, 2, 12, 0 }, /* | */ { 1, 1, 1, 0, 1, 1, 1, 0 }, /* } */ { 3, 4, 4, 8, 4, 4, 3, 0 }, /* ~ */ { 38, 25, 0, 0, 0, 0, 0, 0 }, /* ⌂ */ { 0, 0, 4, 10, 17, 17, 31, 0 }, /* Ç */ { 14, 17, 1, 1, 17, 14, 16, 12 }, /* ü */ { 10, 0, 17, 17, 17, 17, 30, 0 }, /* é */ { 24, 0, 14, 17, 31, 1, 30, 0 }, /* â */ { 14, 17, 14, 16, 30, 17, 30, 0 }, /* ä */ { 10, 0, 14, 16, 30, 17, 30, 0 }, /* à */ { 3, 0, 14, 16, 30, 17, 30, 0 }, /* å */ { 4, 0, 14, 16, 30, 17, 30, 0 }, /* ç */ { 0, 14, 17, 1, 17, 14, 16, 12 }, /* ê */ { 14, 17, 14, 17, 31, 1, 30, 0 }, /* ë */ { 10, 0, 14, 17, 31, 1, 30, 0 }, /* è */ { 3, 0, 14, 17, 31, 1, 30, 0 }, /* ï */ { 5, 0, 2, 2, 2, 2, 2, 0 }, /* î */ { 14, 17, 4, 4, 4, 4, 4, 0 }, /* ì */ { 3, 0, 2, 2, 2, 2, 2, 0 }, /* Ä */ { 17, 14, 17, 31, 17, 17, 17, 0 }, /* Å */ { 4, 0, 14, 17, 31, 17, 17, 0 }, /* É */ { 24, 0, 31, 1, 7, 1, 31, 0 }, /* æ */ { 0, 0, 10, 20, 30, 5, 30, 0 }, /* Æ */ { 30, 5, 15, 5, 5, 5, 29, 0 }, /* ô */ { 14, 17, 14, 17, 17, 17, 14, 0 }, /* ö */ { 10, 0, 14, 17, 17, 17, 14, 0 }, /* ò */ { 3, 0, 14, 17, 17, 17, 14, 0 }, /* û */ { 14, 17, 0, 17, 17, 17, 30, 0 }, /* ù */ { 3, 0, 17, 17, 17, 17, 30, 0 }, /* ÿ */ { 10, 0, 17, 17, 17, 30, 16, 15 }, /* Ö */ { 17, 14, 17, 17, 17, 17, 14, 0 }, /* Ü */ { 17, 0, 17, 17, 17, 17, 14, 0 }, /* ø */ { 0, 0, 14, 25, 21, 19, 14, 4 }, /* £ */ { 12, 18, 2, 15, 2, 2, 31, 0 }, /* Ø */ { 14, 17, 25, 21, 19, 17, 14, 0 }, /* × */ { 0, 0, 5, 2, 5, 0, 0, 0 }, /* ƒ */ { 8, 20, 4, 14, 4, 4, 5, 2 }, /* á */ { 24, 0, 14, 16, 30, 17, 30, 0 }, /* í */ { 3, 0, 1, 1, 1, 1, 1, 0 }, /* ó */ { 24, 0, 14, 17, 17, 17, 14, 0 }, /* ú */ { 24, 0, 17, 17, 17, 17, 30, 0 }, /* ñ */ { 31, 0, 15, 17, 17, 17, 17, 0 }, /* Ñ */ { 31, 0, 17, 19, 21, 25, 17, 0 }, /* ª */ { 14, 16, 31, 30, 0, 31, 0, 0 }, /* º */ { 14, 17, 17, 14, 0, 31, 0, 0 }, /* ¿ */ { 4, 0, 4, 2, 1, 17, 14, 0 }, /* ® */ { 0, 30, 45, 37, 43, 30, 0, 0 }, /* ¬ */ { 0, 0, 0, 31, 16, 16, 0, 0 }, /* ½ */ { 17, 9, 8, 4, 18, 10, 25, 0 }, /* ¼ */ { 17, 9, 8, 4, 26, 26, 17, 0 }, /* ¡ */ { 0, 1, 0, 1, 1, 1, 1, 0 }, /* « */ { 0, 20, 10, 5, 10, 20, 0, 0 }, /* » */ { 0, 5, 10, 20, 10, 5, 0, 0 }, /* 176 */ { 68, 17, 68, 17, 68, 17, 68, 17 }, /* 177 */ { 170, 85, 170, 85, 170, 85, 170, 85 }, /* 178 */ { 219, 238, 219, 119, 219, 238, 219, 119 }, /* 179 */ { 24, 24, 24, 24, 24, 24, 24, 24 }, /* 180 */ { 24, 24, 24, 24, 31, 24, 24, 24 }, /* 181 */ { 24, 24, 31, 24, 31, 24, 24, 24 }, /* 182 */ { 108, 108, 108, 108, 111, 108, 108, 108 }, /* 183 */ { 0, 0, 0, 0, 127, 108, 108, 108 }, /* 184 */ { 0, 0, 31, 24, 31, 24, 24, 24 }, /* 185 */ { 108, 108, 111, 96, 111, 108, 108, 108 }, /* 186 */ { 108, 108, 108, 108, 108, 108, 108, 108 }, /* 187 */ { 0, 0, 127, 96, 111, 108, 108, 108 }, /* 188 */ { 108, 108, 111, 96, 127, 0, 0, 0 }, /* 189 */ { 108, 108, 108, 108, 127, 0, 0, 0 }, /* 190 */ { 24, 24, 31, 24, 31, 0, 0, 0 }, /* 191 */ { 0, 0, 0, 0, 31, 24, 24, 24 }, /* 192 */ { 24, 24, 24, 24, 248, 0, 0, 0 }, /* 193 */ { 24, 24, 24, 24, 255, 0, 0, 0 }, /* 194 */ { 0, 0, 0, 0, 255, 24, 24, 24 }, /* 195 */ { 24, 24, 24, 24, 248, 24, 24, 24 }, /* 196 */ { 0, 0, 0, 0, 255, 0, 0, 0 }, /* 197 */ { 24, 24, 24, 24, 255, 24, 24, 24 }, /* 198 */ { 24, 24, 248, 24, 248, 24, 24, 24 }, /* 199 */ { 108, 108, 108, 108, 236, 108, 108, 108 }, /* 200 */ { 108, 108, 236, 12, 252, 0, 0, 0 }, /* 201 */ { 0, 0, 252, 12, 236, 108, 108, 108 }, /* 202 */ { 108, 108, 239, 0, 255, 0, 0, 0 }, /* 203 */ { 0, 0, 255, 0, 239, 108, 108, 108 }, /* 204 */ { 108, 108, 236, 12, 236, 108, 108, 108 }, /* 205 */ { 0, 0, 255, 0, 255, 0, 0, 0 }, /* 206 */ { 108, 108, 239, 0, 239, 108, 108, 108 }, /* 207 */ { 24, 24, 255, 0, 255, 0, 0, 0 }, /* 208 */ { 108, 108, 108, 108, 255, 0, 0, 0 }, /* 209 */ { 0, 0, 255, 0, 255, 24, 24, 24 }, /* 210 */ { 0, 0, 0, 0, 255, 108, 108, 108 }, /* 211 */ { 108, 108, 108, 108, 252, 0, 0, 0 }, /* 212 */ { 24, 24, 248, 24, 248, 0, 0, 0 }, /* 213 */ { 0, 0, 248, 24, 248, 24, 24, 24 }, /* 214 */ { 0, 0, 0, 0, 252, 108, 108, 108 }, /* 215 */ { 108, 108, 108, 108, 255, 108, 108, 108 }, /* 216 */ { 24, 24, 255, 24, 255, 24, 24, 24 }, /* 217 */ { 24, 24, 24, 24, 31, 0, 0, 0 }, /* 218 */ { 0, 0, 0, 0, 248, 24, 24, 24 }, /* 219 */ { 255, 255, 255, 255, 255, 255, 255, 255 }, /* 220 */ { 0, 0, 0, 0, 255, 255, 255, 255 }, /* 221 */ { 15, 15, 15, 15, 15, 15, 15, 15 }, /* 222 */ { 240, 240, 240, 240, 240, 240, 240, 240 }, /* 223 */ { 255, 255, 255, 255, 0, 0, 0, 0 }, /* 224 */ { 0, 0, 110, 59, 19, 59, 110, 0 }, /* 225 */ { 0, 30, 51, 31, 51, 31, 3, 3 }, /* 226 */ { 0, 63, 51, 3, 3, 3, 3, 0 }, /* 227 */ { 0, 127, 54, 54, 54, 54, 54, 0 }, /* 228 */ { 63, 51, 6, 12, 6, 51, 63, 0 }, /* 229 */ { 0, 0, 126, 27, 27, 27, 14, 0 }, /* 230 */ { 0, 102, 102, 102, 102, 62, 6, 3 }, /* 231 */ { 0, 110, 59, 24, 24, 24, 24, 0 }, /* 232 */ { 63, 12, 30, 51, 51, 30, 12, 63 }, /* 233 */ { 28, 54, 99, 127, 99, 54, 28, 0 }, /* 234 */ { 28, 54, 99, 99, 54, 54, 119, 0 }, /* 235 */ { 56, 12, 24, 62, 51, 51, 30, 0 }, /* 236 */ { 0, 0, 126, 219, 219, 126, 0, 0 }, /* 237 */ { 96, 48, 126, 219, 219, 126, 6, 3 }, /* 238 */ { 28, 6, 3, 31, 3, 6, 28, 0 }, /* 239 */ { 30, 51, 51, 51, 51, 51, 51, 0 }, /* 240 */ { 0, 63, 0, 63, 0, 63, 0, 0 }, /* 241 */ { 12, 12, 63, 12, 12, 0, 63, 0 }, /* 242 */ { 6, 12, 24, 12, 6, 0, 63, 0 }, /* 243 */ { 24, 12, 6, 12, 24, 0, 63, 0 }, /* 244 */ { 112, 216, 216, 24, 24, 24, 24, 24 }, /* 245 */ { 24, 24, 24, 24, 24, 27, 27, 14 }, /* 246 */ { 12, 12, 0, 63, 0, 12, 12, 0 }, /* 247 */ { 0, 110, 59, 0, 110, 59, 0, 0 }, /* 248 */ { 28, 54, 54, 28, 0, 0, 0, 0 }, /* 249 */ { 0, 0, 0, 24, 24, 0, 0, 0 }, /* 250 */ { 0, 0, 0, 0, 24, 0, 0, 0 }, /* 251 */ { 240, 48, 48, 48, 55, 54, 60, 56 }, /* 252 */ { 30, 54, 54, 54, 54, 0, 0, 0 }, /* 253 */ { 14, 24, 12, 6, 30, 0, 0, 0 }, /* 254 */ { 0, 0, 60, 60, 60, 60, 0, 0 }, /* 255 */ { 0, 0, 0, 0, 0, 0, 0, 0 }, }; /** * A static non-malleable MinecraftFont. */ public static final MinecraftFont Font = new MinecraftFont(false); /** * Initialize a new MinecraftFont. */ public MinecraftFont() { this(true); } private MinecraftFont(boolean malleable) { for (int i = 1; i < fontData.length; ++i) { char ch = (char) i; if (i >= 32 && i < 32 + fontChars.length()) { ch = fontChars.charAt(i - 32); } if (ch == ' ') { setChar(ch, new CharacterSprite(spaceSize, 8, new boolean[spaceSize * 8])); continue; } int[] rows = fontData[i]; int width = 0; for (int r = 0; r < 8; ++r) { for (int c = 0; c < 8; ++c) { if ((rows[r] & (1 << c)) != 0 && c > width) { width = c; } } } ++width; boolean[] data = new boolean[width * 8]; for (int r = 0; r < 8; ++r) { for (int c = 0; c < width; ++c) { data[r * width + c] = (rows[r] & (1 << c)) != 0; } } setChar(ch, new CharacterSprite(width, 8, data)); } this.malleable = malleable; } }