Bukkit/src/main/java/org/bukkit/map/MinecraftFont.java

329 lines
13 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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