Fork of Poseidon providing Bukkit #1060 to older Beta versions (b1.0-b1.7.3)
1package org.bukkit.map;
2
3/**
4 * Represents the built-in Minecraft font.
5 */
6public class MinecraftFont extends MapFont {
7
8 private static final int spaceSize = 2;
9
10 private static final String fontChars = " !\"#$%&'()*+,-./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_" + "'abcdefghijklmnopqrstuvwxyz{|}~\u007F" + "\u00C7\u00FC\u00E9\u00E2\u00E4\u00E0\u00E5\u00E7" + // Çüéâäàåç
11 "\u00EA\u00EB\u00E8\u00EF\u00EE\u00EC\u00C4\u00C5" + // êëèïîìÄÅ
12 "\u00C9\u00E6\u00C6\u00F4\u00F6\u00F2\u00FB\u00F9" + // ÉæÆôöòûù
13 "\u00FF\u00D6\u00DC\u00F8\u00A3\u00D8\u00D7\u0191" + // ÿÖÜø£Ø×ƒ
14 "\u00E1\u00ED\u00F3\u00FA\u00F1\u00D1\u00AA\u00BA" + // áíóúñѪº
15 "\u00BF\u00AE\u00AC\u00BD\u00BC\u00A1\u00AB\u00BB"; // ¿®¬½¼¡«»
16
17 private static final int[][] fontData = new int[][] {
18 /* null */ { 0, 0, 0, 0, 0, 0, 0, 0 },
19 /* 1 */ { 126, 129, 165, 129, 189, 153, 129, 126 },
20 /* 2 */ { 126, 255, 219, 255, 195, 231, 255, 126 },
21 /* 3 */ { 54, 127, 127, 127, 62, 28, 8, 0 },
22 /* 4 */ { 8, 28, 62, 127, 62, 28, 8, 0 },
23 /* 5 */ { 28, 62, 28, 127, 127, 62, 28, 62 },
24 /* 6 */ { 8, 8, 28, 62, 127, 62, 28, 62 },
25 /* 7 */ { 0, 0, 24, 60, 60, 24, 0, 0 },
26 /* 8 */ { 255, 255, 231, 195, 195, 231, 255, 255 },
27 /* 9 */ { 0, 60, 102, 66, 66, 102, 60, 0 },
28 /* 10 */ { 255, 195, 153, 189, 189, 153, 195, 255 },
29 /* 11 */ { 240, 224, 240, 190, 51, 51, 51, 30 },
30 /* 12 */ { 60, 102, 102, 102, 60, 24, 126, 24 },
31 /* 13 */ { 252, 204, 252, 12, 12, 14, 15, 7 },
32 /* 14 */ { 254, 198, 254, 198, 198, 230, 103, 3 },
33 /* 15 */ { 153, 90, 60, 231, 231, 60, 90, 153 },
34 /* 16 */ { 1, 7, 31, 127, 31, 7, 1, 0 },
35 /* 17 */ { 64, 112, 124, 127, 124, 112, 64, 0 },
36 /* 18 */ { 24, 60, 126, 24, 24, 126, 60, 24 },
37 /* 19 */ { 102, 102, 102, 102, 102, 0, 102, 0 },
38 /* 20 */ { 254, 219, 219, 222, 216, 216, 216, 0 },
39 /* 21 */ { 124, 198, 28, 54, 54, 28, 51, 30 },
40 /* 22 */ { 0, 0, 0, 0, 126, 126, 126, 0 },
41 /* 23 */ { 24, 60, 126, 24, 126, 60, 24, 255 },
42 /* 24 */ { 24, 60, 126, 24, 24, 24, 24, 0 },
43 /* 25 */ { 24, 24, 24, 24, 126, 60, 24, 0 },
44 /* 26 */ { 0, 24, 48, 127, 48, 24, 0, 0 },
45 /* 27 */ { 0, 12, 6, 127, 6, 12, 0, 0 },
46 /* 28 */ { 0, 0, 3, 3, 3, 127, 0, 0 },
47 /* 29 */ { 0, 36, 102, 255, 102, 36, 0, 0 },
48 /* 30 */ { 0, 24, 60, 126, 255, 255, 0, 0 },
49 /* 31 */ { 0, 255, 255, 126, 60, 24, 0, 0 },
50 /* */ { 0, 0, 0, 0, 0, 0, 0, 0 },
51 /* ! */ { 1, 1, 1, 1, 1, 0, 1, 0 },
52 /* " */ { 10, 10, 5, 0, 0, 0, 0, 0 },
53 /* # */ { 10, 10, 31, 10, 31, 10, 10, 0 },
54 /* $ */ { 4, 30, 1, 14, 16, 15, 4, 0 },
55 /* % */ { 17, 9, 8, 4, 2, 18, 17, 0 },
56 /* & */ { 4, 10, 4, 22, 13, 9, 22, 0 },
57 /* ' */ { 2, 2, 1, 0, 0, 0, 0, 0 },
58 /* ( */ { 12, 2, 1, 1, 1, 2, 12, 0 },
59 /* ) */ { 3, 4, 8, 8, 8, 4, 3, 0 },
60 /* * */ { 0, 0, 9, 6, 9, 0, 0, 0 },
61 /* + */ { 0, 4, 4, 31, 4, 4, 0, 0 },
62 /* , */ { 0, 0, 0, 0, 0, 1, 1, 1 },
63 /* - */ { 0, 0, 0, 31, 0, 0, 0, 0 },
64 /* . */ { 0, 0, 0, 0, 0, 1, 1, 0 },
65 /* / */ { 16, 8, 8, 4, 2, 2, 1, 0 },
66 /* 0 */ { 14, 17, 25, 21, 19, 17, 14, 0 },
67 /* 1 */ { 4, 6, 4, 4, 4, 4, 31, 0 },
68 /* 2 */ { 14, 17, 16, 12, 2, 17, 31, 0 },
69 /* 3 */ { 14, 17, 16, 12, 16, 17, 14, 0 },
70 /* 4 */ { 24, 20, 18, 17, 31, 16, 16, 0 },
71 /* 5 */ { 31, 1, 15, 16, 16, 17, 14, 0 },
72 /* 6 */ { 12, 2, 1, 15, 17, 17, 14, 0 },
73 /* 7 */ { 31, 17, 16, 8, 4, 4, 4, 0 },
74 /* 8 */ { 14, 17, 17, 14, 17, 17, 14, 0 },
75 /* 9 */ { 14, 17, 17, 30, 16, 8, 6, 0 },
76 /* : */ { 0, 1, 1, 0, 0, 1, 1, 0 },
77 /* ; */ { 0, 1, 1, 0, 0, 1, 1, 1 },
78 /* < */ { 8, 4, 2, 1, 2, 4, 8, 0 },
79 /* = */ { 0, 0, 31, 0, 0, 31, 0, 0 },
80 /* > */ { 1, 2, 4, 8, 4, 2, 1, 0 },
81 /* ? */ { 14, 17, 16, 8, 4, 0, 4, 0 },
82 /* @ */ { 30, 33, 45, 45, 61, 1, 30, 0 },
83 /* A */ { 14, 17, 31, 17, 17, 17, 17, 0 },
84 /* B */ { 15, 17, 15, 17, 17, 17, 15, 0 },
85 /* C */ { 14, 17, 1, 1, 1, 17, 14, 0 },
86 /* D */ { 15, 17, 17, 17, 17, 17, 15, 0 },
87 /* E */ { 31, 1, 7, 1, 1, 1, 31, 0 },
88 /* F */ { 31, 1, 7, 1, 1, 1, 1, 0 },
89 /* G */ { 30, 1, 25, 17, 17, 17, 14, 0 },
90 /* H */ { 17, 17, 31, 17, 17, 17, 17, 0 },
91 /* I */ { 7, 2, 2, 2, 2, 2, 7, 0 },
92 /* J */ { 16, 16, 16, 16, 16, 17, 14, 0 },
93 /* K */ { 17, 9, 7, 9, 17, 17, 17, 0 },
94 /* L */ { 1, 1, 1, 1, 1, 1, 31, 0 },
95 /* M */ { 17, 27, 21, 17, 17, 17, 17, 0 },
96 /* N */ { 17, 19, 21, 25, 17, 17, 17, 0 },
97 /* O */ { 14, 17, 17, 17, 17, 17, 14, 0 },
98 /* P */ { 15, 17, 15, 1, 1, 1, 1, 0 },
99 /* Q */ { 14, 17, 17, 17, 17, 9, 22, 0 },
100 /* R */ { 15, 17, 15, 17, 17, 17, 17, 0 },
101 /* S */ { 30, 1, 14, 16, 16, 17, 14, 0 },
102 /* T */ { 31, 4, 4, 4, 4, 4, 4, 0 },
103 /* U */ { 17, 17, 17, 17, 17, 17, 14, 0 },
104 /* V */ { 17, 17, 17, 17, 10, 10, 4, 0 },
105 /* W */ { 17, 17, 17, 17, 21, 27, 17, 0 },
106 /* X */ { 17, 10, 4, 10, 17, 17, 17, 0 },
107 /* Y */ { 17, 10, 4, 4, 4, 4, 4, 0 },
108 /* Z */ { 31, 16, 8, 4, 2, 1, 31, 0 },
109 /* [ */ { 7, 1, 1, 1, 1, 1, 7, 0 },
110 /* \ */ { 1, 2, 2, 4, 8, 8, 16, 0 },
111 /* ] */ { 7, 4, 4, 4, 4, 4, 7, 0 },
112 /* ^ */ { 4, 10, 17, 0, 0, 0, 0, 0 },
113 /* _ */ { 0, 0, 0, 0, 0, 0, 0, 31 },
114 /* ` */ { 1, 1, 2, 0, 0, 0, 0, 0 },
115 /* a */ { 0, 0, 14, 16, 30, 17, 30, 0 },
116 /* b */ { 1, 1, 13, 19, 17, 17, 15, 0 },
117 /* c */ { 0, 0, 14, 17, 1, 17, 14, 0 },
118 /* d */ { 16, 16, 22, 25, 17, 17, 30, 0 },
119 /* e */ { 0, 0, 14, 17, 31, 1, 30, 0 },
120 /* f */ { 12, 2, 15, 2, 2, 2, 2, 0 },
121 /* g */ { 0, 0, 30, 17, 17, 30, 16, 15 },
122 /* h */ { 1, 1, 13, 19, 17, 17, 17, 0 },
123 /* i */ { 1, 0, 1, 1, 1, 1, 1, 0 },
124 /* j */ { 16, 0, 16, 16, 16, 17, 17, 14 },
125 /* k */ { 1, 1, 9, 5, 3, 5, 9, 0 },
126 /* l */ { 1, 1, 1, 1, 1, 1, 2, 0 },
127 /* m */ { 0, 0, 11, 21, 21, 17, 17, 0 },
128 /* n */ { 0, 0, 15, 17, 17, 17, 17, 0 },
129 /* o */ { 0, 0, 14, 17, 17, 17, 14, 0 },
130 /* p */ { 0, 0, 13, 19, 17, 15, 1, 1 },
131 /* q */ { 0, 0, 22, 25, 17, 30, 16, 16 },
132 /* r */ { 0, 0, 13, 19, 1, 1, 1, 0 },
133 /* s */ { 0, 0, 30, 1, 14, 16, 15, 0 },
134 /* t */ { 2, 2, 7, 2, 2, 2, 4, 0 },
135 /* u */ { 0, 0, 17, 17, 17, 17, 30, 0 },
136 /* v */ { 0, 0, 17, 17, 17, 10, 4, 0 },
137 /* w */ { 0, 0, 17, 17, 21, 21, 30, 0 },
138 /* x */ { 0, 0, 17, 10, 4, 10, 17, 0 },
139 /* y */ { 0, 0, 17, 17, 17, 30, 16, 15 },
140 /* z */ { 0, 0, 31, 8, 4, 2, 31, 0 },
141 /* { */ { 12, 2, 2, 1, 2, 2, 12, 0 },
142 /* | */ { 1, 1, 1, 0, 1, 1, 1, 0 },
143 /* } */ { 3, 4, 4, 8, 4, 4, 3, 0 },
144 /* ~ */ { 38, 25, 0, 0, 0, 0, 0, 0 },
145 /* ⌂ */ { 0, 0, 4, 10, 17, 17, 31, 0 },
146 /* Ç */ { 14, 17, 1, 1, 17, 14, 16, 12 },
147 /* ü */ { 10, 0, 17, 17, 17, 17, 30, 0 },
148 /* é */ { 24, 0, 14, 17, 31, 1, 30, 0 },
149 /* â */ { 14, 17, 14, 16, 30, 17, 30, 0 },
150 /* ä */ { 10, 0, 14, 16, 30, 17, 30, 0 },
151 /* à */ { 3, 0, 14, 16, 30, 17, 30, 0 },
152 /* å */ { 4, 0, 14, 16, 30, 17, 30, 0 },
153 /* ç */ { 0, 14, 17, 1, 17, 14, 16, 12 },
154 /* ê */ { 14, 17, 14, 17, 31, 1, 30, 0 },
155 /* ë */ { 10, 0, 14, 17, 31, 1, 30, 0 },
156 /* è */ { 3, 0, 14, 17, 31, 1, 30, 0 },
157 /* ï */ { 5, 0, 2, 2, 2, 2, 2, 0 },
158 /* î */ { 14, 17, 4, 4, 4, 4, 4, 0 },
159 /* ì */ { 3, 0, 2, 2, 2, 2, 2, 0 },
160 /* Ä */ { 17, 14, 17, 31, 17, 17, 17, 0 },
161 /* Å */ { 4, 0, 14, 17, 31, 17, 17, 0 },
162 /* É */ { 24, 0, 31, 1, 7, 1, 31, 0 },
163 /* æ */ { 0, 0, 10, 20, 30, 5, 30, 0 },
164 /* Æ */ { 30, 5, 15, 5, 5, 5, 29, 0 },
165 /* ô */ { 14, 17, 14, 17, 17, 17, 14, 0 },
166 /* ö */ { 10, 0, 14, 17, 17, 17, 14, 0 },
167 /* ò */ { 3, 0, 14, 17, 17, 17, 14, 0 },
168 /* û */ { 14, 17, 0, 17, 17, 17, 30, 0 },
169 /* ù */ { 3, 0, 17, 17, 17, 17, 30, 0 },
170 /* ÿ */ { 10, 0, 17, 17, 17, 30, 16, 15 },
171 /* Ö */ { 17, 14, 17, 17, 17, 17, 14, 0 },
172 /* Ü */ { 17, 0, 17, 17, 17, 17, 14, 0 },
173 /* ø */ { 0, 0, 14, 25, 21, 19, 14, 4 },
174 /* £ */ { 12, 18, 2, 15, 2, 2, 31, 0 },
175 /* Ø */ { 14, 17, 25, 21, 19, 17, 14, 0 },
176 /* × */ { 0, 0, 5, 2, 5, 0, 0, 0 },
177 /* ƒ */ { 8, 20, 4, 14, 4, 4, 5, 2 },
178 /* á */ { 24, 0, 14, 16, 30, 17, 30, 0 },
179 /* í */ { 3, 0, 1, 1, 1, 1, 1, 0 },
180 /* ó */ { 24, 0, 14, 17, 17, 17, 14, 0 },
181 /* ú */ { 24, 0, 17, 17, 17, 17, 30, 0 },
182 /* ñ */ { 31, 0, 15, 17, 17, 17, 17, 0 },
183 /* Ñ */ { 31, 0, 17, 19, 21, 25, 17, 0 },
184 /* ª */ { 14, 16, 31, 30, 0, 31, 0, 0 },
185 /* º */ { 14, 17, 17, 14, 0, 31, 0, 0 },
186 /* ¿ */ { 4, 0, 4, 2, 1, 17, 14, 0 },
187 /* ® */ { 0, 30, 45, 37, 43, 30, 0, 0 },
188 /* ¬ */ { 0, 0, 0, 31, 16, 16, 0, 0 },
189 /* ½ */ { 17, 9, 8, 4, 18, 10, 25, 0 },
190 /* ¼ */ { 17, 9, 8, 4, 26, 26, 17, 0 },
191 /* ¡ */ { 0, 1, 0, 1, 1, 1, 1, 0 },
192 /* « */ { 0, 20, 10, 5, 10, 20, 0, 0 },
193 /* » */ { 0, 5, 10, 20, 10, 5, 0, 0 },
194 /* 176 */ { 68, 17, 68, 17, 68, 17, 68, 17 },
195 /* 177 */ { 170, 85, 170, 85, 170, 85, 170, 85 },
196 /* 178 */ { 219, 238, 219, 119, 219, 238, 219, 119 },
197 /* 179 */ { 24, 24, 24, 24, 24, 24, 24, 24 },
198 /* 180 */ { 24, 24, 24, 24, 31, 24, 24, 24 },
199 /* 181 */ { 24, 24, 31, 24, 31, 24, 24, 24 },
200 /* 182 */ { 108, 108, 108, 108, 111, 108, 108, 108 },
201 /* 183 */ { 0, 0, 0, 0, 127, 108, 108, 108 },
202 /* 184 */ { 0, 0, 31, 24, 31, 24, 24, 24 },
203 /* 185 */ { 108, 108, 111, 96, 111, 108, 108, 108 },
204 /* 186 */ { 108, 108, 108, 108, 108, 108, 108, 108 },
205 /* 187 */ { 0, 0, 127, 96, 111, 108, 108, 108 },
206 /* 188 */ { 108, 108, 111, 96, 127, 0, 0, 0 },
207 /* 189 */ { 108, 108, 108, 108, 127, 0, 0, 0 },
208 /* 190 */ { 24, 24, 31, 24, 31, 0, 0, 0 },
209 /* 191 */ { 0, 0, 0, 0, 31, 24, 24, 24 },
210 /* 192 */ { 24, 24, 24, 24, 248, 0, 0, 0 },
211 /* 193 */ { 24, 24, 24, 24, 255, 0, 0, 0 },
212 /* 194 */ { 0, 0, 0, 0, 255, 24, 24, 24 },
213 /* 195 */ { 24, 24, 24, 24, 248, 24, 24, 24 },
214 /* 196 */ { 0, 0, 0, 0, 255, 0, 0, 0 },
215 /* 197 */ { 24, 24, 24, 24, 255, 24, 24, 24 },
216 /* 198 */ { 24, 24, 248, 24, 248, 24, 24, 24 },
217 /* 199 */ { 108, 108, 108, 108, 236, 108, 108, 108 },
218 /* 200 */ { 108, 108, 236, 12, 252, 0, 0, 0 },
219 /* 201 */ { 0, 0, 252, 12, 236, 108, 108, 108 },
220 /* 202 */ { 108, 108, 239, 0, 255, 0, 0, 0 },
221 /* 203 */ { 0, 0, 255, 0, 239, 108, 108, 108 },
222 /* 204 */ { 108, 108, 236, 12, 236, 108, 108, 108 },
223 /* 205 */ { 0, 0, 255, 0, 255, 0, 0, 0 },
224 /* 206 */ { 108, 108, 239, 0, 239, 108, 108, 108 },
225 /* 207 */ { 24, 24, 255, 0, 255, 0, 0, 0 },
226 /* 208 */ { 108, 108, 108, 108, 255, 0, 0, 0 },
227 /* 209 */ { 0, 0, 255, 0, 255, 24, 24, 24 },
228 /* 210 */ { 0, 0, 0, 0, 255, 108, 108, 108 },
229 /* 211 */ { 108, 108, 108, 108, 252, 0, 0, 0 },
230 /* 212 */ { 24, 24, 248, 24, 248, 0, 0, 0 },
231 /* 213 */ { 0, 0, 248, 24, 248, 24, 24, 24 },
232 /* 214 */ { 0, 0, 0, 0, 252, 108, 108, 108 },
233 /* 215 */ { 108, 108, 108, 108, 255, 108, 108, 108 },
234 /* 216 */ { 24, 24, 255, 24, 255, 24, 24, 24 },
235 /* 217 */ { 24, 24, 24, 24, 31, 0, 0, 0 },
236 /* 218 */ { 0, 0, 0, 0, 248, 24, 24, 24 },
237 /* 219 */ { 255, 255, 255, 255, 255, 255, 255, 255 },
238 /* 220 */ { 0, 0, 0, 0, 255, 255, 255, 255 },
239 /* 221 */ { 15, 15, 15, 15, 15, 15, 15, 15 },
240 /* 222 */ { 240, 240, 240, 240, 240, 240, 240, 240 },
241 /* 223 */ { 255, 255, 255, 255, 0, 0, 0, 0 },
242 /* 224 */ { 0, 0, 110, 59, 19, 59, 110, 0 },
243 /* 225 */ { 0, 30, 51, 31, 51, 31, 3, 3 },
244 /* 226 */ { 0, 63, 51, 3, 3, 3, 3, 0 },
245 /* 227 */ { 0, 127, 54, 54, 54, 54, 54, 0 },
246 /* 228 */ { 63, 51, 6, 12, 6, 51, 63, 0 },
247 /* 229 */ { 0, 0, 126, 27, 27, 27, 14, 0 },
248 /* 230 */ { 0, 102, 102, 102, 102, 62, 6, 3 },
249 /* 231 */ { 0, 110, 59, 24, 24, 24, 24, 0 },
250 /* 232 */ { 63, 12, 30, 51, 51, 30, 12, 63 },
251 /* 233 */ { 28, 54, 99, 127, 99, 54, 28, 0 },
252 /* 234 */ { 28, 54, 99, 99, 54, 54, 119, 0 },
253 /* 235 */ { 56, 12, 24, 62, 51, 51, 30, 0 },
254 /* 236 */ { 0, 0, 126, 219, 219, 126, 0, 0 },
255 /* 237 */ { 96, 48, 126, 219, 219, 126, 6, 3 },
256 /* 238 */ { 28, 6, 3, 31, 3, 6, 28, 0 },
257 /* 239 */ { 30, 51, 51, 51, 51, 51, 51, 0 },
258 /* 240 */ { 0, 63, 0, 63, 0, 63, 0, 0 },
259 /* 241 */ { 12, 12, 63, 12, 12, 0, 63, 0 },
260 /* 242 */ { 6, 12, 24, 12, 6, 0, 63, 0 },
261 /* 243 */ { 24, 12, 6, 12, 24, 0, 63, 0 },
262 /* 244 */ { 112, 216, 216, 24, 24, 24, 24, 24 },
263 /* 245 */ { 24, 24, 24, 24, 24, 27, 27, 14 },
264 /* 246 */ { 12, 12, 0, 63, 0, 12, 12, 0 },
265 /* 247 */ { 0, 110, 59, 0, 110, 59, 0, 0 },
266 /* 248 */ { 28, 54, 54, 28, 0, 0, 0, 0 },
267 /* 249 */ { 0, 0, 0, 24, 24, 0, 0, 0 },
268 /* 250 */ { 0, 0, 0, 0, 24, 0, 0, 0 },
269 /* 251 */ { 240, 48, 48, 48, 55, 54, 60, 56 },
270 /* 252 */ { 30, 54, 54, 54, 54, 0, 0, 0 },
271 /* 253 */ { 14, 24, 12, 6, 30, 0, 0, 0 },
272 /* 254 */ { 0, 0, 60, 60, 60, 60, 0, 0 },
273 /* 255 */ { 0, 0, 0, 0, 0, 0, 0, 0 }, };
274
275 /**
276 * A static non-malleable MinecraftFont.
277 */
278 public static final MinecraftFont Font = new MinecraftFont(false);
279
280 /**
281 * Initialize a new MinecraftFont.
282 */
283 public MinecraftFont() {
284 this(true);
285 }
286
287 private MinecraftFont(boolean malleable) {
288 for (int i = 1; i < fontData.length; ++i) {
289 char ch = (char) i;
290 if (i >= 32 && i < 32 + fontChars.length()) {
291 ch = fontChars.charAt(i - 32);
292 }
293
294 if (ch == ' ') {
295 setChar(ch, new CharacterSprite(spaceSize, 8, new boolean[spaceSize * 8]));
296 continue;
297 }
298
299 int[] rows = fontData[i];
300 int width = 0;
301 for (int r = 0; r < 8; ++r) {
302 for (int c = 0; c < 8; ++c) {
303 if ((rows[r] & (1 << c)) != 0 && c > width) {
304 width = c;
305 }
306 }
307 }
308 ++width;
309
310 boolean[] data = new boolean[width * 8];
311 for (int r = 0; r < 8; ++r) {
312 for (int c = 0; c < width; ++c) {
313 data[r * width + c] = (rows[r] & (1 << c)) != 0;
314 }
315 }
316
317 setChar(ch, new CharacterSprite(width, 8, data));
318 }
319
320 this.malleable = malleable;
321 }
322
323}