Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / map / MinecraftFont.java
@vlad20012 vlad20012 on 24 Feb 2017 14 KB initial
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;
	}

}