Changelog — NovaUHC / Ultimate
Changements depuis l'ajout de la nouvelle API (LangManager / système i18n)
[2.0.0] — Refonte complète du système de traduction 2026-02-26
️ Nouveaux composants (Core)
Lang (interface)
- Nouvelle interface centrale remplaçant CommonString
- Supporte les placeholders dynamiques via Map<String, Object>
- Méthodes : send(Player), sendAll(), getMessage(Player), getDefaultMessage()
- Fallback en cascade : locale joueur → locale serveur → message par défaut
LangManager (singleton)
- Gestionnaire centralisé de toutes les traductions
- Auto-génération des fichiers .yml par locale (fr_FR.yml, en_US.yml)
- Enregistrement dynamique des enums via register(ScenarioLang[])
- Résolution par locale par joueur à chaque envoi
CommonLang (enum)
- Remplacement complet de CommonString (80+ messages)
- Clés migrées : TEAM_REDEFINED_AUTO, DISABLE_ACTION, LOBBY_CHAT_FORMAT, CANT_TALK_DEATH, CHAT_DISABLED, CHAT_GLOBAL_FORMAT, etc.
- Support bilingue FR/EN pour chaque entrée
ScenarioLang (interface)
- Interface implémentée par tous les enums de scénario
- Méthodes : getBasePath(), getConfig(), setConfig(), getDefaultMessage(), getScenarioPlaceholders(UHCPlayer)
[2.1.0] — Migration UI — Messages & Titres 2026-02-26
✏️ Fichiers UI migrés (24 classes)
Toutes les chaînes codées en dur ont été remplacées par des appels LangManager :
Fichier
Lang Enum créé
ScenariosUi.java ScenariosUiLang
TeamConfigUi.java TeamConfigUiLang
ConfigVarUi.java ConfigVarUiLang
CenterUi.java CenterUiLang
BorderConfig.java BorderConfigLang
WorldUi.java WorldUiLang
LimiteStuffUi.java LimiteStuffUiLang
ScenarioVariableUi.java ScenarioVariableUiLang
OrePopulatorUi.java OrePopulatorUiLang
ConfirmMenu.java CommonLang (existant)
inGameScenario.java inGameScenarioLang
MumbleUi.java MumbleUiLang
+ 12 autres UI enums dédiés
️ Centralisation des titres de menus
- Suppression de menu.yml comme source de titres
- Nouveau enum UiTitleLang centralisant tous les titres d'inventaires
- Génération des lobby items par joueur (locale individuelle au lieu de globale)
Fix : import ConfirmMenu.java
- Correction du double import lang.lang.CommonLang généré par erreur lors du patch automatisé
[2.2.0] — Migration Scénarios — 23 enums créés 2026-02-26
Nouveaux enums de scénario (module Core)
Scénario
Enum
GoldenHead GoldenHeadLang
Inventors InventorsLang
BlockRush BlockRushLang
NineSlot NineSlotLang
OreRoulette OreRouletteLang
SimonSays SimonSaysLang
NoNether NoNetherLang
NoEnd NoEndLang
LongShoot LongShootLang
LoupGarou LoupGarouLang
FireForce FireForceLang
+ 12 autres enums dédiés
- Chaque enum implémente ScenarioLang avec getBasePath() retournant ""
- Traductions FR/EN pour chaque entrée
[2.3.0] — Ajout du Module Ultimate 2026-02-27
Présentation
Le module
Ultimate est un module indépendant qui vient se greffer sur le Core NovaUHC pour y ajouter des
modes de jeu supplémentaires. Il fonctionne comme une extension : le Core reste intact, et Ultimate enregistre ses propres scénarios au démarrage via ScenarioManager.
Le module contient actuellement
17 scénarios répartis en deux catégories :
- Scénarios standards — modes jouables seuls ou en équipe (TaupeGun, SlaveMarket, SkyHigh, FallenKingdom, Legend, etc.)
- Scénarios spéciaux (isSpecial() = true) — modes qui modifient les règles de base comme la taille des équipes (SoulBrother, MysteryTeam, TeamAtFirstSight, King, TaupeGun)
Tous les scénarios Ultimate utilisent le même système i18n que le Core (LangManager, ScenarioLang), garantissant un support bilingue FR/EN cohérent sur l'ensemble du serveur.
[2.3.0] — Module Ultimate — Nouveaux scénarios & migration 2026-02-27
Nouveaux Lang enums (module Ultimate)
Scénario
Enum
MysteryTeam MysteryTeamLang
SoulBrother SoulBrotherLang
SkyDef SkyDefLang
CommonString → LangManager (module Ultimate)
Fichiers migrés dans le module ultimate :
Fichier
Remplacements
King.java TEAM_REDEFINED_AUTO
Legend.java TEAM_REDEFINED_AUTO
SkyDef.java TEAM_REDEFINED_AUTO
TaupeGun.java TEAM_REDEFINED_AUTO × 2, LOBBY_CHAT_FORMAT, CANT_TALK_DEATH, CHAT_DISABLED, CHAT_GLOBAL_FORMAT
TaupeCMD.java DISABLE_ACTION × 2
TeamAtFirstSeigth.java TEAM_REDEFINED_AUTO
FallenUi.java CLICK_GAUCHE, CLICK_DROITE
FallenKingdom.java DISABLE_ACTION × 2
SoulBrother.java TEAM_REDEFINED_AUTO
SlaveMarketUi.java DISABLE_ACTION
Fix : SoulBrother.java
- Correction du bug REUNION_TIME — la variable n'était jamais initialisée depuis la config, rendant la réunion immédiate au lancement
Fix : basePath Lang enums Ultimate
Correction du getBasePath() erroné ("message" → "") sur :
- BeatTheSantaLang
- FKLang
- SkyHigthLang
- SlaveMarketLang
️ Système de Légendes (18 classes)
Ajout complet du système Legend avec :
- LegendRole (classe de base) — méthodes helpers isOwnerMelee(), isOwnerArrow()
- LegendRegistry — enregistrement et lookup des rôles
- LegendData — stockage des données par joueur
- Cooldown — gestion des cooldowns d'abilities
- LegendLang — enum bilingue pour toutes les descriptions de rôles
18 rôles implémentés :
Classe
Capacité principale
Archer Bonus dégâts arc
Assassin Invisibilité au kill
Cavalier Boost vitesse monture
Corne Effet de corne
Dragon Souffle de feu
Mage Projectile magique
Marionnettiste Contrôle d'entité
Medecin Soin passif d'équipe
Nain Résistance souterraine
Necromancien Invocation à la mort
Ogre Force passive
Paladin Aura de protection
Princesse Charme
Prisonnier Chaîne
Soldat Armure passive
Succube Vol de vie
Tank Absorption de dégâts
Zeus Foudre à l'attaque
[2.3.1] — Patch compilation Ultimate (part. 1) 2026-03-08
Fichiers corrigés
- SoulBrother.java — import LangManager + remplacement TEAM_REDEFINED_AUTO
- TeamAtFirstSeigth.java — import LangManager + remplacement TEAM_REDEFINED_AUTO
- TaupeCMD.java — import LangManager + DISABLE_ACTION × 2
- TaupeGun.java — import LangManager + 6 remplacements CommonString
- SlaveMarketUi.java — import LangManager + DISABLE_ACTION
- SlaveMarketLang.java — basePath "message" → ""
- SkyHigthLang.java — basePath "message" → ""
Notes de migration
Pattern de remplacement standard
// ❌ Ancien
CommonString.TEAM_REDFINIED_AUTO.sendAll();
CommonString.DISABLE_ACTION.send(player);
String msg = CommonString.LOBBY_CHAT_FORMAT.getMessage(player);
// ✅ Nouveau
LangManager.get(CommonLang.TEAM_REDEFINED_AUTO).sendAll();
LangManager.get(CommonLang.DISABLE_ACTION).send(player);
String msg = LangManager.get(CommonLang.LOBBY_CHAT_FORMAT).getMessage(player);
Enregistrement des Lang enums dans Main.java
LangManager l = LangManager.get();
l.register(MyScenarioLang.values());
l.register(AnotherScenarioLang.values());
// etc.
Règle getBasePath()
Tous les enums ScenarioLang doivent retourner "" :
@Override
public String getBasePath() {
return ""; // ✅ Correct
// return "message"; ❌ Incorrect — génère des clés yml cassées
}