All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bukkit.map.MinecraftFont Maven / Gradle / Ivy

package org.bukkit.map;

/**
 * Represents the built-in Minecraft font.
 */
public class MinecraftFont extends MapFont {

  /**
   * A static non-malleable MinecraftFont.
   */
  public static final MinecraftFont Font = new MinecraftFont(false);
  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},
  };

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

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy