Font

From Minecraft Wiki
Jump to navigation Jump to search

Fonts are used for rendering text in Minecraft. Several fonts are used in the game; the primary font used is known as either Mojangles or Minecraft Seven.

Multiple fonts can be defined and referenced with resource packs.

Fonts available

[edit | edit source]

Java Edition

[edit | edit source]

By default, Java Edition includes 4 fonts.

default
Main article: Mojangles
alt
uniform
Main article: GNU Unifont
illageralt
Main article: illageralt

Bedrock Edition

[edit | edit source]

In Bedrock Edition, there are 4 default fonts. In the chat settings, the font for all text in chat messages (including closed captions) can be changed between Mojangles and Noto Sans.

Mojangles
Main article: Mojangles
Noto Sans
Main article: Noto Sans
Minecraft Ten
Main article: Minecraft Ten
smooth/
Main article: smooth/ (font)

Display modifications

[edit | edit source]

Bold text

[edit | edit source]

Bold text is rendered by drawing each character twice: once at its normal position and again one pixel to the right. This technique creates the appearance of thicker, bolder text without modifying the font itself.

Experience bar text

[edit | edit source]

The text on the experience bar is bright green Mojangles with a black outline.​[more information needed]

Shadow

[edit | edit source]

In most places text is rendered, a shadow appears beneath every character. This shadow is a copy of the character's glyph, with the red, green, and blue values divided by 4 and positioned 12.5% south-east of the character, relative to its spacing. Regardless of the resolution of the character's texture, the shadow is always moved by 12.5%. In the default font (assets/minecraft/textures/font/ascii.png), the shadow position is moved 1 pixel down and to the right.

For pixels where the glyph overlaps with the shadow, the above glyph's channels have 1 subtracted from them. For example, in areas where a white (#FFFFFF) glyph's pixel overlaps a shadow's, the white pixel becomes #FEFEFE.

Glowing text

[edit | edit source]
Comparison of all the dyed glowing texts.

Glow ink sac applied on a sign causes a character to create eight copies of itself in all eight directions. This results in the font appearing to have a thick outline. Glowing text always renders with an emissive texture, so it appears bright in darkness. The text takes priority over the outline; outlines appear below a character's pixels if they conflict. However, it is a rendering effect that does not actually emit any light. The player can use a black ink sac on the sign to remove the glow.

In a sign's block data, [NBT Compound / JSON Object] front_text or [NBT Compound / JSON Object] back_text's [Boolean] has_glowing_text controls whether the text glows.

Emoji support

[edit | edit source]

Minecraft has included textures for a number of emojis. The earliest emoji textures were for ☺☻. Since 1.15, this support has expanded. Emojis are monochromatic and behave just as any other character. The game does not support modifiers, such as skin tone, joining, or emoji presentation. The skin tone modifiers U+1F3FB..U+1F3FF 🏻 🏼 🏽 🏾 🏿 do not apply colored skin tones to their applicable emojis, and instead show tones as their Unifont glyphs. Joining multiple emojis via U+200D ‍ ZERO WIDTH JOINER to create 1 single emoji is not supported; multi-sequence emoji such as 👨‍👩‍👧 instead show as 👨‌👩‌👧 with dotted boxes showing ZWJ between them. Variation selectors, which control presentation, are displayed as dotted boxes with VSnumber.

For characters supported in the default font, as opposed to the fallback fonts, see Mojangles#Emoji.

Bedrock Edition does not support any character above U+FFFF, which includes many modern emoji. It does not include any textures for emojis below that either; only those provided by GNU Unifont below U+FFFF are included and visible.

Private-area emojis

[edit | edit source]
This feature is exclusive to Bedrock Edition.
 
This section would benefit from the addition of more images.
 
Please remove this notice once you have added suitable images to the article.
The specific instructions are: Add previews from controller emojis

Instead of emojis in font files, Bedrock Edition has several hard-coded Private Use Unicode symbols that it automatically converts to emoji-like symbols in any font, which can also be entered with a shortcode (:heart:). These are used in in-game texts including How to Play and controller hints, but can also be used by the player anywhere where normal letters can, such as in signs, books, item names, chat, etc. Emojis are not supported by Ore UI menu screens.[1][2]

