Goal:
Allow players to type and display text in any language supported by
Unicode, including Chinese, Japanese, Korean, Thai, Arabic, Korean, Hindi, and more. This
covers all text surfaces: chat editor, chat messages, signs (in-world
and editor), world name/seed, server address/port fields, and all
Iggy Flash UI text fields.
Multi-language support:
Two complementary rendering systems were added to handle Unicode text
across the entire client:
1. Iggy UI (Flash-based text fields): A new UIUnicodeBitmapFont class
serves Java Minecraft's glyph page PNGs (glyph_00.png-glyph_FF.png)
through Iggy's bitmap font provider API. Registered as the global
fallback font with metrics matching the Mojangles bitmap font for
correct baseline alignment. When the primary bitmap font lacks a
glyph, it returns IGGY_GLYPH_INVALID and Iggy seamlessly falls back
to the unicode bitmap font.
2. Legacy C++ Font renderer (chat editor, in-world signs): Revived the
commented-out unicode glyph page system in Font.cpp. Characters not
in the bitmap font texture are rendered from glyph page PNGs loaded
on demand, with proper texture switching mid-string.
3. ChatScreen input: Removed the restrictive acceptableLetters filter
so all printable Unicode characters are accepted in chat.
Languages now supported for text input and rendering:
- Japanese (Hiragana, Katakana, Kanji)
- Chinese (Simplified and Traditional)
- Korean (Hangul)
- Thai
- Arabic
- Hindi (Devanagari)
- Russian (Cyrillic) - already worked via bitmap font
- Greek - already worked via bitmap font
- Polish, Czech, Turkish (Extended Latin) - already worked via bitmap font
- Armenian, Georgian, and other scripts covered by glyph pages
Security fixes:
- Fixed memset under-initialization of Font::charWidths (zeroed 460
bytes instead of 460*sizeof(int)=1840 bytes, leaving entries 115+
uninitialized) - pre-existing bug
- Added bounds checks to all UIUnicodeBitmapFont callbacks to reject
glyph IDs outside [0, 65535], preventing OOB array access
- Added bounds check in Font::width() section-sign fallback path to
prevent OOB read on charWidths[] with high codepoints
- Blocked Unicode bidirectional override characters (U+202A-202E,
U+2066-2069) in chat input to prevent message spoofing
Memory leak fix:
- Fixed SignTileEntity::load allocating wchar_t[256] with new[] on
every sign load without freeing. Replaced with stack allocation.
Debug logging:
- Added [SIGN] prefixed logging for sign save/update operations
- Added [CHAT] prefixed logging for chat send/receive operations
Files changed:
- UIUnicodeBitmapFont.h/.cpp (new) - Iggy bitmap font for glyph pages
- UIBitmapFont.cpp - Return IGGY_GLYPH_INVALID for unknown chars
- UIFontData.h/.cpp - Added hasGlyph() method
- UIController.h/.cpp - Load and register unicode bitmap fallback font
- UITTFFont.h/.cpp - Added registerAsDefaultFonts parameter
- Font.h/.cpp - Revived unicode glyph page rendering system
- ChatScreen.cpp - Accept all Unicode input, block bidi overrides
- Gui.cpp - Chat display debug logging
- ClientConnection.cpp - Sign update debug logging
- SignTileEntity.cpp - Sign save logging, memory leak fix
Updated `<PreprocessorDefinitions>` to include `NDEBUG`,
indicating that debugging code will be excluded from the
build. This change is part of the preparation for a
release version of the project.
* Change F3 rendering and add git version information
* Change position, block, chunk and facing
* Limit position decimal places
* Move LCE unique to the bottom and add more java features
* Fix chunk information disappearing after y256
* Add chunk count information
* Move build number script to prebuild.ps1
* We dont need to specify vector and wstring are from std
* Restore build number to fix multiplayer
* Use short symbolic-ref
* Restore original BuildVer.h
---------
Co-authored-by: Loki <lokio.casebstv@gmail.com>
Co-authored-by: Loki Rautio <lokirautio@gmail.com>
Before any major refactoring, warnings do help a little except for slowing down the compilation (as it needs to output everything to stdout), so disable MSVC warnings in Release mode.
* Move to a postbuild.ps1 script and Set the working dir at runtime as output dir
* Update for 2f711d4
* Only copy newer files and remove needed files from gitignore
The Debug|x64 and Release|x64 configurations had no PostBuildEvent to
deploy sound assets alongside the executable. At runtime, SoundEngine
looks for Durango\Sound\Minecraft.msscmp and music\ relative to the
output directory, causing silent failure (no sound effects or music).
Add post-build xcopy steps for both configurations to mirror what the
Durango build already does.