-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathChat.html
More file actions
2913 lines (2899 loc) · 81.3 KB
/
Copy pathChat.html
File metadata and controls
2913 lines (2899 loc) · 81.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html class="client-nojs" lang="en" dir="ltr">
<head>
<meta charset="UTF-8"/>
<title>Chat - wiki.vg</title>
<script>document.documentElement.className = document.documentElement.className.replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );</script>
<script>(window.RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Chat","wgTitle":"Chat","wgCurRevisionId":13165,"wgRevisionId":13165,"wgArticleId":59,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Need Info","Protocol Details","Minecraft Modern"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"Chat","wgRelevantArticleId":59,"wgRequestId":"35fdb8e02b9097064dbd0dc0","wgIsProbablyEditable":false,"wgRestrictionEdit":[],"wgRestrictionMove":[]});mw.loader.state({"site.styles":"ready","noscript":"ready","user.styles":"ready","user.cssprefs":"ready","user":"ready","user.options":"loading","user.tokens":"loading","ext.pygments":"ready","ext.cite.styles":"ready","mediawiki.legacy.shared":"ready","mediawiki.legacy.commonPrint":"ready","mediawiki.sectionAnchor":"ready","mediawiki.skinning.interface":"ready","skins.vector.styles":"ready"});mw.loader.implement("user.options@0j3lz3q",function($,jQuery,require,module){mw.user.options.set({"variant":"en"});});mw.loader.implement("user.tokens@12oj1re",function ( $, jQuery, require, module ) {
mw.user.tokens.set({"editToken":"+\\","patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"});/*@nomin*/;
});mw.loader.load(["mediawiki.page.startup","skins.vector.js"]);});</script>
<link rel="stylesheet" href="https://wiki.vg/load.php?debug=false&lang=en&modules=ext.cite.styles%7Cext.pygments%7Cmediawiki.legacy.commonPrint%2Cshared%7Cmediawiki.sectionAnchor%7Cmediawiki.skinning.interface%7Cskins.vector.styles&only=styles&skin=vector"/>
<script async="" src="https://wiki.vg/load.php?debug=false&lang=en&modules=startup&only=scripts&skin=vector"></script>
<meta name="ResourceLoaderDynamicStyles" content=""/>
<link rel="stylesheet" href="https://wiki.vg/load.php?debug=false&lang=en&modules=site.styles&only=styles&skin=vector"/>
<meta name="generator" content="MediaWiki 1.28.2"/>
<link rel="shortcut icon" href="https://wiki.vg/favicon.ico"/>
<link rel="search" type="application/opensearchdescription+xml" href="https://wiki.vg/opensearch_desc.php" title="wiki.vg (en)"/>
<link rel="EditURI" type="application/rsd+xml" href="http://wiki.vg/api.php?action=rsd"/>
<link rel="copyright" href="http://creativecommons.org/licenses/by-sa/3.0/"/>
<link rel="alternate" type="application/atom+xml" title="wiki.vg Atom feed" href="https://wiki.vg/index.php?title=Special:RecentChanges&feed=atom"/>
</head>
<body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Chat rootpage-Chat skin-vector action-view"> <div id="mw-page-base" class="noprint"></div>
<div id="mw-head-base" class="noprint"></div>
<div id="content" class="mw-body" role="main">
<a id="top"></a>
<div class="mw-indicators">
</div>
<h1 id="firstHeading" class="firstHeading" lang="en">Chat</h1>
<div id="bodyContent" class="mw-body-content">
<div id="siteSub">From wiki.vg</div>
<div id="contentSub"></div>
<div id="jump-to-nav" class="mw-jump">
Jump to: <a href="Chat.html#mw-head">navigation</a>, <a href="Chat.html#p-search">search</a>
</div>
<div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><p>Minecraft supports two-way <b>chat</b> communication via the <a href="Protocol.html#Chat_Message_.28clientbound.29" title="Protocol">Chat Message</a> packet, which support a variety of formatting options. Note that this system isn't exclusive to the Chat Message packet - it's used in several other places (including written books, death messages, window titles, and the like).
</p>
<div id="toc" class="toc"><div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="Chat.html#Current_system_.28JSON_Chat.29"><span class="tocnumber">1</span> <span class="toctext">Current system (JSON Chat)</span></a>
<ul>
<li class="toclevel-2 tocsection-2"><a href="Chat.html#Inheritance"><span class="tocnumber">1.1</span> <span class="toctext">Inheritance</span></a></li>
<li class="toclevel-2 tocsection-3"><a href="Chat.html#Schema"><span class="tocnumber">1.2</span> <span class="toctext">Schema</span></a>
<ul>
<li class="toclevel-3 tocsection-4"><a href="Chat.html#Shared_between_all_components"><span class="tocnumber">1.2.1</span> <span class="toctext">Shared between all components</span></a></li>
<li class="toclevel-3 tocsection-5"><a href="Chat.html#String_component"><span class="tocnumber">1.2.2</span> <span class="toctext">String component</span></a></li>
<li class="toclevel-3 tocsection-6"><a href="Chat.html#Translation_component"><span class="tocnumber">1.2.3</span> <span class="toctext">Translation component</span></a></li>
<li class="toclevel-3 tocsection-7"><a href="Chat.html#Keybind_component"><span class="tocnumber">1.2.4</span> <span class="toctext">Keybind component</span></a></li>
<li class="toclevel-3 tocsection-8"><a href="Chat.html#Score_component"><span class="tocnumber">1.2.5</span> <span class="toctext">Score component</span></a></li>
<li class="toclevel-3 tocsection-9"><a href="Chat.html#Selector_component"><span class="tocnumber">1.2.6</span> <span class="toctext">Selector component</span></a></li>
</ul>
</li>
<li class="toclevel-2 tocsection-10"><a href="Chat.html#Examples"><span class="tocnumber">1.3</span> <span class="toctext">Examples</span></a>
<ul>
<li class="toclevel-3 tocsection-11"><a href="Chat.html#Standard_chat_message"><span class="tocnumber">1.3.1</span> <span class="toctext">Standard chat message</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="toclevel-1 tocsection-12"><a href="Chat.html#Old_system"><span class="tocnumber">2</span> <span class="toctext">Old system</span></a>
<ul>
<li class="toclevel-2 tocsection-13"><a href="Chat.html#Control_Sequences"><span class="tocnumber">2.1</span> <span class="toctext">Control Sequences</span></a>
<ul>
<li class="toclevel-3 tocsection-14"><a href="Chat.html#Colors"><span class="tocnumber">2.1.1</span> <span class="toctext">Colors</span></a></li>
<li class="toclevel-3 tocsection-15"><a href="Chat.html#Styles"><span class="tocnumber">2.1.2</span> <span class="toctext">Styles</span></a></li>
</ul>
</li>
</ul>
</li>
<li class="toclevel-1 tocsection-16"><a href="Chat.html#Processing_chat"><span class="tocnumber">3</span> <span class="toctext">Processing chat</span></a></li>
<li class="toclevel-1 tocsection-17"><a href="Chat.html#Font"><span class="tocnumber">4</span> <span class="toctext">Font</span></a></li>
<li class="toclevel-1 tocsection-18"><a href="Chat.html#Notes"><span class="tocnumber">5</span> <span class="toctext">Notes</span></a></li>
</ul>
</div>
<h2><span class="mw-headline" id="Current_system_.28JSON_Chat.29">Current system (JSON Chat)</span></h2>
<p>Chat data is sent in JSON. For most situations, the JSON is strictly parsed, but <a rel="nofollow" class="external text" href="https://google.github.io/gson/apidocs/com/google/gson/stream/JsonReader.html#setLenient-boolean-">lenient JSON parsing</a> is used for the Disconnect packet and for written book text.
</p>
<h3><span class="mw-headline" id="Inheritance">Inheritance</span></h3>
<p>Each component can have multiple <i>siblings</i>. Each sibling component inherits properties from the style of its parent, using those styles if they are not defined in the sibling's own style.
</p><p>For example, in this component:
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="p">{</span>
<span class="s2">"text"</span><span class="o">:</span> <span class="s2">"foo"</span><span class="p">,</span>
<span class="s2">"bold"</span><span class="o">:</span> <span class="s2">"true"</span><span class="p">,</span>
<span class="s2">"extra"</span><span class="o">:</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">"text"</span><span class="o">:</span> <span class="s2">"bar"</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s2">"text"</span><span class="o">:</span> <span class="s2">"baz"</span><span class="p">,</span>
<span class="s2">"bold"</span><span class="o">:</span> <span class="s2">"false"</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s2">"text"</span><span class="o">:</span> <span class="s2">"qux"</span><span class="p">,</span>
<span class="s2">"bold"</span><span class="o">:</span> <span class="s2">"true"</span>
<span class="p">}]</span>
<span class="p">}</span>
</pre></div>
<p>The text "foo", "bar", and "qux" are all rendered as bold while "baz" is not.
</p>
<h3><span class="mw-headline" id="Schema">Schema</span></h3>
<p>Each situation where a component can appear may be either a JSON object (the most common choice), an array, or a JSON primitive (which is converted to a String).
</p><p>JSON primitives can be used for components, in which case they are implicitly converted into a String component. Note that it is invalid to have a JSON primitive as the root object, so it is <b>not</b> valid to merely send the text in quotes. This shorthand is useful for sibling lists, though.
</p><p>It is also legal to put a JSON array where a component would go, so long as the array is not empty. The first component in the array is the parent of all of the following components. This can produce unusual behavior with style inheritance, but it is still useful shorthand.
</p><p>The most common type of component is a JSON object; the format is as follows:
</p>
<h4><span class="mw-headline" id="Shared_between_all_components">Shared between all components</span></h4>
<p>All component types have certain fields that represent the style. All of these fields may be skipped, in which case the parent's style will be inherited.
</p>
<dl><dt><code>bold</code></dt>
<dd>Boolean - if <code>true</code>, the component is emboldened.</dd>
<dt><code>italic</code></dt>
<dd>Boolean - if <code>true</code>, the component is italicized.</dd>
<dt><code>underlined</code></dt>
<dd>Boolean - if <code>true</code>, the component is underlined.</dd>
<dt><code>strikethrough</code></dt>
<dd>Boolean - if <code>true</code>, the component is struck out.</dd>
<dt><code>obfuscated</code></dt>
<dd>Boolean - if <code>true</code>, the component randomly switches between characters of the same width.</dd>
<dt><code>color</code></dt>
<dd>String - contains the color for the component. Should be one of the normal <a href="Chat.html#Colors">colors</a>, but can also be a <a href="Chat.html#Styles">format code</a> (however, the fields relating to styles should be used instead for that purpose). If not present (or set to <code>reset</code>), then the default color for the text will be used, which varies by the situation (in some cases, it is white; in others, it is black; in still others, it is a shade of gray that isn't normally used on text).</dd>
<dt><code>insertion</code></dt>
<dd>String - contains text to insert. Only used for messages in chat. When shift is held, clicking the component <em>inserts</em> the given text into the chat box at the cursor (potentially replacing selected text). Has no effect on other locations at this time.</dd>
<dt><code>clickEvent</code></dt>
<dd>JSON object - Defines an event that occurs when this component is clicked. Contains an <code>action</code> key and a <code>value</code> key. <code>value</code> is internally handled as a String, although it can be any type of JSON primitive.
<dl><dt><code>open_url</code></dt>
<dd>Opens the given URL in the default web browser. Ignored if the player has opted to disable links in chat; may open a GUI prompting the user if the setting for that is enabled. The link's protocol must be set and must be <code>http</code> or <code>https</code>, for security reasons.</dd>
<dt><s><code>open_file</code></s></dt>
<dd><strong>Cannot be used within JSON chat</strong>. Opens a link to any protocol, but cannot be used in JSON chat for security reasons. Only exists to internally implement links for screenshots.</dd>
<dt><code>run_command</code></dt>
<dd>Runs the given command. Not required to be a command - clicking this only causes the client to send the given content as a chat message, so if not prefixed with <code>/</code>, they will say the given text instead. If used in a book GUI, the GUI is closed after clicking.</dd>
<dt><s><code>twitch_user_info</code></s></dt>
<dd><strong>No longer supported; cannot be used within JSON chat</strong>. Only usable in 1.8 and below; twitch support was removed in 1.9. Additionally, this is only used internally by the client. On click, opens a twitch user info GUI screen. Value should be the twitch user name.</dd>
<dt><code>suggest_command</code></dt>
<dd>Only usable for messages in chat. Replaces the content of the chat box with the given text - usually a command, but it is not required to be a command (commands should be prefixed with <code>/</code>).</dd>
<dt><code>change_page</code></dt>
<dd>Only usable within written books. Changes the page of the book to the given page, starting at 1. For instance, <code>"value":1</code> switches the book to the first page. If the page is less than one or beyond the number of pages in the book, the event is ignored.</dd></dl></dd></dl>
<dl><dt><code>hoverEvent</code></dt>
<dd>JSON object - Defines an event that occurs when this component hovered over. Contains an <code>action</code> key and a <code>value</code> key; action is a String and value is a text component. However, since text components can be serialized as primitives as well as arrays and objects, this can directly be a String. A list of actions:
<dl><dt><code>show_text</code></dt>
<dd>The text to display. Can either be a string directly (<code>"value":"la"</code>) or a full component (<code>"value":{"text":"la","color":"red"}</code>).</dd>
<dt><code>show_item</code></dt>
<dd>The NBT of the item to display, in the JSON-NBT format (as would be used in <code>/give</code>). Note that this is a String and not a JSON object - it should either be set in a String directly (<code>"value":"{id:35,Damage:5,Count:2,tag:{display:{Name:Testing}}}"</code>) or as text of a component (<code>"value":{"text":"{id:35,Damage:5,Count:2,tag:{display:{Name:Testing}}}"}</code>). If the item is invalid, "Invalid Item!" will be drawn in red instead.</dd>
<dt><code>show_entity</code></dt>
<dd>A JSON-NBT String describing the entity. Contains 3 values: <code>id</code>, the entity's UUID (with dashes); <code>type</code> (optional), which contains the resource location for the entity's type (eg <code>minecraft:zombie</code>); and <code>name</code>, which contains the entity's custom name (if present). Note that this is a String and not a JSON object. It should be set in a String directly (<code>"value":"{id:7e4a61cc-83fa-4441-a299-bf69786e610a,type:minecraft:zombie,name:Zombie}"</code>) or as the content of a component. If the entity is invalid, "Invalid Entity!" will be displayed. Note that the client does <i>not</i> need to have the given entity loaded.</dd>
<dt><s><code>show_achievement</code></s></dt>
<dd><strong>No longer supported</strong>. Since 1.12, this no longer exists; advancements instead simply use <code>show_text</code>. The ID of an achievement or statistic to display. Example: <code>"value":"achievement.openInventory"</code>.</dd></dl></dd></dl>
<dl><dt><code>extra</code></dt>
<dd>An array of sibling components. If present, cannot be empty.</dd></dl>
<p>Beyond that, there are additional properties. Attempt to parse as each of the following in the order they are described:
</p>
<h4><span class="mw-headline" id="String_component">String component</span></h4>
<p>A String component contains only text. If the JSON contains a <code>text</code> key, then the component is a String component. The only content of this component is its text, with no additional processing.
</p>
<h4><span class="mw-headline" id="Translation_component">Translation component</span></h4>
<table border="1px" cellpadding="5" cellspacing="0" style="border-collapse:collapse;" align="center">
<tr>
<td rowspan="2"> <a href="./File:Huh.png.html" class="image"><img alt="Huh.png" src="images/4/4f/Huh.png" width="40" height="40" /></a></td>
<td>The following information needs to be added to this page:
</td></tr>
<tr>
<td style="border:1px solid red"> <b>Is using this with an invalid key intended or deprecated? Also, what exactly happens on invalid formats?</b>
</td></tr></table>
<p>Translates text into the current language. If the JSON contains a <code>translate</code> key, then the component is a translation component.
</p><p>Translation supports <code>%s</code> and <code>%%</code> format tokens. <code>%%</code> is just an escaped percent symbol. <code>%s</code> marks text to replace using content from the optional <code>with</code> tag. <code>with</code> is an array of components.
</p><p>As a special case, if the translation key is <code>chat.type.text</code>, it will be changed to <code>chat.type.text.narrate</code> when passed to narrator (although it will remain as <code>chat.type.text</code> in chat).
</p>
<h4><span class="mw-headline" id="Keybind_component">Keybind component</span></h4>
<p>Displays the client's current keybind for the specified key. If the component contains a <code>keybind</code> key, then it is a keybind component. The value is named after the keys in <span class="plainlinks"><a rel="nofollow" class="external text" href="http://minecraft.gamepedia.com/Options.txt">options.txt</a></span> (for instance, for <code>key_key.forward</code> in options.txt, <code>key.forward</code> would be used in the component and <kbd>W</kbd> would be displayed). For keys that are not known, the value provided should be displayed instead (for instance <code>key.invalid</code> would remain as <code>key.invalid</code>).
</p>
<h4><span class="mw-headline" id="Score_component">Score component</span></h4>
<p>Displays a score. If the JSON contains a <code>score</code> key, then the component is a score component.
</p><p>The <code>score</code> JSON object contains data about the objective.
</p><p>When being sent to the client, it must contain <code>name</code>, <code>objective</code>, and <code>value</code> keys. <code>name</code> is a player username or entity UUID (if it is a player, it is a username); <code>objective</code> is the name of the objective; <code>value</code> is the resolved value of that objective.
</p><p>When being sent to the server, <code>value</code> is not used. <code>name</code> can be an entity selector (that selects one entity), or alternatively <code>*</code> which matches the sending player.
</p>
<h4><span class="mw-headline" id="Selector_component">Selector component</span></h4>
<p>Displays the results of an entity selector. <b>Should not be sent to clients</b>; only intended for commands and client-to-server actions. If the component contains a <code>selector</code> key, then it is a selector component.
</p><p>The server resolves the list selector into a list of entities, each with an appropriate hover event, and joined with commas and "and" (but it lacks a <a href="http://en.wikipedia.org/wiki/serial_comma" class="extiw" title="wikipedia:serial comma">serial comma</a>).
</p>
<h3><span class="mw-headline" id="Examples">Examples</span></h3>
<p>Here are some examples from the Notchain server for how chat formatting can be used.
</p><p>TODO - additional examples
</p>
<h4><span class="mw-headline" id="Standard_chat_message">Standard chat message</span></h4>
<p>The normal chat message uses a translation component along with some styling.
</p>
<div class="mw-highlight mw-content-ltr" dir="ltr"><pre><span class="p">{</span><span class="s2">"translate"</span><span class="o">:</span><span class="s2">"chat.type.text"</span><span class="p">,</span><span class="s2">"with"</span><span class="o">:</span><span class="p">[{</span><span class="s2">"text"</span><span class="o">:</span><span class="s2">"Herobrine"</span><span class="p">,</span><span class="s2">"clickEvent"</span><span class="o">:</span><span class="p">{</span><span class="s2">"action"</span><span class="o">:</span><span class="s2">"suggest_command"</span><span class="p">,</span><span class="s2">"value"</span><span class="o">:</span><span class="s2">"/msg Herobrine "</span><span class="p">},</span><span class="s2">"hoverEvent"</span><span class="o">:</span><span class="p">{</span><span class="s2">"action"</span><span class="o">:</span><span class="s2">"show_entity"</span><span class="p">,</span><span class="s2">"value"</span><span class="o">:</span><span class="s2">"{id:f84c6a79-0a4e-45e0-879b-cd49ebd4c4e2,name:Herobrine}"</span><span class="p">},</span><span class="s2">"insertion"</span><span class="o">:</span><span class="s2">"Herobrine"</span><span class="p">},{</span><span class="s2">"text"</span><span class="o">:</span><span class="s2">"I don't exist"</span><span class="p">}]}</span>
</pre></div>
<p>The <code>chat.type.text</code> translation key becomes <code><%s> %s</code>, which is then filled in with the player's name and the actual message. Note that the player's name has a click event (which inserts text to message the player), a hover event (which shows the entity ID; also note that <code>type</code> is missing), and an insertion (for the player's name).
</p>
<h2><span class="mw-headline" id="Old_system">Old system</span></h2>
<h3><span class="mw-headline" id="Control_Sequences">Control Sequences</span></h3>
<p>The client treats certain two-character sequences specially. The first character must be:
</p>
<ul><li>§ (U+00A7) for minecraft</li>
<li>& for minecraft classic</li></ul>
<p>The following character indicates a certain color or formatting to apply to the proceeding text.
</p><p>The Notchian classic client expects that an escape code in a chat message will be followed by at least one character, and will otherwise crash with a StringIndexOutOfBoundsException. The workaround for servers is to never end a message with a color control character. This is not an issue for the modern Notchian client.
</p>
<h4><span class="mw-headline" id="Colors">Colors</span></h4>
<p>These correspond very roughly to the colors available in ANSI terminals.
</p><p>e.g.: <code>This is white, but §4this is dark red</code>
</p>
<div class="thumb tright"><div class="thumbinner" style="width:90px;"><a href="./File:Colors.png.html" class="image"><img alt="" src="images/4/4c/Colors.png" width="88" height="288" class="thumbimage" /></a> <div class="thumbcaption"><div class="magnify"><a href="./File:Colors.png.html" class="internal" title="Enlarge"></a></div>Hex digit to color mapping</div></div></div>
<table class="wikitable" style="text-align:center;" border="1" cellpadding="5">
<tr>
<th colspan="1" width="8px"> Sample
</th>
<th colspan="1"> Code
</th>
<th colspan="1"> Common Name
</th>
<th colspan="1"> Name
</th>
<th colspan="4"> Foreground Color
</th>
<th colspan="4"> Background Color
</th></tr>
<tr>
<td colspan="4">
</td>
<td width="30px">R
</td>
<td width="30px">G
</td>
<td width="30px">B
</td>
<td> Hex
</td>
<td width="30px">R
</td>
<td width="30px">G
</td>
<td width="30px">B
</td>
<td> Hex
</td></tr>
<tr>
<td style="background-color: #000000; border-right: 3px solid #000000; border-bottom: 3px solid #000000">
</td>
<td> 0 </td>
<td> Black </td>
<td> <code>black</code> </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> #000000 </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> #000000
</td></tr>
<tr>
<td style="background-color: #0000aa; border-right: 3px solid #00002a; border-bottom: 3px solid #00002a">
</td>
<td> 1 </td>
<td> Dark blue </td>
<td> <code>dark_blue</code> </td>
<td> 0 </td>
<td> 0 </td>
<td> 170 </td>
<td> #0000aa </td>
<td> 0 </td>
<td> 0 </td>
<td> 42 </td>
<td> #00002a
</td></tr>
<tr>
<td style="background-color: #00aa00; border-right: 3px solid #002a00; border-bottom: 3px solid #002a00">
</td>
<td> 2 </td>
<td> Dark green </td>
<td> <code>dark_green</code> </td>
<td> 0 </td>
<td> 170 </td>
<td> 0 </td>
<td> #00aa00 </td>
<td> 0 </td>
<td> 42 </td>
<td> 0 </td>
<td> #002a00
</td></tr>
<tr>
<td style="background-color: #00aaaa; border-right: 3px solid #002a2a; border-bottom: 3px solid #002a2a">
</td>
<td> 3 </td>
<td> Dark cyan </td>
<td> <code>dark_aqua</code> </td>
<td> 0 </td>
<td> 170 </td>
<td> 170 </td>
<td> #00aaaa </td>
<td> 0 </td>
<td> 42 </td>
<td> 42 </td>
<td> #002a2a
</td></tr>
<tr>
<td style="background-color: #aa0000; border-right: 3px solid #2a0000; border-bottom: 3px solid #2a0000">
</td>
<td> 4 </td>
<td> Dark red </td>
<td> <code>dark_red</code> </td>
<td> 170 </td>
<td> 0 </td>
<td> 0 </td>
<td> #aa0000 </td>
<td> 42 </td>
<td> 0 </td>
<td> 0 </td>
<td> #2a0000
</td></tr>
<tr>
<td style="background-color: #aa00aa; border-right: 3px solid #2a002a; border-bottom: 3px solid #2a002a">
</td>
<td> 5 </td>
<td> Purple </td>
<td> <code>dark_purple</code> </td>
<td> 170 </td>
<td> 0 </td>
<td> 170 </td>
<td> #aa00aa </td>
<td> 42 </td>
<td> 0 </td>
<td> 42 </td>
<td> #2a002a
</td></tr>
<tr>
<td style="background-color: #ffaa00; border-right: 3px solid #2a2a00; border-bottom: 3px solid #2a2a00">
</td>
<td> 6 </td>
<td> Gold </td>
<td> <code>gold</code> </td>
<td> 255 </td>
<td> 170 </td>
<td> 0 </td>
<td> #ffaa00 </td>
<td> 42 </td>
<td> 42 </td>
<td> 0 </td>
<td> #2a2a00
</td></tr>
<tr>
<td style="background-color: #aaaaaa; border-right: 3px solid #2a2a2a; border-bottom: 3px solid #2a2a2a">
</td>
<td> 7 </td>
<td> Gray </td>
<td> <code>gray</code> </td>
<td> 170 </td>
<td> 170 </td>
<td> 170 </td>
<td> #aaaaaa </td>
<td> 42 </td>
<td> 42 </td>
<td> 42 </td>
<td> #2a2a2a
</td></tr>
<tr>
<td style="background-color: #555555; border-right: 3px solid #151515; border-bottom: 3px solid #151515">
</td>
<td> 8 </td>
<td> Dark gray </td>
<td> <code>dark_gray</code> </td>
<td> 85 </td>
<td> 85 </td>
<td> 85 </td>
<td> #555555 </td>
<td> 21 </td>
<td> 21 </td>
<td> 21 </td>
<td> #151515
</td></tr>
<tr>
<td style="background-color: #5555ff; border-right: 3px solid #15153f; border-bottom: 3px solid #15153f">
</td>
<td> 9 </td>
<td> Blue </td>
<td> <code>blue</code> </td>
<td> 85 </td>
<td> 85 </td>
<td> 255 </td>
<td> #5555ff </td>
<td> 21 </td>
<td> 21 </td>
<td> 63 </td>
<td> #15153f
</td></tr>
<tr>
<td style="background-color: #55ff55; border-right: 3px solid #153f15; border-bottom: 3px solid #153f15">
</td>
<td> a </td>
<td> Bright green </td>
<td> <code>green</code> </td>
<td> 85 </td>
<td> 255 </td>
<td> 85 </td>
<td> #55ff55 </td>
<td> 21 </td>
<td> 63 </td>
<td> 21 </td>
<td> #153f15
</td></tr>
<tr>
<td style="background-color: #55ffff; border-right: 3px solid #153f3f; border-bottom: 3px solid #153f3f">
</td>
<td> b </td>
<td> Cyan </td>
<td> <code>aqua</code> </td>
<td> 85 </td>
<td> 255 </td>
<td> 255 </td>
<td> #55ffff </td>
<td> 21 </td>
<td> 63 </td>
<td> 63 </td>
<td> #153f3f
</td></tr>
<tr>
<td style="background-color: #ff5555; border-right: 3px solid #3f1515; border-bottom: 3px solid #3f1515">
</td>
<td> c </td>
<td> Red </td>
<td> <code>red</code> </td>
<td> 255 </td>
<td> 85 </td>
<td> 85 </td>
<td> #ff5555 </td>
<td> 63 </td>
<td> 21 </td>
<td> 21 </td>
<td> #3f1515
</td></tr>
<tr>
<td style="background-color: #ff55ff; border-right: 3px solid #3f153f; border-bottom: 3px solid #3f153f">
</td>
<td> d </td>
<td> Pink </td>
<td> <code>light_purple</code> </td>
<td> 255 </td>
<td> 85 </td>
<td> 255 </td>
<td> #ff55ff </td>
<td> 63 </td>
<td> 21 </td>
<td> 63 </td>
<td> #3f153f
</td></tr>
<tr>
<td style="background-color: #ffff55; border-right: 3px solid #3f3f15; border-bottom: 3px solid #3f3f15">
</td>
<td> e </td>
<td> Yellow </td>
<td> <code>yellow</code> </td>
<td> 255 </td>
<td> 255 </td>
<td> 85 </td>
<td> #ffff55 </td>
<td> 63 </td>
<td> 63 </td>
<td> 21 </td>
<td> #3f3f15
</td></tr>
<tr>
<td style="background-color: #ffffff; border-right: 3px solid #3f3f3f; border-bottom: 3px solid #3f3f3f">
</td>
<td> f </td>
<td> White </td>
<td> <code>white</code> </td>
<td> 255 </td>
<td> 255 </td>
<td> 255 </td>
<td> #ffffff </td>
<td> 63 </td>
<td> 63 </td>
<td> 63 </td>
<td> #3f3f3f
</td></tr></table>
<h4><span class="mw-headline" id="Styles">Styles</span></h4>
<p>Like the color codes above, style escape codes are created by combining § (U+00A7) with one of the following characters. Style codes can be combined (except for "r") to enable multiple effects at once. Using any color codes will reset the current style back to plain (unknown if this is a bug or intended behavior). The "r" plain style code will also reset the current chat color back to white (may also be a bug). The "k" random style code is used for the "§kFUNKY LOL" message in /title/splashes.txt inside minecraft.jar.
</p>
<table class="wikitable" style="text-align:center;" border="1" cellpadding="5">
<tr>
<th colspan="1"> Sample
</th>
<th colspan="1"> Code
</th>
<th colspan="1"> Style
</th>
<th colspan="1"> Name
</th></tr>
<tr>
<td> <a href="./File:Random_chat.gif.html" class="image"><img alt="Random chat.gif" src="images/4/41/Random_chat.gif" width="74" height="20" /></a> </td>
<td> k </td>
<td> Random </td>
<td> <code>obfuscated</code>
</td></tr>
<tr>
<td> <a href="./File:Bold_chat.png.html" class="image"><img alt="Bold chat.png" src="images/e/e4/Bold_chat.png" width="74" height="20" /></a> </td>
<td> l </td>
<td> Bold </td>
<td> <code>bold</code>
</td></tr>
<tr>
<td> <a href="./File:Strikethrough_chat.png.html" class="image"><img alt="Strikethrough chat.png" src="images/9/92/Strikethrough_chat.png" width="74" height="20" /></a> </td>
<td> m </td>
<td> Strikethrough </td>
<td> <code>strikethrough</code>
</td></tr>
<tr>
<td> <a href="./File:Underlined_chat.png.html" class="image"><img alt="Underlined chat.png" src="images/b/bd/Underlined_chat.png" width="74" height="22" /></a> </td>
<td> n </td>
<td> Underlined </td>
<td> <code>underline</code>
</td></tr>
<tr>
<td> <a href="./File:Italic_chat.png.html" class="image"><img alt="Italic chat.png" src="images/c/cc/Italic_chat.png" width="74" height="20" /></a> </td>
<td> o </td>
<td> Italic </td>
<td> <code>italic</code>
</td></tr>
<tr>
<td> <a href="./File:Plain_chat.png.html" class="image"><img alt="Plain chat.png" src="images/0/0e/Plain_chat.png" width="74" height="20" /></a> </td>
<td> r </td>
<td> Plain White </td>
<td> <code>reset</code>
</td></tr></table>
<h2><span class="mw-headline" id="Processing_chat">Processing chat</span></h2>
<p>Actually handling chat between the client and server is slightly more complicated than simply forwarding chat messages to other players. There's a somewhat complicated interaction regarding the chat settings of each player and whether it is a command or not, which is used to handle the various options in chat settings (specifically, Chat: Shown/Commands Only/Hidden, and the equivalent for narrator).
</p><p>This is made more complicated by the two different enums, one which represents client settings and the other which represents chat positions.
</p><p>The client setting (as used in the <a href="Protocol.html#Client_Settings" title="Protocol">Client Settings</a> packet) is what the player chose to have displayed, and affects what types of chat messages the server should send:
</p>
<table class="wikitable">
<tr>
<th> ID
</th>
<th> Name
</th>
<th> Meaning
</th></tr>
<tr>
<td> 0
</td>
<td> Full
</td>
<td> The client is willing to accept all chat messages.
</td></tr>
<tr>
<td> 1
</td>
<td> System
</td>
<td> The client is willing to accept messages from commands, but does not want general chat from other players.
</td></tr>
<tr>
<td> 2
</td>
<td> None
</td>
<td> The client does not want any chat at all. (However, it is still fine with above-hotbar game notices)
</td></tr></table>
<p>The message type (as used in the <a href="Protocol.html#Chat_Message_.28clientbound.29" title="Protocol">Chat Message</a> packet) indicates the type of chat message:
</p>
<table class="wikitable">
<tr>
<th> ID
</th>
<th> Name
</th>
<th> Meaning
</th></tr>
<tr>
<td> 0
</td>
<td> Chat
</td>
<td> A player-initiated chat message. Note that the Notchian server does not include message-related commands here (<code>/me</code> and <code>/tell</code>); those go in System.
</td></tr>
<tr>
<td> 1
</td>
<td> System
</td>
<td> Feedback from running a command, such as "Your game mode has been updated to creative."
</td></tr>
<tr>
<td> 2
</td>
<td> Game info
</td>
<td> Game state information that is displayed above the hot bar, such as "You may not rest now, the bed is too far away".
</td></tr></table>
<p>Note that it is the server's responsibility to <i>not</i> send packets if the client has the given type disabled. However, it is the client's responsibility to not send incorrect chat packets.
</p><p>Here's a matrix comparing what packets the server should send to the client by settings:
</p>
<table class="wikitable">
<tr>
<td>
</td>
<th colspan="4"> Message type
</th></tr>
<tr>
<th rowspan="4"> Client setting
</th>
<td>
</td>
<th> Chat
</th>
<th> System
</th>
<th> Game info
</th></tr>
<tr>
<th> Full
</th>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td></tr>
<tr>
<th> System
</th>
<td style="background:#ff9090; color:black;" class="table-no"> ✘
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td></tr>
<tr>
<th> Hidden
</th>
<td style="background:#ff9090; color:black;" class="table-no"> ✘
</td>
<td style="background:#ff9090; color:black;" class="table-no"> ✘
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td></tr></table>
<div style="background:#FFF3BD; padding: 0px 5px 0px 5px; border: 1px solid #C4B674;">
<p><a href="./File:Warning.png.html" class="image"><img alt="Warning.png" src="images/c/cb/Warning.png" width="14" height="14" /></a> The game info position will not render formatting, due to <a rel="nofollow" class="external text" href="https://bugs.mojang.com/browse/MC-119145">MC-119145</a>. If you wish to include formatted content in that slot, use the title packet instead of the chat message packet.
</p>
</div>
<p>Here's a matrix comparing what the client may send based off of its chat setting:
</p>
<table class="wikitable">
<tr>
<td>
</td>
<th colspan="4"> Inbound message
</th></tr>
<tr>
<th rowspan="4"> Client setting
</th>
<td>
</td>
<th> Chat message
</th>
<th> Command starting with <code>/</code>
</th></tr>
<tr>
<th> Full
</th>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td></tr>
<tr>
<th> System
</th>
<td style="background: #ffff90; color: black;" class="table-maybe"> ✘<sup id="cite_ref-1" class="reference"><a href="Chat.html#cite_note-1">[note 1]</a></sup>
</td>
<td style="background:#90ff90; color:black;" class="table-yes"> ✔
</td></tr>
<tr>
<th> Hidden
</th>
<td style="background:#ff9090; color:black;" class="table-no"> ✘
</td>
<td style="background:#ff9090; color:black;" class="table-no"> ✘
</td></tr></table>
<p>If the client attempts to send a chat message and the server rejects it, the Notchian server will send that client a red <code>chat.cannotSend</code> translation component (which becomes "Cannot send chat message"). Else, if it starts with a <code>/</code>, then the message is processed as a command. Otherwise, it will broadcast a translate component with <code>chat.type.text</code> (which becomes <code><%s> %s</code>), with the player's name<sup id="cite_ref-2" class="reference"><a href="Chat.html#cite_note-2">[note 2]</a></sup> (and the appropriate hover events) as the first format parameter and the message as the second parameter.
</p>
<h2><span class="mw-headline" id="Font">Font</span></h2>
<p>Minecraft has two fonts types that can be encountered normally: Ascii (<code>ascii.png</code>) and Unicode (<code>unicode_page_XX.png</code>). The ascii font will fall back upon unicode characters if they are not provided (see below). However, use of the Unicode font can be forced for all characters in the language menu.
</p><p>There is no glyph for the space character. However, the space character has a width of 4.
</p><p>Additionally, Minecraft has a <a href="http://en.wikipedia.org/wiki/Standard_Galactic_Alphabet" class="extiw" title="wikipedia:Standard Galactic Alphabet">Standard Galactic Alphabet</a> font (<code>ascii_sga.png</code>). This cannot be used in chat, but works much the same as the normal Ascii font in terms of width. The SGA font only supports lowercase and uppercase letters (the rest of the glyphs are blank), and has the same indexing as the normal ascii font.
</p><p>The Minecraft client calculates the widths of the default font when the texture is loaded, whilst the sizes of the unicode type are provided in <code>glyph_sizes.bin</code>. Each byte in <code>glyph_sizes.bin</code> contains the start and end position of each character, the top nibble (0xF0) is the start position and the bottom nibble (0x0F) is the end position (relative to the character's position in the font sheet). Example: <a rel="nofollow" class="external free" href="https://gist.github.com/TkTech/dff9bbe54c9a074612e1">https://gist.github.com/TkTech/dff9bbe54c9a074612e1</a>
</p>
<div class="mw-collapsible mw-collapsed" style="width: 41em">
<p>The Ascii font supports these characters, with the given indexes in <code>ascii.png</code>:
</p>
<table class="mw-collapsible-content wikitable">
<tr>
<th> Codepoint </th>
<th> Char </th>
<th> index </th>
<th> x </th>
<th> y </th>
<th> width
</th></tr>
<tr>
<td> <code>\u00c0</code> </td>
<td> <code>À</code> </td>
<td> 0 </td>
<td> 0 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00c1</code> </td>
<td> <code>Á</code> </td>
<td> 1 </td>
<td> 1 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00c2</code> </td>
<td> <code>Â</code> </td>
<td> 2 </td>
<td> 2 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00c8</code> </td>
<td> <code>È</code> </td>
<td> 3 </td>
<td> 3 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00ca</code> </td>
<td> <code>Ê</code> </td>
<td> 4 </td>
<td> 4 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00cb</code> </td>
<td> <code>Ë</code> </td>
<td> 5 </td>
<td> 5 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00cd</code> </td>
<td> <code>Í</code> </td>
<td> 6 </td>
<td> 6 </td>
<td> 0 </td>
<td> 4
</td></tr>
<tr>
<td> <code>\u00d3</code> </td>
<td> <code>Ó</code> </td>
<td> 7 </td>
<td> 7 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00d4</code> </td>
<td> <code>Ô</code> </td>
<td> 8 </td>
<td> 8 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00d5</code> </td>
<td> <code>Õ</code> </td>
<td> 9 </td>
<td> 9 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00da</code> </td>
<td> <code>Ú</code> </td>
<td> 10 </td>
<td> 10 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00df</code> </td>
<td> <code>ß</code> </td>
<td> 11 </td>
<td> 11 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00e3</code> </td>
<td> <code>ã</code> </td>
<td> 12 </td>
<td> 12 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u00f5</code> </td>
<td> <code>õ</code> </td>
<td> 13 </td>
<td> 13 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u011f</code> </td>
<td> <code>ğ</code> </td>
<td> 14 </td>
<td> 14 </td>
<td> 0 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0130</code> </td>
<td> <code>İ</code> </td>
<td> 15 </td>
<td> 15 </td>
<td> 0 </td>
<td> 4
</td></tr>
<tr>
<td> <code>\u0131</code> </td>
<td> <code>ı</code> </td>
<td> 16 </td>
<td> 0 </td>
<td> 1 </td>
<td> 4
</td></tr>
<tr>
<td> <code>\u0152</code> </td>
<td> <code>Œ</code> </td>
<td> 17 </td>
<td> 1 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0153</code> </td>
<td> <code>œ</code> </td>
<td> 18 </td>
<td> 2 </td>
<td> 1 </td>
<td> 7
</td></tr>
<tr>
<td> <code>\u015e</code> </td>
<td> <code>Ş</code> </td>
<td> 19 </td>
<td> 3 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u015f</code> </td>
<td> <code>ş</code> </td>
<td> 20 </td>
<td> 4 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0174</code> </td>
<td> <code>Ŵ</code> </td>
<td> 21 </td>
<td> 5 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0175</code> </td>
<td> <code>ŵ</code> </td>
<td> 22 </td>
<td> 6 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u017e</code> </td>
<td> <code>ž</code> </td>
<td> 23 </td>
<td> 7 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0207</code> </td>
<td> <code>ȇ</code> </td>
<td> 24 </td>
<td> 8 </td>
<td> 1 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-0" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 25 </td>
<td> 9 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-1" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 26 </td>
<td> 10 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-2" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 27 </td>
<td> 11 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-3" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 28 </td>
<td> 12 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-4" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 29 </td>
<td> 13 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-5" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 30 </td>
<td> 14 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0000</code> </td>
<td> <sup id="cite_ref-zero_3-6" class="reference"><a href="Chat.html#cite_note-zero-3">[note 3]</a></sup> </td>
<td> 31 </td>
<td> 15 </td>
<td> 1 </td>
<td> -
</td></tr>
<tr>
<td> <code>\u0020</code> </td>
<td> <code> </code> </td>
<td> 32 </td>
<td> 0 </td>
<td> 2 </td>
<td> 4<sup id="cite_ref-space_4-0" class="reference"><a href="Chat.html#cite_note-space-4">[note 4]</a></sup>
</td></tr>
<tr>
<td> <code>\u0021</code> </td>
<td> <code>!</code> </td>
<td> 33 </td>
<td> 1 </td>
<td> 2 </td>
<td> 2
</td></tr>
<tr>
<td> <code>\u0022</code> </td>
<td> <code>"</code> </td>
<td> 34 </td>
<td> 2 </td>
<td> 2 </td>
<td> 5
</td></tr>
<tr>
<td> <code>\u0023</code> </td>
<td> <code>#</code> </td>
<td> 35 </td>
<td> 3 </td>
<td> 2 </td>
<td> 6
</td></tr>
<tr>
<td> <code>\u0024</code> </td>
<td> <code>$</code> </td>
<td> 36 </td>
<td> 4 </td>
<td> 2 </td>
<td> 6
</td></tr>