001 package org.bukkit.map; 002 003 /** 004 * Represents the built-in Minecraft font. 005 */ 006 public class MinecraftFont extends MapFont { 007 008 private static final int spaceSize = 2; 009 010 private static final String fontChars = 011 " !\"#$%&'()*+,-./0123456789:;<=>?" + 012 "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + 013 "'abcdefghijklmnopqrstuvwxyz{|}~\u007F" + 014 "\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7" + // Çüéâäàåç 015 "\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5" + // êëèïîìÄÅ 016 "\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9" + // ÉæÆôöòûù 017 "\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0191" + // ÿÖÜø£Ø×? 018 "\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA" + // áíóúñѪº 019 "\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB"; // ¿®¬½¼¡«» 020 021 private static final int[][] fontData = new int[][] { 022 /* null */ {0,0,0,0,0,0,0,0}, 023 /* 1 */ {126,129,165,129,189,153,129,126}, 024 /* 2 */ {126,255,219,255,195,231,255,126}, 025 /* 3 */ {54,127,127,127,62,28,8,0}, 026 /* 4 */ {8,28,62,127,62,28,8,0}, 027 /* 5 */ {28,62,28,127,127,62,28,62}, 028 /* 6 */ {8,8,28,62,127,62,28,62}, 029 /* 7 */ {0,0,24,60,60,24,0,0}, 030 /* 8 */ {255,255,231,195,195,231,255,255}, 031 /* 9 */ {0,60,102,66,66,102,60,0}, 032 /* 10 */ {255,195,153,189,189,153,195,255}, 033 /* 11 */ {240,224,240,190,51,51,51,30}, 034 /* 12 */ {60,102,102,102,60,24,126,24}, 035 /* 13 */ {252,204,252,12,12,14,15,7}, 036 /* 14 */ {254,198,254,198,198,230,103,3}, 037 /* 15 */ {153,90,60,231,231,60,90,153}, 038 /* 16 */ {1,7,31,127,31,7,1,0}, 039 /* 17 */ {64,112,124,127,124,112,64,0}, 040 /* 18 */ {24,60,126,24,24,126,60,24}, 041 /* 19 */ {102,102,102,102,102,0,102,0}, 042 /* 20 */ {254,219,219,222,216,216,216,0}, 043 /* 21 */ {124,198,28,54,54,28,51,30}, 044 /* 22 */ {0,0,0,0,126,126,126,0}, 045 /* 23 */ {24,60,126,24,126,60,24,255}, 046 /* 24 */ {24,60,126,24,24,24,24,0}, 047 /* 25 */ {24,24,24,24,126,60,24,0}, 048 /* 26 */ {0,24,48,127,48,24,0,0}, 049 /* 27 */ {0,12,6,127,6,12,0,0}, 050 /* 28 */ {0,0,3,3,3,127,0,0}, 051 /* 29 */ {0,36,102,255,102,36,0,0}, 052 /* 30 */ {0,24,60,126,255,255,0,0}, 053 /* 31 */ {0,255,255,126,60,24,0,0}, 054 /* */ {0,0,0,0,0,0,0,0}, 055 /* ! */ {1,1,1,1,1,0,1,0}, 056 /* " */ {10,10,5,0,0,0,0,0}, 057 /* # */ {10,10,31,10,31,10,10,0}, 058 /* $ */ {4,30,1,14,16,15,4,0}, 059 /* % */ {17,9,8,4,2,18,17,0}, 060 /* & */ {4,10,4,22,13,9,22,0}, 061 /* ' */ {2,2,1,0,0,0,0,0}, 062 /* ( */ {12,2,1,1,1,2,12,0}, 063 /* ) */ {3,4,8,8,8,4,3,0}, 064 /* * */ {0,0,9,6,9,0,0,0}, 065 /* + */ {0,4,4,31,4,4,0,0}, 066 /* , */ {0,0,0,0,0,1,1,1}, 067 /* - */ {0,0,0,31,0,0,0,0}, 068 /* . */ {0,0,0,0,0,1,1,0}, 069 /* / */ {16,8,8,4,2,2,1,0}, 070 /* 0 */ {14,17,25,21,19,17,14,0}, 071 /* 1 */ {4,6,4,4,4,4,31,0}, 072 /* 2 */ {14,17,16,12,2,17,31,0}, 073 /* 3 */ {14,17,16,12,16,17,14,0}, 074 /* 4 */ {24,20,18,17,31,16,16,0}, 075 /* 5 */ {31,1,15,16,16,17,14,0}, 076 /* 6 */ {12,2,1,15,17,17,14,0}, 077 /* 7 */ {31,17,16,8,4,4,4,0}, 078 /* 8 */ {14,17,17,14,17,17,14,0}, 079 /* 9 */ {14,17,17,30,16,8,6,0}, 080 /* : */ {0,1,1,0,0,1,1,0}, 081 /* ; */ {0,1,1,0,0,1,1,1}, 082 /* < */ {8,4,2,1,2,4,8,0}, 083 /* = */ {0,0,31,0,0,31,0,0}, 084 /* > */ {1,2,4,8,4,2,1,0}, 085 /* ? */ {14,17,16,8,4,0,4,0}, 086 /* @ */ {30,33,45,45,61,1,30,0}, 087 /* A */ {14,17,31,17,17,17,17,0}, 088 /* B */ {15,17,15,17,17,17,15,0}, 089 /* C */ {14,17,1,1,1,17,14,0}, 090 /* D */ {15,17,17,17,17,17,15,0}, 091 /* E */ {31,1,7,1,1,1,31,0}, 092 /* F */ {31,1,7,1,1,1,1,0}, 093 /* G */ {30,1,25,17,17,17,14,0}, 094 /* H */ {17,17,31,17,17,17,17,0}, 095 /* I */ {7,2,2,2,2,2,7,0}, 096 /* J */ {16,16,16,16,16,17,14,0}, 097 /* K */ {17,9,7,9,17,17,17,0}, 098 /* L */ {1,1,1,1,1,1,31,0}, 099 /* M */ {17,27,21,17,17,17,17,0}, 100 /* N */ {17,19,21,25,17,17,17,0}, 101 /* O */ {14,17,17,17,17,17,14,0}, 102 /* P */ {15,17,15,1,1,1,1,0}, 103 /* Q */ {14,17,17,17,17,9,22,0}, 104 /* R */ {15,17,15,17,17,17,17,0}, 105 /* S */ {30,1,14,16,16,17,14,0}, 106 /* T */ {31,4,4,4,4,4,4,0}, 107 /* U */ {17,17,17,17,17,17,14,0}, 108 /* V */ {17,17,17,17,10,10,4,0}, 109 /* W */ {17,17,17,17,21,27,17,0}, 110 /* X */ {17,10,4,10,17,17,17,0}, 111 /* Y */ {17,10,4,4,4,4,4,0}, 112 /* Z */ {31,16,8,4,2,1,31,0}, 113 /* [ */ {7,1,1,1,1,1,7,0}, 114 /* \ */ {1,2,2,4,8,8,16,0}, 115 /* ] */ {7,4,4,4,4,4,7,0}, 116 /* ^ */ {4,10,17,0,0,0,0,0}, 117 /* _ */ {0,0,0,0,0,0,0,31}, 118 /* ` */ {1,1,2,0,0,0,0,0}, 119 /* a */ {0,0,14,16,30,17,30,0}, 120 /* b */ {1,1,13,19,17,17,15,0}, 121 /* c */ {0,0,14,17,1,17,14,0}, 122 /* d */ {16,16,22,25,17,17,30,0}, 123 /* e */ {0,0,14,17,31,1,30,0}, 124 /* f */ {12,2,15,2,2,2,2,0}, 125 /* g */ {0,0,30,17,17,30,16,15}, 126 /* h */ {1,1,13,19,17,17,17,0}, 127 /* i */ {1,0,1,1,1,1,1,0}, 128 /* j */ {16,0,16,16,16,17,17,14}, 129 /* k */ {1,1,9,5,3,5,9,0}, 130 /* l */ {1,1,1,1,1,1,2,0}, 131 /* m */ {0,0,11,21,21,17,17,0}, 132 /* n */ {0,0,15,17,17,17,17,0}, 133 /* o */ {0,0,14,17,17,17,14,0}, 134 /* p */ {0,0,13,19,17,15,1,1}, 135 /* q */ {0,0,22,25,17,30,16,16}, 136 /* r */ {0,0,13,19,1,1,1,0}, 137 /* s */ {0,0,30,1,14,16,15,0}, 138 /* t */ {2,2,7,2,2,2,4,0}, 139 /* u */ {0,0,17,17,17,17,30,0}, 140 /* v */ {0,0,17,17,17,10,4,0}, 141 /* w */ {0,0,17,17,21,21,30,0}, 142 /* x */ {0,0,17,10,4,10,17,0}, 143 /* y */ {0,0,17,17,17,30,16,15}, 144 /* z */ {0,0,31,8,4,2,31,0}, 145 /* { */ {12,2,2,1,2,2,12,0}, 146 /* | */ {1,1,1,0,1,1,1,0}, 147 /* } */ {3,4,4,8,4,4,3,0}, 148 /* ~ */ {38,25,0,0,0,0,0,0}, 149 /* ? */ {0,0,4,10,17,17,31,0}, 150 /* Ç */ {14,17,1,1,17,14,16,12}, 151 /* ü */ {10,0,17,17,17,17,30,0}, 152 /* é */ {24,0,14,17,31,1,30,0}, 153 /* â */ {14,17,14,16,30,17,30,0}, 154 /* ä */ {10,0,14,16,30,17,30,0}, 155 /* à */ {3,0,14,16,30,17,30,0}, 156 /* å */ {4,0,14,16,30,17,30,0}, 157 /* ç */ {0,14,17,1,17,14,16,12}, 158 /* ê */ {14,17,14,17,31,1,30,0}, 159 /* ë */ {10,0,14,17,31,1,30,0}, 160 /* è */ {3,0,14,17,31,1,30,0}, 161 /* ï */ {5,0,2,2,2,2,2,0}, 162 /* î */ {14,17,4,4,4,4,4,0}, 163 /* ì */ {3,0,2,2,2,2,2,0}, 164 /* Ä */ {17,14,17,31,17,17,17,0}, 165 /* Å */ {4,0,14,17,31,17,17,0}, 166 /* É */ {24,0,31,1,7,1,31,0}, 167 /* æ */ {0,0,10,20,30,5,30,0}, 168 /* Æ */ {30,5,15,5,5,5,29,0}, 169 /* ô */ {14,17,14,17,17,17,14,0}, 170 /* ö */ {10,0,14,17,17,17,14,0}, 171 /* ò */ {3,0,14,17,17,17,14,0}, 172 /* û */ {14,17,0,17,17,17,30,0}, 173 /* ù */ {3,0,17,17,17,17,30,0}, 174 /* ÿ */ {10,0,17,17,17,30,16,15}, 175 /* Ö */ {17,14,17,17,17,17,14,0}, 176 /* Ü */ {17,0,17,17,17,17,14,0}, 177 /* ø */ {0,0,14,25,21,19,14,4}, 178 /* £ */ {12,18,2,15,2,2,31,0}, 179 /* Ø */ {14,17,25,21,19,17,14,0}, 180 /* × */ {0,0,5,2,5,0,0,0}, 181 /* ? */ {8,20,4,14,4,4,5,2}, 182 /* á */ {24,0,14,16,30,17,30,0}, 183 /* í */ {3,0,1,1,1,1,1,0}, 184 /* ó */ {24,0,14,17,17,17,14,0}, 185 /* ú */ {24,0,17,17,17,17,30,0}, 186 /* ñ */ {31,0,15,17,17,17,17,0}, 187 /* Ñ */ {31,0,17,19,21,25,17,0}, 188 /* ª */ {14,16,31,30,0,31,0,0}, 189 /* º */ {14,17,17,14,0,31,0,0}, 190 /* ¿ */ {4,0,4,2,1,17,14,0}, 191 /* ® */ {0,30,45,37,43,30,0,0}, 192 /* ¬ */ {0,0,0,31,16,16,0,0}, 193 /* ½ */ {17,9,8,4,18,10,25,0}, 194 /* ¼ */ {17,9,8,4,26,26,17,0}, 195 /* ¡ */ {0,1,0,1,1,1,1,0}, 196 /* « */ {0,20,10,5,10,20,0,0}, 197 /* » */ {0,5,10,20,10,5,0,0}, 198 /* 176 */ {68,17,68,17,68,17,68,17}, 199 /* 177 */ {170,85,170,85,170,85,170,85}, 200 /* 178 */ {219,238,219,119,219,238,219,119}, 201 /* 179 */ {24,24,24,24,24,24,24,24}, 202 /* 180 */ {24,24,24,24,31,24,24,24}, 203 /* 181 */ {24,24,31,24,31,24,24,24}, 204 /* 182 */ {108,108,108,108,111,108,108,108}, 205 /* 183 */ {0,0,0,0,127,108,108,108}, 206 /* 184 */ {0,0,31,24,31,24,24,24}, 207 /* 185 */ {108,108,111,96,111,108,108,108}, 208 /* 186 */ {108,108,108,108,108,108,108,108}, 209 /* 187 */ {0,0,127,96,111,108,108,108}, 210 /* 188 */ {108,108,111,96,127,0,0,0}, 211 /* 189 */ {108,108,108,108,127,0,0,0}, 212 /* 190 */ {24,24,31,24,31,0,0,0}, 213 /* 191 */ {0,0,0,0,31,24,24,24}, 214 /* 192 */ {24,24,24,24,248,0,0,0}, 215 /* 193 */ {24,24,24,24,255,0,0,0}, 216 /* 194 */ {0,0,0,0,255,24,24,24}, 217 /* 195 */ {24,24,24,24,248,24,24,24}, 218 /* 196 */ {0,0,0,0,255,0,0,0}, 219 /* 197 */ {24,24,24,24,255,24,24,24}, 220 /* 198 */ {24,24,248,24,248,24,24,24}, 221 /* 199 */ {108,108,108,108,236,108,108,108}, 222 /* 200 */ {108,108,236,12,252,0,0,0}, 223 /* 201 */ {0,0,252,12,236,108,108,108}, 224 /* 202 */ {108,108,239,0,255,0,0,0}, 225 /* 203 */ {0,0,255,0,239,108,108,108}, 226 /* 204 */ {108,108,236,12,236,108,108,108}, 227 /* 205 */ {0,0,255,0,255,0,0,0}, 228 /* 206 */ {108,108,239,0,239,108,108,108}, 229 /* 207 */ {24,24,255,0,255,0,0,0}, 230 /* 208 */ {108,108,108,108,255,0,0,0}, 231 /* 209 */ {0,0,255,0,255,24,24,24}, 232 /* 210 */ {0,0,0,0,255,108,108,108}, 233 /* 211 */ {108,108,108,108,252,0,0,0}, 234 /* 212 */ {24,24,248,24,248,0,0,0}, 235 /* 213 */ {0,0,248,24,248,24,24,24}, 236 /* 214 */ {0,0,0,0,252,108,108,108}, 237 /* 215 */ {108,108,108,108,255,108,108,108}, 238 /* 216 */ {24,24,255,24,255,24,24,24}, 239 /* 217 */ {24,24,24,24,31,0,0,0}, 240 /* 218 */ {0,0,0,0,248,24,24,24}, 241 /* 219 */ {255,255,255,255,255,255,255,255}, 242 /* 220 */ {0,0,0,0,255,255,255,255}, 243 /* 221 */ {15,15,15,15,15,15,15,15}, 244 /* 222 */ {240,240,240,240,240,240,240,240}, 245 /* 223 */ {255,255,255,255,0,0,0,0}, 246 /* 224 */ {0,0,110,59,19,59,110,0}, 247 /* 225 */ {0,30,51,31,51,31,3,3}, 248 /* 226 */ {0,63,51,3,3,3,3,0}, 249 /* 227 */ {0,127,54,54,54,54,54,0}, 250 /* 228 */ {63,51,6,12,6,51,63,0}, 251 /* 229 */ {0,0,126,27,27,27,14,0}, 252 /* 230 */ {0,102,102,102,102,62,6,3}, 253 /* 231 */ {0,110,59,24,24,24,24,0}, 254 /* 232 */ {63,12,30,51,51,30,12,63}, 255 /* 233 */ {28,54,99,127,99,54,28,0}, 256 /* 234 */ {28,54,99,99,54,54,119,0}, 257 /* 235 */ {56,12,24,62,51,51,30,0}, 258 /* 236 */ {0,0,126,219,219,126,0,0}, 259 /* 237 */ {96,48,126,219,219,126,6,3}, 260 /* 238 */ {28,6,3,31,3,6,28,0}, 261 /* 239 */ {30,51,51,51,51,51,51,0}, 262 /* 240 */ {0,63,0,63,0,63,0,0}, 263 /* 241 */ {12,12,63,12,12,0,63,0}, 264 /* 242 */ {6,12,24,12,6,0,63,0}, 265 /* 243 */ {24,12,6,12,24,0,63,0}, 266 /* 244 */ {112,216,216,24,24,24,24,24}, 267 /* 245 */ {24,24,24,24,24,27,27,14}, 268 /* 246 */ {12,12,0,63,0,12,12,0}, 269 /* 247 */ {0,110,59,0,110,59,0,0}, 270 /* 248 */ {28,54,54,28,0,0,0,0}, 271 /* 249 */ {0,0,0,24,24,0,0,0}, 272 /* 250 */ {0,0,0,0,24,0,0,0}, 273 /* 251 */ {240,48,48,48,55,54,60,56}, 274 /* 252 */ {30,54,54,54,54,0,0,0}, 275 /* 253 */ {14,24,12,6,30,0,0,0}, 276 /* 254 */ {0,0,60,60,60,60,0,0}, 277 /* 255 */ {0,0,0,0,0,0,0,0}, 278 }; 279 280 /** 281 * A static non-malleable MinecraftFont. 282 */ 283 public static final MinecraftFont Font = new MinecraftFont(false); 284 285 /** 286 * Initialize a new MinecraftFont. 287 */ 288 public MinecraftFont() { 289 this(true); 290 } 291 292 private MinecraftFont(boolean malleable) { 293 for (int i = 1; i < fontData.length; ++i) { 294 char ch = (char) i; 295 if (i >= 32 && i < 32 + fontChars.length()) { 296 ch = fontChars.charAt(i - 32); 297 } 298 299 if (ch == ' ') { 300 setChar(ch, new CharacterSprite(spaceSize, 8, new boolean[spaceSize * 8])); 301 continue; 302 } 303 304 int[] rows = fontData[i]; 305 int width = 0; 306 for (int r = 0; r < 8; ++r) { 307 for (int c = 0; c < 8; ++c) { 308 if ((rows[r] & (1 << c)) != 0 && c > width) { 309 width = c; 310 } 311 } 312 } 313 ++width; 314 315 boolean[] data = new boolean[width * 8]; 316 for (int r = 0; r < 8; ++r) { 317 for (int c = 0; c < width; ++c) { 318 data[r * width + c] = (rows[r] & (1 << c)) != 0; 319 } 320 } 321 322 setChar(ch, new CharacterSprite(width, 8, data)); 323 } 324 325 this.malleable = malleable; 326 } 327 328 }