There exist 2 Private Use Area sheets: glyph_E0.png glyph_E1.png. E0 contains glyphs for control icons, such as A button and +Control Pad right. E1 contains glyphs for miscellaneous icons, including the minecoin and Agent icon. E0 characters are categorized in emoticons.json.[3]

Blocks & items

[edit | edit source]
Name Shortcode Character Unicode Preview
Wooden Pickaxe :wood_pickaxe: U+E108
Wooden Sword :wood_sword: U+E109
Crafting Table :crafting_table: U+E10A
Furnace :furnace: U+E10B
Name Shortcode Character Unicode Preview
Armor :armor: U+E101
Crosshair :tip_crosshair: U+E017
Food :shank: U+E100
Heart :heart: U+E10C

Marketplace

[edit | edit source]
Name Shortcode Character Unicode Preview
Minecoin :minecoin:

:token:

U+E102
Token :minecoin:

:token:

U+E105
  • On non-PlayStation devices, both :minecoin: and :token: will display the Minecoin emoji.

Recipe book

[edit | edit source]
Name Shortcode Character Unicode Preview
Craftable Toggle On :craftable_toggle_on: U+E0A0
Craftable Toggle Off :craftable_toggle_off: U+E0A1

Controls

[edit | edit source]
Mouse
[edit | edit source]
Name Shortcode Character Unicode Preview
Mouse Left Button :mouse_left_button: U+E060
Mouse Right Button :mouse_right_button: U+E061
Mouse Middle Button :mouse_middle_button: U+E062
Mouse Button :mouse_button: U+E063
Light Mouse Left Button :light_mouse_left_button: U+E070
Light Mouse Right Button :light_mouse_right_button: U+E071
Light Mouse Middle Button :light_mouse_middle_button: U+E072
Light Mouse Button :light_mouse_button: U+E073
Touch
[edit | edit source]
Name Shortcode Character Unicode Preview
Forward :touch_forward: U+E080
Left :touch_left: U+E081
Back :touch_back: U+E082
Right :touch_right: U+E083
Jump :touch_jump: U+E084
Sneak :touch_sneak: U+E085
Emote ? U+E089
Chat :touch_chat: U+E08A
Pause ? U+E08B
Sprint (Double Tap) :touch_sprint_double_tap: U+E064
Jump :tip_virtual_button_jump: U+E014
Attack :tip_virtual_button_action_attack_or_destroy: U+E015
Joystick :tip_virtual_joystick: U+E016
Joystick Forward :touch_virtual_joystick_forward: U+E08C
Joystick Left :touch_virtual_joystick_left: U+E08D
Joystick Back :touch_virtual_joystick_back: U+E08E
Joystick Right :touch_virtual_joystick_right: U+E08F
Place :tip_virtual_button_action_build_or_use: U+E018
Sneak :tip_virtual_button_sneak: U+E019
Sprint :tip_virtual_button_sprint:

:touch_sprint:

U+E01A
Fly Up :tip_virtual_button_fly_up: U+E01B
Fly Down :tip_virtual_button_fly_down: U+E01C
Dismount :tip_virtual_button_dismount: U+E01D
Fly Up :touch_fly_up: U+E086
Fly Down :touch_fly_down: U+E087
Stop Flying :touch_stop_flying: U+E088
Small Sneak :tip_touch_sneak: U+E05A
Small Jump :tip_touch_jump: U+E059
Small Inventory :tip_touch_inventory: U+E05B
Small Fly Up :tip_touch_fly_up: U+E05C
Small Fly Down :tip_touch_fly_down: U+E05D
Small Up Arrow :tip_touch_forward: U+E055
Small Left Arrow :tip_touch_left: U+E056
Small Down Arrow :tip_touch_back: U+E057
Small Right Arrow :tip_touch_right: U+E058
Controller
[edit | edit source]
Name Shortcode Character Unicode Preview
Left Stick Up :ps4_left_stick_up:

:switch_left_stick_up: :xbox_left_stick_up:

