File Details
Orbis_and_Dungeons-2026.2.10-9611.jar
- R
- Feb 10, 2026
- 129.00 KB
- 968
- Early Access
File Name
Orbis_and_Dungeons-2026.2.10-9611.jar
Supported Versions
- Early Access
Version 2026.2.10 - Translation Priority Fix & Stability Patch
🐛 Bug Fix: UI Descriptions Not Updating from Config
Problem: When editing displayName or tagline in races_config.json / classes_config.json, the changes were not reflected in the UI. Both RaceSelectionPage and ClassSelectionPage were reading names and taglines exclusively from translation files (en.json, pt_br.json, etc.) via TranslationManager.translate(), completely ignoring the config values.
Root Cause: The config fields displayName and tagline were loaded into memory correctly (via RaceConfigLoader / ClassConfigLoader) but were never referenced by the UI code. The UI only used TranslationManager.translate("race.<id>.tagline") — which reads from language JSON files only.
Fix: Implemented a translation-first priority chain with config fallback:
| Priority | Source | When Used |
|---|---|---|
| 1st | Current language translation file (e.g., chinese.json) |
If the key exists in the active language |
| 2nd | English translation file (en.json) |
Fallback if current language doesn't have the key |
| 3rd | Config JSON (races_config.json / classes_config.json) |
Fallback for new races/classes without translations |
| 4th | Raw ID | Last resort if nothing else is available |
This means:
- Multilingual support works:
/language set chinese→ useschinese.jsontranslations when available - New custom races/classes work immediately: If a user adds a new race in config with
tagline: "Master of Shadows"but no translation file has it yet, the UI displays the config text - Existing translations take priority: Prevents config overriding properly localized text
🔧 New API: TranslationManager.translateOrNull()
Added translateOrNull(String key) method that returns null instead of the raw key when no translation is found. This enables the priority chain pattern:
String tagline = TranslationManager.translateOrNull("race.orc.tagline");
if (tagline == null) {
tagline = config.tagline; // fallback to config
}
🛡️ Critical Stability Fix: System.err Removal
Problem: TranslationManager contained 9 instances of System.err.println() and 1 e.printStackTrace(). In Hytale's plugin system, System.err outputs are classified as SEVERE and can kill the entire plugin.
Fix: All 10 occurrences replaced with System.out.println():
| Location | Original | Fixed |
|---|---|---|
extractDefaultLanguageFiles() |
System.err on IOException |
System.out |
createEmptyLanguageFile() |
e.printStackTrace() |
System.out with message |
loadAllTranslations() |
System.err × 3 (dir not found, no files, load fail) |
System.out × 3 |
loadLanguagePreference() |
System.err on IOException |
System.out |
saveLanguagePreference() |
System.err on IOException |
System.out |
translate() |
System.err on format failure |
System.out |
getTranslation() |
System.err on missing key |
Removed entirely (silent) |
setLanguage() |
System.err on unknown lang |
System.out |
📁 Files Changed
| File | Changes |
|---|---|
TranslationManager.java |
Replaced 9× System.err → System.out, removed 1× e.printStackTrace(), added translateOrNull() method |
RaceSelectionPage.java |
buildRaceButtons() + applyRaceToUI() — translation priority with config fallback |
ClassSelectionPage.java |
Button building + applyClassToUI() — translation priority with config fallback |
📋 Build Info
- JAR:
Orbis_and_Dungeons-2026.2.10-9611.jar - Java: 25 | Gradle: 9.3.1 | Hytale Server: 2026.02.06

