Skip to main content

A module for exporting, manipulating, and working with Minecraft fonts

Project description

mcfonts

Code style: black Pylint License PyPi GitLab Release (latest by SemVer)

mcfonts is a versatile, fast, and extensible package for working with Minecraft fonts.
mcfonts works with any font JSON and can export every kind of texture & size, no matter the amount or complexity.
It can be used anywhere in places that deal with Minecraft fonts.


Table of contents


📦 Installation

mcfonts is available on PyPi. It requires a Python version of at least 3.10.0.

It depends on these packages:

It also has these optional dependencies:

docs: Generating documentation

To install mcfonts with pip, run:

python -m pip install mcfonts

If you would like the ability to generate documentation alongside it, run:

python -m pip install mcfonts[docs]

🧮 Features

  • Handles these providers:
    • space
    • bitmap
    • legacy_unicode
    • ttf
  • Warns of invalid data
  • Finds oversights that the Vanilla client does not notice
  • Generates optimized and space-saving glyph paths
  • Works with any font, not just Vanilla
  • Works on fonts with double, triple, or quadruple scales
  • Generates summaries of fonts
  • Allows easy inspection of a font's details
  • Contains glyph utilities and compacting functions

🛠 Usage

Using mcfonts is simple. Most functionality begins by using a function in the mcfonts.importing module.

import mcfonts.importing
font = mcfonts.importing.from_java_font_file("path/to/font.json")
# Do stuff with `font`...

Exporting

To export to OpenType:

import mcfonts.importing
font = mcfonts.importing.from_java_font_file("path/to/font.json")
font.export("My cool font").save("My cool font.otf")

That's it. Your font is at ./My cool font.otf.

If you have a font with ~200 characters, it generated in ~0.3 seconds.
If you have a font with ~2,000 characters, it generated in ~4.9 seconds.
If you have a font with ~15,000 characters, it generated in ~33.7 seconds.
If you have a font with ~60,000 characters, you've made a mistake. (your font generated in ~2 minutes, 5 seconds.)

❗ Note: Only OpenType fonts are supported for exporting.
Use other utilities such as FontForge to convert between formats.


❓ Why?

⏳ It's fast

In the time it has taken you to read this sentence, a font with 1,000 glyphs has already been generated.

A 13,000 glyph font takes ~30 seconds.

A simple 100 glyph font? A fraction of a second; it takes 1/100s.

➿ It's versatile

mcfonts works on fonts of any height, ascent, and size. It correctly compensates for oversized characters, translucent textures, and invalid data.

🧠 It makes sense

Fonts are organized by a class, instead of using individual functions. Providers, too, have their own classes. Exporting and compacting are separated into their own functions, which makes debugging & modification easy.

mcfonts does not fix mistakes in fonts. It will extrapolate missing data, but empty/corrupt textures, invalid numbers, or extreme cases, result in an error when trying to create a MinecraftFont instance.

This gives you the ability to correct these problems, instead of silently making them work (sometimes with limited effectiveness) and keeping you in the dark about future issues.

📜 It's documented

mcfonts has extensive documentation, both externally and in the source code. Functions are carefully written with rST-style docstrings, and module variables are given precise descriptions.


📒 Documentation

Documentation for mcfonts is available at https://mcfonts.readthedocs.io.

Building locally

You can build the documentation yourself by grabbing a copy of the source code:

git clone https://gitlab.com/whoatemybutter/mcfonts.git

The documenation has a few requirements, install them all with:

python -m pip install furo Sphinx sphinx-autoapi

There should be a docs directory; go to it. Run make html to begin building the documentation. It will be at _build/html/index.html.


📰 Changelog

The changelog is at CHANGELOG.md.


📜 License

mcfonts is licensed under MIT.
Fonts created with this tool are under no explicit license; you can license them in any way you want. This includes under a paid license.
By default, fonts created by this tool are under the public domain.

Although credit is embedded in exported fonts, removing this credit is allowed, and the function parameter MinecraftFont.export(include_credit) may be set to False.

Keeping it is greatly appreciated and helps make mcfonts better. There is no disadvantage to leaving the credit in.

🚫 Disclaimer

mcfonts is not affiliated, endorsed, created, supported, or an official product by Mojang Studios or by Microsoft Corporation in any way.


📎 Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcfonts-0.3.tar.gz (54.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcfonts-0.3-py3-none-any.whl (59.5 kB view details)

Uploaded Python 3

File details

Details for the file mcfonts-0.3.tar.gz.

File metadata

  • Download URL: mcfonts-0.3.tar.gz
  • Upload date:
  • Size: 54.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for mcfonts-0.3.tar.gz
Algorithm Hash digest
SHA256 1134b463496ec3a148030ce9fbc9ee51e0e9e39cf175e4c2632b8d71356decd2
MD5 659081c94eda2aa08f43cf40636cf84b
BLAKE2b-256 ea70ed0c38a9dd1e75c868312f1ff96130f3b2923d3d7c9b0e39ad41c112d397

See more details on using hashes here.

File details

Details for the file mcfonts-0.3-py3-none-any.whl.

File metadata

  • Download URL: mcfonts-0.3-py3-none-any.whl
  • Upload date:
  • Size: 59.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.9

File hashes

Hashes for mcfonts-0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f6e1d1dbff56856f3cecfcf63643e7bb0f12d33af02b2e52015be8478567128b
MD5 754e78c7656bd240960bbca34b4ec113
BLAKE2b-256 bd3a8a2fdc08d1af644b43e2fbc7b97d5561102ca0f46bea25f19958109933ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page