U+E0D0 (/assets/images/text/emojis/controller/left_stick_up.png)
Left Stick Left :ps4_left_stick_left:

:switch_left_stick_left: :xbox_left_stick_left:

U+E0D1 (/assets/images/text/emojis/controller/left_stick_left.png)
Left Stick Down :ps4_left_stick_down:

:switch_left_stick_down: :xbox_left_stick_down:

U+E0D2 (/assets/images/text/emojis/controller/left_stick_down.png)
Left Stick Right :ps4_left_stick_right:

:switch_left_stick_right: :xbox_left_stick_right:

U+E0D3 (/assets/images/text/emojis/controller/left_stick_right.png)
Right Stick Up :ps4_right_stick_up:

:switch_right_stick_up: :xbox_right_stick_up:

U+E0D0 (/assets/images/text/emojis/controller/right_stick_up.png)
Right Stick Left :ps4_right_stick_left:

:switch_right_stick_left: :xbox_right_stick_left:

U+E0D1 (/assets/images/text/emojis/controller/right_stick_left.png)
Right Stick Down :ps4_right_stick_down:

:switch_right_stick_down: :xbox_right_stick_down:

U+E0D2 (/assets/images/text/emojis/controller/right_stick_down.png)
Right Stick Right :ps4_right_stick_right:

:switch_right_stick_right: :xbox_right_stick_right:

