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; } }