This plugin adds a new format that allows you to create Minecraft-styled title models that you can render in high quality.
Plugin Homepages: ewanhowell.com and blockbench.net
This repo contains the fonts and textures that the plugin uses. To download and use the plugin, go to the plugin store within Blockbench (File > Plugins > Available
) and install it. For more information, please see the plugin homepage.
Anyone can submit fonts and textures to this plugin, as long as they meet the requirements and follow the rules.
- Fonts/textures must be somewhat high quality. No low-effort submissions.
- Fonts/textures must be somewhat unique from other fonts/textures. Try not to re-use other textures.
- Full credit must be provided. If you are basing a font/texture off of someone else's design, credit them too!
- Font/texture IDs must be in the snake_case format, and only use
a-z
,0-9
, and underscores.
To make a submission, create a fork of this repository and edit/upload the necessary files. After all the changes are made, create a pull request and explain what you are adding.
For larger submissions like fonts, it will be a lot easier to clone the repo to your PC and use an app like GitHub Desktop to manage changes.
After making a submission of either a font or a texture, it would be really helpful if you could compile it. If you don't understand how to do this, you can skip this step and I can do it for you.
- Install Node.js.
- Clone the repo to your PC, add your changes, and then navigate to the
scripts
directory in the repo. - Open a terminal inside this directory. On Windows, this can be done by typing
cmd
into the address bar in file explorer. - Run the command
npm i
.
- If on Windows, just run the
compile.bat
file. - If on macOS or Linux, run the command
node compile.js
. - Wait until the script finishes.
- To create a new texture, start by using another texture as a template.
flat.png
is the best template for general textures. - Textures can be found at
fonts/fontname/textures
, and overlays can be found infonts/fontname/overlays
. Save your texture to either thetextures
oroverlays
folder, depending on what you made. - Edit the
textures.json
file located atfonts/fontname/textures.json
and add your texture to it. This file follows the following formatting:
{
"textures": { // If you are adding a texture, it goes in here
"texture_id": { // The ID of the texture you are adding (required)
"name": "Texture Name", // The name of the texture if it doesn't match the ID (optional)
"author": "Author Name", // Your name (required)
"variants": { // The variants for this texture (optional)
"variant_id": {
"name": "Variant Name", // (optional)
"author": "Author Name" // Only needed if different from texture author (optional)
}
}
}
},
"overlays": { // If you are adding an overlay, it goes in here
"overlay_id": { // The ID of the overlay you are adding (required)
"name": "Overlay Name", // The name of the overlay if it doesn't match the ID (optional)
"author": "Author Name" // Your name (required)
}
}
}
Note: Overlays do not support variants
Thumbnails are generated through the compile script. Do not make them manually.
- Textures must use the exact same shapes as the
flat.png
texture. This means no extra cut-outs or filling parts in. - Textures must be one of these three sizes:
1000x320
,2000x640
, or4000x1280
. - Do not add too many variants to a single texture. If I feel a variant is unnecessary, or there are too many, it will be denied.
- The border colour at the bottom (under all character lines) must be the same colour for the entire thing. It will not work if you try to use multiple colours.
- Do not submit textures generated using the plugin.
Fonts require you to create a model for every character.
These are the characters for a font. Some characters use a name instead, since the characters are invalid for file names.
Required characters
creeper
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
£
€
0
1
2
3
4
5
6
7
8
9
&
#
(
)
[
]
{
}
forwardslash
backwardslash
questionmark
!
.
colon
-
openquote
'
+
=
lessthan
greaterthan
%
^
asterisk
~
end
- The start terminatorstart
- The end terminator,
;
_
$
@
Optional characters
space
- The font will use this character instead of automatically generating a spacespacer
- A 1px wide model to use when character spacing is used. This model will be stretched to fill the space.
If you want to make a font using different characters, please make an issue about it first.
- To create a font, create a new folder inside the
fonts
directory with the ID of your font. - Inside this new folder, create the folders
characters
,textures
, andoverlays
. - Create a
flat.png
texture inside thetextures
folder. This will be used for your UV. - Create the full layout for your UV.
- Characters need to be arranged into rows, with the top face directly above the character, and the bottom face directly below.
- You can have as many rows as you need, as long as you leave room for the border UV at the bottom.
- 2px-wide spaces must be between the characters and the rows.
- The orders of the characters doesn't matter, apart from the first 4, which must be:
Creeper A
,A
,B
,C
. These 4 characters must also all be the same width. - If some characters are taller than the standard character height, they can go into their own rows.
- You do not need to worry about making the border UVs at this time.
- See the
minecraft-ten
andminecraft-five-bold
textures for example UVs. - Font UVs must be
1000x320
.
- Now it is time to create the models. For every character, create a model for it and save it to the characters folder using the name listed above in the characters list.
- Characters are modelled using the
Java Block/Item
format. You will probably need to enable theDeactivate Size Limit
Blockbench setting. - The borders for each character must be 2px thick (if your font has borders).
- You can now add the border UVs to the texture as you create the borders. If you are unsure on how borders should work, see the
minecraft-ten
andminecraft-five-bold
models for examples. - The UV for the borders must be located underneath all the character rows.
- The baseline for the text must be at Y level 2, with the border going to Y level 0. If the font does not have a border, the text baseline needs to be Y level 0.
- Keep characters centred in the scene.
- Groups and textures in the model do not matter, they will be ignored when the font is compiled.
- Try to create optimised models without unnecessary elements.
- Characters are modelled using the
- Create a
textures.json
file, following the formatting explained in the textures section.- The first texture must be
flat
, and is required for all fonts. - The second texture is the main texture, and will be the one that is automatically selected in the plugin.
- All the other textures will be sorted by popularity over the last week.
- The first texture must be
- Create at least one overlay texture. It doesn't matter what it is, but at least one is required.
- Add your font to the
fonts.json
file found at the root of the repo. This file follows the following formatting:
[
{
"id": "font-id", // Font ID (required)
"author": "Ewan Howell", // Font author (required)
"width": 36, // Width of first 4 characters, including border (required)
"height": 36, // Character height, including border, but not characters that go above or below the baselines, such as a comma (required)
"border": 212, // The Y coordinate of the top of the border UV (required)
"faces": [ // List of coordinates defining the front faces of the rows of characters (required)
[16, 48], // When there are two values, these are the top and bottom of the face
[148, 154, 186, 194] // When there are four values, these are the top of the section over the topline, the top of the normal height, but bottom of the normal height, and the bottom of the section below the baseline. The first and second values can be the same if there is no section above the topline. Same goes for the baseline.
],
"ends": [ // List of coordinates defining the top and bottom faces of the rows of characters (required)
[0, 16, 48, 64], // First two values are the top and bottom Y coordinates of the top face, second two are the bottom face
[132, 132, 186, 186] // If your font does not have top and bottom faces, you can make the top and bottom the same values, which should match the top and bottom of the front faces.
],
"terminatorSpace": true, // The terminator characters should have a space between itself and the text (optional)
"forcedTerminators": true, // The terminator characters will always be used and cannot be disabled (optional)
"autoBorder": true, // Will generate an automatic border which is a single element around the entire text row (optional)
"borderless": true, // The font has no border (optional)
"overlay": true, // The font has an overlay texture that is applied over the top of the "gradient" texture mode. Requires an "overlay.png" in the textures folder. See the "minecraft-five-bold-block" for an example (optional)
"example": [ // The example text to display in the dialog text preview. Only provide if you are creating characters for a different alphabet (optional)
"exmple", // The top text
"text" // The bottom text
]
}
]
The easiest way to test your font is to modify the plugin to use your fork of this repo instead of the official one.
- Download the plugin file from the Blockbench Plugins repository.
- Edit the
repo
variable on line 2 to be your repo. - Uninstall the official plugin and install your modified one by dragging and dropping the file into Blockbench.
- Compile the font using the compile script and commit the font to your fork, then view the font from within Blockbench!
To view all characters in your font, you can use Help > Developer > Load Debug Minecraft Title Text
Fonts have support for variants. These are alternative versions of an existing font, such as slightly different character designs, or different character sets.
The characters in font variants do not matter, but the first 4 characters must all be the same width, where character 2, 3, and 4 are the ones that appear in the thumbnail. There is a minimum requirement of 4 characters for a font variant.
To create a font variant, follow the same process as creating a normal font. When it comes to adding to the fonts.json
, instead of adding a new entry, instead add to a variants
array of the parent font.
[
{
"id": "parent-font",
// rest of parent font details
"variants": [
{
"id": "variant-id"
}
]
}
]
Variant fonts use the same properties as normal fonts. The only required property of a variant is its ID. Any missing properties will be inherited from the parent font.