U+E0D3 (/assets/images/text/emojis/controller/right_stick_right.png)
Nintendo Switch
[edit | edit source]
Name Shortcode Character Unicode Preview
A :switch_face_button_down: U+E040 ![](/assets/images/text/emojis/switch/a_button.png)
B :switch_face_button_right: U+E041 ![](/assets/images/text/emojis/switch/b_button.png)
X :switch_face_button_left: U+E042 ![](/assets/images/text/emojis/switch/x_button.png)
Y :switch_face_button_up: U+E043 ![](/assets/images/text/emojis/switch/y_button.png)
Left Bumper :switch_bumper_left: U+E044 ![](/assets/images/text/emojis/switch/left_bumper.png)
Right Bumper :switch_bumper_right: U+E045 ![](/assets/images/text/emojis/switch/right_bumper.png)
Left Trigger :switch_trigger_left: U+E046 ![](/assets/images/text/emojis/switch/left_trigger.png)
Right Trigger :switch_trigger_right: U+E047 ![](/assets/images/text/emojis/switch/right_trigger.png)
- :switch_select: U+E048 ![](/assets/images/text/emojis/switch/minus.png)
+ :switch_start: U+E049 ![](/assets/images/text/emojis/switch/plus.png)
Left Stick :switch_stick_left: U+E04A ![](/assets/images/text/emojis/switch/left_stick.png)
Right Stick :switch_stick_right: U+E04B ![](/assets/images/text/emojis/switch/right_stick.png)
D-pad Up :switch_dpad_up: U+E04C ![](/assets/images/text/emojis/switch/dpad_up.png)
D-pad Left :switch_dpad_left: U+E04D ![](/assets/images/text/emojis/switch/dpad_left.png)
D-pad Down :switch_dpad_down: U+E04E ![](/assets/images/text/emojis/switch/dpad_down.png)
D-pad Right :switch_dpad_right: U+E04F ![](/assets/images/text/emojis/switch/dpad_right.png)
PlayStation
[edit | edit source]
Name Shortcode Character Unicode Preview
Cross :ps4_face_button_down: U+E020 ![](/assets/images/text/emojis/playstation/cross.png)
Circle :ps4_face_button_right: U+E021 ![](/assets/images/text/emojis/playstation/circle.png)
Square :ps4_face_button_left: U+E022 ![](/assets/images/text/emojis/playstation/square.png)
Triangle :ps4_face_button_up: U+E023 ![](/assets/images/text/emojis/playstation/triangle.png)
Left Bumper :ps4_bumper_left: U+E024 ![](/assets/images/text/emojis/playstation/left_bumper.png)
Right Bumper :ps4_bumper_right: U+E025 ![](/assets/images/text/emojis/playstation/right_bumper.png)
Left Trigger :ps4_trigger_left: U+E026 ![](/assets/images/text/emojis/playstation/left_trigger.png)
Right Trigger :ps4_trigger_right: U+E027 ![](/assets/images/text/emojis/playstation/right_trigger.png)
Touch Pad :ps4_select: U+E028 ![](/assets/images/text/emojis/playstation/touch_pad.png)
Options/Share :ps4_start: U+E029 ![](/assets/images/text/emojis/playstation/options_share.png)
Left Stick :ps4_stick_left: U+E02A ![](/assets/images/text/emojis/playstation/left_stick.png)
Right Stick :ps4_stick_right: U+E02B ![](/assets/images/text/emojis/playstation/right_stick.png)
D-pad Up :ps4_dpad_up: U+E02C ![](/assets/images/text/emojis/playstation/dpad_up.png)
D-pad Left :ps4_dpad_left: U+E02D ![](/assets/images/text/emojis/playstation/dpad_left.png)
D-pad Down :ps4_dpad_down: U+E02E ![](/assets/images/text/emojis/playstation/dpad_down.png)
D-pad Right :ps4_dpad_right: U+E02F ![](/assets/images/text/emojis/playstation/dpad_right.png)
Oculus (Rift/Rift S)
[edit | edit source]
Name Character Unicode Preview
0 U+E0E0 ![](/assets/images/text/emojis/oculus/0_button.png)
B U+E0E2 ![](/assets/images/text/emojis/oculus/b_button.png)
A U+E0E1 ![](/assets/images/text/emojis/oculus/a_button.png)
Y U+E0EA ![](/assets/images/text/emojis/oculus/y_button.png)
X U+E0E9 ![](/assets/images/text/emojis/oculus/x_button.png)
Left Grip U+E0E3 ![](/assets/images/text/emojis/oculus/left_grip.png)
Right Grip U+E0E4 ![](/assets/images/text/emojis/oculus/right_grip.png)
Left Trigger U+E0E7 ![](/assets/images/text/emojis/oculus/left_trigger.png)
Right Trigger U+E0E8 ![](/assets/images/text/emojis/oculus/right_trigger.png)
Left Stick U+E0E5 ![](/assets/images/text/emojis/oculus/left_stick.png)
Right Stick U+E0E6 ![](/assets/images/text/emojis/oculus/right_stick.png)
Windows MR (Mixed Reality)
[edit | edit source]
Name Character Unicode Preview
Menu U+E0C2 ![](/assets/images/text/emojis/windowsMR/menu.png)
Windows U+E0CD ![](/assets/images/text/emojis/windowsMR/windows.png)
Left Touchpad U+E0C5 ![](/assets/images/text/emojis/windowsMR/left_touchpad.png)
Left Horizontal Touchpad U+E0C6 ![](/assets/images/text/emojis/windowsMR/left_touchpad_horizontal.png)
Left Vertical Touchpad U+E0C7 ![](/assets/images/text/emojis/windowsMR/left_touchpad_vertical.png)
Right Touchpad U+E0C8 ![](/assets/images/text/emojis/windowsMR/right_touchpad.png)
Right Horizontal Touchpad U+E0C9 ![](/assets/images/text/emojis/windowsMR/right_touchpad_horizontal.png)
Right Vertical Touchpad U+E0CA ![](/assets/images/text/emojis/windowsMR/right_touchpad_vertical.png)
Left Trigger U+E0CB ![](/assets/images/text/emojis/windowsMR/left_trigger.png)
Right Trigger U+E0CC ![](/assets/images/text/emojis/windowsMR/right_trigger.png)
Left Grab U+E0C0 ![](/assets/images/text/emojis/windowsMR/left_grab.png)
Right Grab U+E0C1 ![](/assets/images/text/emojis/windowsMR/right_grab.png)
Left Stick U+E0C3 ![](/assets/images/text/emojis/windowsMR/left_stick.png)
Right Stick U+E0C4 ![](/assets/images/text/emojis/windowsMR/right_stick.png)
Name Shortcode Character Unicode Preview
A :xbox_face_button_down: U+E000 ![](/assets/images/text/emojis/xbox/a_button.png)
B :xbox_face_button_right: U+E001 ![](/assets/images/text/emojis/xbox/b_button.png)
X :xbox_face_button_left: U+E002 ![](/assets/images/text/emojis/xbox/x_button.png)
Y :xbox_face_button_up: U+E003 ![](/assets/images/text/emojis/xbox/y_button.png)
Left Bumper :xbox_bumper_left: U+E004 ![](/assets/images/text/emojis/xbox/left_bumper.png)
Right Bumper :xbox_bumper_right: U+E005 ![](/assets/images/text/emojis/xbox/right_bumper.png)
Left Trigger :xbox_trigger_left: U+E006 ![](/assets/images/text/emojis/xbox/left_trigger.png)
Right Trigger :xbox_trigger_right: U+E007 ![](/assets/images/text/emojis/xbox/right_trigger.png)
Select :xbox_select: U+E008 ![](/assets/images/text/emojis/xbox/select.png)
Start :xbox_start: U+E009 ![](/assets/images/text/emojis/xbox/start.png)
Left Stick :xbox_stick_left: U+E00A ![](/assets/images/text/emojis/xbox/left_stick.png)
Right Stick :xbox_stick_right: U+E00B ![](/assets/images/text/emojis/xbox/right_stick.png)
D-Pad Up :xbox_dpad_up: U+E00C ![](/assets/images/text/emojis/xbox/dpad_up.png)
D-Pad Left :xbox_dpad_left: U+E00D ![](/assets/images/text/emojis/xbox/dpad_left.png)
D-Pad Down :xbox_dpad_down: U+E00E ![](/assets/images/text/emojis/xbox/dpad_down.png)
D-Pad Right :xbox_dpad_right: U+E00F ![](/assets/images/text/emojis/xbox/dpad_right.png)

}}

Other

[edit | edit source]
Name Shortcode Character Unicode Preview
Non-Breaking Space :nbsp: U+E0FF
Agent :code_builder_button: U+E103 ![](/assets/images/text/emojis/other/agent.png)
Immersive Reader :immersive_reader_button: U+E104 ![](/assets/images/text/emojis/other/immersive_reader.png)
Hollow Star :hollow_star: U+E106 ![](/assets/images/text/emojis/other/hollow_star.png)
Solid Star :solid_star: U+E107 ![](/assets/images/text/emojis/other/solid_star.png)
Camera :camera: U+E10D ![](/assets/images/text/emojis/other/camera.png)

Special characters

[edit | edit source]

In Java Edition, there are 2 characters that are accessible only through technical means:

  • The first is U+FFFD � REPLACEMENT CHARACTER, which appears when either the U+FFFD character is typed, or there is an invalid UTF-8 multi-byte sequence.
  • The second is the "notdef" character,[a] seen when a character that has no texture in the currently-used font is typed. It is hardcoded and cannot be modified through resource packs. It is sometimes called "tofu" in the typographical community because of it resembles a block of tofu. More information on this character can be found at Missing textures and models#Missing font character.

In Bedrock Edition, a character with no texture data appears as a blank space. The U+FFFD � REPLACEMENT CHARACTER shown belongs to GNU Unifont.

Providers

[edit | edit source]
This feature is exclusive to Java Edition.
 

A font is constructed from a list of providers, sources that provide characters to use. Different providers use different formats and methods of constructing characters. The default font uses all except for ttf.

A font file uses the following format:

  • [NBT Compound / JSON Object]: The root object.
    • [NBT List / JSON Array] providers: A list of providers.
      • [NBT Compound / JSON Object]: A provider. Each type of provider is elaborated below.
        • [String] type: The type of provider.
        • [NBT Compound / JSON Object] filter: Options in Language -> Font Settings that must be in the given state for the provider to be used. Right now, these buttons are hardcoded, preventing the extension of these font filtering capabilities beyond the preset options provided.
          • [Boolean] uniform: Optional. The value that the "Force Uniform" option must be for this font provider to be enabled.
          • [Boolean] jp: Optional. The value that the "Japanese Glyph Variants" option must be for this font provider to be enabled.

Bitmap provider

[edit | edit source]

The bitmap provider defines simple bitmap glyphs – glyphs from textures.

  • [NBT Compound / JSON Object]: The provider.
    • [String] type: bitmap.
    • [Int] ascent: The amount of vertical shifting is applied to the glyph. In typography, the ascent is the distance above the baseline to the cap height (top of glyph). The baseline in a glyph is the line where the descender begins. For example, in the lowercase letter y, the bottom end of the y extends past the baseline. In Vanilla, when the height is 8, the ascent is most often 7, as the descender is 1.
    • [NBT List / JSON Array] chars: The characters associated with each glyph in the texture file. The characters inside each string entry inside this list are mapped to the corresponding positions in the referenced file. The texture is divided evenly according to the number of strings in the list, and the length of the longest string in that list.
      • [String]: One line of characters.
    • [String] file: The PNG file used for the characters of this provider. Textures may be any size, and glyphs may be any color. White glyphs can be colored any other color in-game. Other colors retain that tint when re-colored. Black glyphs always appear black. The glyphs' widths are automatically determined based on the last right-most column of pixels containing any alpha value above 0. Glyphs themselves must not be larger than 256×256 pixels.
    • [Int] height: The scale of the resulting glyph. This scale should generally match the glyph's individual height, or be a power of it. While heights outside of this recommended range are allowed and are valid, the resulting glyphs declared inside the provider appears warped when rendered in-game. The height field is optional. When not defined, it defaults to 8, regardless of the underlying texture resolution.

UTF-16 codepoints encoded in UTF-8 sequences can be used by use of surrogate pairs. To convert a character into a surrogate pair, one can use the following equations, where C is the codepoint in decimal:

  • High Surrogate (first codepoint): ((C − 65536) − (C % 1024)) ÷ 1024 + 55296
  • Low Surrogate (second codepoint): (C % 1024) + 56320

When the length of either chars or its strings is not a divisor of the resource's dimensions, it can result in an unexpected division of glyphs. The Unicode escape \u0000 can be used to add padding in the list. Padding acts as a "dummy character", so that the glyph data at that corresponding position in the file is not assigned a character.

Space provider

[edit | edit source]

The space provider defines the width of a character's glyph.

  • [NBT Compound / JSON Object]: The provider.
    • [String] type: space.
    • [NBT Compound / JSON Object] advances: Object that specifies the width of each character. The keys are the characters. The keys must be only 1 grapheme long (multi-byte character still count as one character, like U+1F525 🔥 FIRE, which is encoded as 0xF0 0x9F 0x94 0xA5). Although it is intended to be used for whitespace characters (characters that have "WSpace=Y" in Unicode), it can be used for any character, as long as there is no prior definition of that character's glyph.
      • [Int] <a codepoint>: The width of the character specified by the key. Values must be an integer whose absolute value is less than or equal to 256. Negative values are forced to 0 when typed in chat.

By default, the game has two widths defined:

  • U+0020 <SPACE> SPACE is 4
  • U+200C <ZWNJ> ZERO WIDTH NON-JOINER is 0

TTF provider

[edit | edit source]

The ttf provider embeds already-compiled TrueType and OpenType fonts.[b]

  • [NBT Compound / JSON Object]: The provider.
    • [String] type: ttf.
    • [String] file: A resource location to a file ending in .ttf. Path is relative to the /assets/<namespace>/font/ directory.
    • [Int] oversample: The resolution to render at. Values that don't match the glyph's native em sizing division or DPI cause it to be anti-aliased.
    • [NBT List / JSON Array] shift: An array of two integers. It defines how much each glyph contained in this TrueType font is to be moved horizontally and vertically.
      • [Int]: The horizontal shifting (positive is leftward, negative is rightward).
      • [Int]: The vertical shifting (positive is downward, negative is upward).
    • [Int] size: This field is similar to a bitmap provider's height field. This is a divisor by which the em-size of the font's glyphs are to be divided and then fitted into the bitmap grid. This value can vary greatly across different fonts.
    • [String][NBT List / JSON Array] skip: A list of strings or a string of the characters to which this font has no assignment. If it is a list of strings, the strings are concatenated together and then act as if it were originally a string. This allows the same input as a bitmap provider's chars.

Unihex provider

[edit | edit source]

The unihex provider is a replacement for the Legacy Unicode provider. It uses the GNU Unifont .hex format. It references a ZIP archive that contains a number of .hex files.

  • [NBT Compound / JSON Object]: The provider.
    • [String] type: unihex.
    • [String] hex_file: A resource location to a .ZIP archive file. It must be openable by Java's ZipFile. Inside, there must be at least 1 .hex file at the root of the archive. Subdirectories are not walked through and filenames with an extension different from .hex are ignored. Filenames must follow normal file resource name rules.
      • [String]: Each .hex file in the .ZIP archive contains one or more glyph definitions. Each line has one glyph definition, and follows the format <codepoint>:<data>. <codepoint> is the Unicode codepoint, without the U+ or 0x. It must have four, five, or six digits. The <data> is a hexadecimal number that encodes the glyph data. Glyphs are always sixteen pixels high. Glyphs can be eight, sixteen, 24, or 32 pixels wide.[c]
    • [NBT List / JSON Array] size_overrides: Defines custom widths for a range of characters.
      • [NBT Compound / JSON Object]: One range.
        • [String] from: The starting character for the range at which this size override applies to.
        • [String] to: The ending character for this range. Both from and to must be one character.
        • [Int] left: The position of the left-most column of glyphs in range.
        • [Int] right: The position of the right-most column of glyphs in range. Both left and right must be between 0 and 32, inclusive.

Reference provider

[edit | edit source]

The reference provider serves one purpose: to include another provider only once. It can be used to include providers from other fonts in other resource packs.

Referenced providers are guaranteed to be loaded only once, no matter how many times they are included.

  • [NBT Compound / JSON Object]: The provider.

Legacy Unicode provider

[edit | edit source]
BlockSprite rose.png: Sprite image for rose in Minecraft
This section describes content that has been removed from the game.
 
This feature was present in earlier versions of Minecraft, but has since been removed.

The legacy_unicode provider is similar to the bitmap provider in that it loads glyphs from only textures. This format is deprecated, and is prioritized only when the "Force Unicode Font" option is turned on. It acts as a "fallback" for glyphs that no other provider has defined a texture for.

  • [NBT Compound / JSON Object]: The provider.
    • [String] type: legacy_unicode.
    • [String] template: A reference to a set of files. The string %s must be included in this field. %s is replaced with every valid page number, in hexadecimal.
    • [String] sizes: A reference to a binary resource that contains the widths of each glyph. Most often, this file is called glyph_sizes.bin; this is its default name.

Templates, specified by the template field, are name-based, and are all PNG files. Each template file must have equal width and height. The template numbering scheme works based off of the Unicode BMP. The number used is equal to a BMP codepoint's high byte.[d][e] These template textures are called "pages". Template page "22" must cover characters U+2200 to U+22FF. Page numbers go from 00 to FF. Characters beyond U+FFFF cannot be changed through this provider. By default, each glyph is 16×16 pixels wide, so each individual template page is 256×256 pixels (16 glyphs on each line, 16 lines). Its default textures are an outdated version of GNU Unifont.[4]

The file referenced by the sizes field must have the following format. Each character width is one byte large. The high nibble[f] records the starting position, while the lower nibble records the ending position in the 16×16 glyph grid. For this reason, the file must be 0xFFFF bytes long (65535 in decimal).

A specific character's width is determined by finding its codepoints byte. The character 'A' has a codepoint of U+0041, so byte offset 0x41 (65 in decimal) would be addressed. A square character occupying the entire grid (pixel width #1 [0, 0x0] through #16 [15, 0xF]) would have a value of 0x0F (15 in decimal).

Widths cannot extend past 16 pixels, and characters whose codepoints are greater than U+FFFF are not handled. Some codepoints are invalid on their own. These are the surrogate pairs; they are used to encode codepoints higher than U+FFFF in UTF-16. This means that the template pages D8, D9, DA, DB, DC, DD, DE, and DF are invalid and cannot be used.

History

[edit | edit source]
This section is missing information about: Console Edition font info
 
Please expand the section to include this information. Further details may exist on the talk page.

Java Edition

[edit | edit source]
Java Edition Classic
0.0.2aAdded text to the game, and the default font as a result.
Java Edition Beta
1.1The font.txt file was accidentally removed from client.jar, resulting in all in-game text being invisible.
1.1_01Readded the font.txt file, which made in-game text display properly again.
Java Edition
1.111w49aAdded GNU Unifont to fully support multi-languages.
1.513w09aThe font texture is now able to be changed in a resource pack.
Added support for glyph resolutions above 16×16.
1.6.2reuploadFixed distorted font when HD font is used.[5]
1.13pre6Fonts are now saved as TrueType font files.
pre7Reverted TrueType font.
Retroactively removed TrueType font file from pre-6.
1.1620w17aRaw JSON text format now has a font key, which defines the font to use for that component. Default is minecraft:default.
Added the unihex provider.[verify]
The full range of Unicode is now supported in font definitions.[verify]
Pre-release 7The chars field of the bitmap provider can now specify UTF-16 codepoints.
1.1922w11aAdded the space provider.
Rendering of the space glyph is no longer hardcoded; it needs to be declared manually in the font.
1.2023w17aRemoved the legacy_unicode provider.
Added the unihex provider.
Added the reference provider.
1.20.524w06aAdded font variant filters to font providers.
1.21.4Pre-Release 1GNU Unifont updated to version 16.0.01.
1.21.625w18aGNU Unifont updated to version 16.0.03.
Added previously omitted Unifont glyphs for Private Use Areas.
Unihex Font Provider: Field size_overrides is now optional (defaults to empty list).
1.21.1125w41auniform font has been updated to use Unifont 17.0.01.

Bedrock Edition

[edit | edit source]
Pocket Edition Alpha
v0.1.0Added the default ASCII font called default.png.
v0.11.0build 1Added GNU Unifont to fully support multi-languages.

Legacy Console Edition

[edit | edit source]
Legacy Console Edition
Xbox 360Xbox OnePS3PS4PS VitaWii USwitch
TU0CU11.001.001.00Patch 11.0.1Added text to the game, and the default font as a result.
TU1Updated the font with a clearer version.

Issues

[edit | edit source]

Issues relating to "Font" are maintained on the bug tracker. Issues should be reported and viewed there.

Trivia

[edit | edit source]
  • Although not in the changelog or specification, the default copy of the unihex provider also includes a [NBT List / JSON Array] __ranges field in the [NBT Compound / JSON Object] entries of [NBT List / JSON Array] size_overrides. It is a list of strings, being the Unicode block names of the applying range.
  • The New Nintendo 3DS Edition's font is a combination of the pre-1.12 JE font and some select characters from GNU Unifont. In addition, the ® sign was changed.
[edit | edit source]

See also

[edit | edit source]

Notes

[edit | edit source]
  1. Is not an actual Unicode character. "notdef" refers to the name given to it in font formats.
  2. Despite its name, the TTF provider accepts OpenType ("otf") fonts.
  3. Because the height is always 16, the width can be calculated. It is always equal to len(data) // 4.
  4. "High byte" refers to the first byte in a multi-byte sequence. For example, the high byte of 0xABCD is 0xAB.
  5. For codepoints with digits less than 4, they are padded with 0. For example, 0xF3 would be padded to 0x00F3: page 00. Likewise, 0xFAE is 0x0FAE: page 0F.
  6. A nibble is "half" of a byte. For example, in the byte 0xAB, A is the high nibble and B is the low nibble.

References

[edit | edit source]
  1. "Emojis & Symbols" – Bedrock Wiki, April 1, 2024.
  2. MCPE-185774 — New server UI does not show some characters — resolved as "Won't Fix".
  3. https://github.com/TwistedAsylumMC/bedrock-unicode-characters
  4. MC-197772 — Missing textures in minecraft:uniform font — resolved as "Fixed".
  5. MC-17673 — Distorted fonts when using a converted texturepack on startup — resolved as "Fixed".
[edit | edit source]
[edit | edit source]