Nova UHC icon

Nova UHC -----

Revolutionary all-in-one Minecraft framework for creating and managing UHC games.




# NovaUHC — Notes de mise à jour

---

## [2.6.0] — 2026-05-03

### Nouveaux modules

#### Module `loupgarou` (Loup Garou UHC)
- Nouveau scénario à rôles inspiré du Loup Garou de Thiercelieux.
- ~40 rôles villageois : Analyste, Ancien, Astronome, Aubergiste, Avocat, Bienfaiteur, Bohémienne, Bouc Émissaire, Chaman, Chasseur, Citoyen, Conteuse, Corbeau, Détective, Druide, Ermite, Espion, Fossoyeur, Garde, Idiot du Village, Illusionniste, Interprète, Jumeaux, Lapin, Mire, Montreur d'Ours, Oracle, Petite Fille, Prêtresse, Prophétesse, Renard, Salvateur, Serviteur, Simple, Sœur, Sorcière, Vaudouiste, Vieux Sage, Voyante.
- Sous-packages dédiés : `loups/`, `solitaires/`, `hybrides/`, `couple/`, `vote/`, `cycle/`, `managers/`.
- Système d'aura LG (LIGHT/DARK) avec `LGAuraManager` et lock automatique pour Ange/Prêtresse/GMW/Loup Blanc.
- `LGRole` base : pattern `getEffects()` / `getDayEffects()` / `getNightEffects()` appliqué automatiquement via `applyInfiniteEffects` aux transitions jour/nuit.
- Commande `/lg` (remplace `/ww`) avec sous-commandes (dont `/lg list`).

#### ⚔️ Modules `demonslayerv3` & `demonslayerv4` (Demon Slayer UHC)
- **demonslayerv3** : refonte complète avec 22 démons (Akaza, Daki, Doma, Enmu, Furuto, Gyokko, Gyutaro, Hairo, Hantengu, Kaigaku, Kokushibo, Kumo, Kyogai, Muzan, Nakime, Rui, Susamaru, Yahaba…), 21 pourfendeurs (Tanjiro, Nezuko, Zenitsu, Inosuke, Genya, Gyomei, Kyojuro, Mitsuri, Muichiro, Obanai, Sanemi, Shinobu, Tamayo, Tengen, Tomioka, Yushiro, Kanao, Kanae, Hotaru, Kagaya, Sabito, Urokodaki) et 4 solitaires (Jigoro, Kaigaku, Shinjuro, Yoriichi).
- Systems dédiés : `assassin/`, `caverne/`, `chateau/`, `infection/`, `nichirin/`, `train/`.
- **demonslayerv4** : variante v4 avec son propre roster.
- Configs : `core/src/main/resources/api/scenario/special/demonslayerv3.yml`, `demonslayerv4.yml`.

#### Module `chainsawman` (Chainsaw Man UHC)
- Scénario à pactes (87 pactes au total).
- Démons inspirés de l'œuvre : Ange, Araignée, Armes, Avenir, Bombe, Chainsaw, Chauve-souris, Cosmos, Crossbow, Électrique, Enfer, Fantôme, Fouet, Froid, Gorille, Katana, Lance-flamme, Longsword, Makima, Malédiction, Mime, Mort, Muscle, Pantins, Pierre, Poisson, Portail, Poulpe, Renard, Requin, etc.
- Utilise `ArenaMirrorManager` pour distribuer équitablement les joueurs sur deux instances clonées de l'arena (`arena` + `arena_b`).
- Config : `core/src/main/resources/api/scenario/special/chainsawman.yml`.

#### Module `disney` (Disney UHC)
- 3 camps : Gentils (Aladdin, America Chavez, Bob Razowski, Doctor Strange, Elsa, Frozone, Génie, Han Solo, Hercule, Luke Skywalker, Mr Indestructible, Mufasa, Olaf, Simba, Sulli, Zeus), Méchants (Dark Vador, Empereur Palpatine, Hadès, Iago, Jafar, Léon, Les Démons, Les Moires, Mirage, Prince Hans, Roi Runéard, Scar, Shenzi, Syndrome, Wanda Maximoff, Waternoose), Simpson (Bart, Homer, Lisa, Marge).
- Camp Duos : Belle/Bête, Colère/Dégoût, Deadpool/Wolverine, Flash/Martin.

#### Module `deathnote` (Death Note UHC)
- 5 rôles : Kira, Enquêteur (L), Mello, Near, Shinigami.

#### ⏱️ Module `timeout`
- Nouveau scénario timeout-style.

---

### Core — Nouvelles fonctionnalités

#### `ArenaMirrorManager` + `ArenaRegeneratedEvent`
- Nouveau registre central pour les "miroirs" de l'arena principale (mondes clonés type `arena_b`).
- Sync automatique chaque seconde de la worldborder (size, center, damage, warning) vers tous les miroirs enregistrés.
- `pregenAndKeep(world, radius)` : charge en RAM et protège les chunks d'un miroir contre le déchargement.
- Helpers de propagation : `propagatePVP`, `propagateTime`, `propagateGameRule`.
- `isArenaOrMirror(world)` à utiliser dans les listeners qui filtrent par world.
- Nouvel event `ArenaRegeneratedEvent` émis par `LoadingChunkTask` à la fin du pregen — permet aux modules de re-cloner B après régénération.

#### Scénario `ObsiBuff`
- Nouveau scénario normal : casser de l'obsidienne avec une pioche applique Haste III pendant N secondes et drop `dropAmount` obsidiennes au lieu d'1.
- Anti-farm via metadata sur les blocs posés par un joueur.

#### `ScenarioRandomEventsUi`
- Nouvelle UI dédiée pour parcourir et configurer tous les `RandomGameEvent` d'un scénario depuis le menu.

#### Utilitaires
- `LoreWrap` : utilitaire pour wrap automatiquement les lores d'item (gestion des sauts de ligne longs).
- `VariableFormatter` : formatage centralisé des valeurs de variables (TIME, PERCENT, etc.) pour l'affichage UI.

#### Nouvelles schematics
- `core/src/main/resources/api/schem/normalhouse.schematic`
- `core/src/main/resources/api/schem/sanctuaire.schematic`

#### ️ Système Revive supprimé
- Suppression de `ReviveAbility` (template) et `ReviveCMD` (commande `/revive`).
- Les scénarios qui souhaitent un mécanisme de résurrection doivent désormais l'implémenter directement sans passer par cette abstraction.

---

### Module `ultimate` — Nouveaux scénarios

#### ️ `TaupeDefender`
- Nouveau scénario style "TaupeGun défensif" avec sa propre commande `TaupeDefenderCMD`.
- Lang dédié : `TaupeDefenderLang` (`core/.../lang/special/`).
- Config : `core/src/main/resources/api/scenario/special/taupedefender.yml`.

#### `TeamSwapperV3` + `TeamSwapperClassic` + `TSClass`
- Refonte du TeamSwapper avec deux variantes (Classic et V3) et un menu de cargaison.
- Lang dédié : `TeamSwapperV3Lang` (`core/.../lang/scenario/`).

#### `Switch` (teamswitch)
- Nouveau scénario : swap aléatoire de tous les joueurs entre les teams à intervalle régulier (`swapInterval`, `swapStartTime`).
- Lang dédié : `SwitchLang` (`core/.../lang/scenario/`).

---

### Templates & docs
- Ajout de `templates/HOWTO.md` : checklist qualité pour scaffolder un nouveau module à partir des squelettes `templates/classic/` et `templates/role/`.

---

## [2.5.0] — 2026-04-05

### Nouvelles fonctionnalités

#### Système de couleur TAB par-viewer (`PlayerColorManager`)
- Nouveau manager `PlayerColorManager` : colorise le nom d'un joueur dans le TAB uniquement pour un viewer spécifique, via paquets NMS (aucune pollution du scoreboard global).
- Nouvelle commande `/color` : ouvre un color picker pour choisir la couleur d'un joueur dans son propre TAB.
- Nouvelles UIs : `ColorPickerUi`, `ColorPlayerListUi`.
- Les préférences sont stockées dans `UHCPlayer.tabColorPrefs` (Map<UUID, ChatColor>).
- Réapplication automatique à la connexion/déconnexion.

#### ⚙️ UI de configuration des effets (`EffectsConfigUi`)
- Nouveau menu `EffectsConfigUi` accessible depuis `DefaultUi` pour configurer par joueur les multiplicateurs de combat :
- `forcePercent` — pourcentage de force (dégâts en mêlée)
- `forceCriticPercent` — pourcentage de dégâts critiques
- `resistancePercent` — pourcentage de résistance aux dégâts
- Ces valeurs sont lues dynamiquement par `AttackNerfEvent` et `ResistanceNerfEvent`.

#### Scoreboard amélioré
- Ajout de nouvelles clés dans `ScoreboardLang` pour afficher des informations supplémentaires en temps réel.

#### ️ UI LimiteStuff étendue
- `LimiteStuffbyPlayerUi` : nouvelles entrées de configuration pour les limites par joueur.
- Nouvelles clés `LimiteStuffUiLang` pour les labels correspondants.

---

## [2.4.0] — 2026-04-04

### Nouvelles fonctionnalités

#### Module DanDaDan (nouveau module)
- Nouveau module `dandadan` avec **30+ rôles** inspirés de DanDaDan, JoJo's Bizarre Adventure, Chainsaw Man, Doom Eternal, et d'autres univers.
- Rôles disponibles : Acrobatique, Bamora, Caesar, CSG, Denji, Devilman, Dio, Doom Slayer, Enenra, Flatwoods, Jet Booster, Jiangshi, Jiji, Joseph, Jotaro, Kashimoto, Kinta, Kira, Mantis, Minotaure, Momo, Nessie, Oeil Maléfique, Okarun, Payase, Polnareff, Reiko, Reze, Rohan, Rokuro, Seiko, Tsuchinoko, Umbrella.
- Dimension Yokai custom : portails, zones Yokai, NPC de défis (`TrialNpcManager`), gestionnaire de monde dédié.
- UI de configuration DanDaDan : `DanDaDanConfigUi`, `DanDaDanYokaiListUi`.

#### Système de Revive
- Nouvelle classe abstraite `ReviveAbility` : base pour implémenter des mécaniques de résurrection dans les scénarios de rôles.
- Nouvelle commande `/revive` : permet de ressusciter un joueur si le scénario actif le supporte.

#### ScenarioBuilder — scénarios inline
- Nouveau `ScenarioBuilder` : crée des scénarios simples sans classe dédiée, via DSL fluent.
- Hooks disponibles : `onBreak`, `onEntityDeath`, `onStart`, `onSec`, `onGameStart`, `onDeath`, `onCraft`, `onDrop`, `onPlayerInteract`, `onPlace`, `onMove`, `onBow`, `onHit`, `onDamage`, `onConsume`, `onChatSpeak`, `onKill`, `onPickUp`, `noFood`, `onPortal`, `onFurnaceBurn`, `onPlayerInteractEntity`.

#### Système d'événements aléatoires (`RandomGameEvent` + `RandomEventScheduler`)
- Nouveau système pour déclarer des événements probabilistes dans les scénarios.
- Chaque événement dispose de : `enabled`, `chance`, `minGameTime`, `maxGameTime`, `repeating` — tous configurables via l'UI in-game.
- `RandomEventScheduler` planifie l'exécution au moment aléatoire dans la fenêtre configurée.
- `RandomEventConfigUi` : UI auto-générée pour configurer chaque événement depuis le menu scénario.

#### RoleDescription DSL
- Nouveau `RoleDescription` : DSL fluent pour envoyer la description d'un rôle à un joueur avec hover.
- Méthodes : `.separator()`, `.line()`, `.hover()`, `.space()`, `.raw()`, `.send()`.
- Remplace les appels directs à `HoverUtils.sendHoverLine`.

#### WinCondition personnalisée
- Nouvelle interface `WinCondition` : permet de définir une logique de victoire custom pour les `ScenarioRole`.
- Injection via `scenario.setWinCondition(playerRoles -> ...)`.

#### ️ UI Dispatcher pour ScenarioRole
- Nouveau `ScenarioRoleDispatcherUi` : menu intermédiaire pour les `ScenarioRole` qui ont à la fois des `@ScenarioVariable` et des rôles.
- `[Config des Rôles]` → navigation camps/rôles
- `[Config du Scénario]` → `ScenarioVariableUi`

#### ️ VariableSerializer
- Nouveau `VariableSerializer` : sérialisation/désérialisation unifiée pour `Ability`, `Role`, et `Scenario` via leurs annotations (`@AbilityVariable`, `@RoleVariable`, `@ScenarioVariable`). Supprime le code de sérialisation manuel.


#### ️ Réorganisation des templates d'Ability
- Les classes de base `PassiveAbility`, `UseAbility`, `BowAbility`, `MeleeAbility`, `CommandAbility` déplacées dans le package `ability/template/`.
- Shims de compatibilité maintenus pour `UseAbiliy` et `BowAbbility`.

#### Dossier `templates/` — squelettes prêts à l'emploi
- Nouveau dossier `templates/` à la racine avec des fichiers sources complets pour créer un nouveau module de zéro.
- `templates/classic/` : scénario classique (sans rôles) — `MyScenario.java` + `MyScenarioLang.java`.
- `templates/role/` : module complet avec rôles — `Main.java`, `MyScenarioUHC.java`, `MyRole.java`, `MyCamps.java`, enums lang (`DescLang`, `VarLang`, `Lang`), exemple de rôle + ability, `plugin.yml`, `build.gradle`.

---

## [2.3.1] — 2026-03-08

### Patch compilation Ultimate (part. 1)

- `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"` → `""`.

---

## [2.1.0] — 2026-02-26

### ✏️ Migration UI — Messages & Titres (24 classes)

Toutes les chaînes codées en dur 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 |

---

## [2.0.0] — 2026-02-26

### ️ Refonte complète du système de traduction

#### Nouveaux composants (Core)

- **`Lang` (interface)** — 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)** — implémentée par tous les enums de scénario.
- Méthodes : `getBasePath()`, `getConfig()`, `setConfig()`, `getDefaultMessage()`, `getScenarioPlaceholders(UHCPlayer)`.

#### Notes de migration

**Pattern de remplacement standard :**

```java
// ❌ 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` :**

```java
LangManager l = LangManager.get();
l.register(MyScenarioLang.values());
l.register(AnotherScenarioLang.values());
```

**Règle `getBasePath()`** — tous les enums `ScenarioLang` doivent retourner `""` :

```java
@Override
public String getBasePath() {
return ""; // ✅ Correct
// return "message"; ❌ Incorrect — génère des clés yml cassées
}
```

#### What's Changed (PRs)

- Refactor `CommonString` for improved message handling and localization — @Sithey in #1
- Add default messages for various scenario languages — @Sithey in #2
- Delay player teleportation to lobby spawn by one tick for smoother transitions — @Sithey in #3

**New Contributors :** @Sithey a fait sa première contribution dans #1.

**Full Changelog :** https://github.com/lezombie3D/Nova-UHC/commits/1.3.0

---

## v0.3 — (commits précédents)

- Ajout de `TpMeetup` scenario.
- `ReconnectionManager` : support de la reconnexion en cours de partie.
- Amélioration null-safety de `LangManager`.
- Nettoyage de `FixedPlayerBucketConnection` et événements associés.
- Amélioration du logging `FallenKingdom`.
----------, May 3, 2026

Système de Reconnexion
Description
Les joueurs qui se déconnectent pendant une partie disposent désormais d'un délai de grâce de 15 minutes pour se reconnecter sans perte de progression.

Comportement en cas de déconnexion
Déconnexion d'un joueur :

  • Un timer de 15 minutes démarre automatiquement
  • La position et l'inventaire du joueur sont sauvegardés
  • Le joueur ne compte plus dans les joueurs vivants
  • Les autres joueurs sont notifiés du délai de reconnexion
Reconnexion dans les temps :

  • Téléportation à la position exacte de déconnexion
  • Restauration complète de l'inventaire
  • Reprise normale de la partie
  • Notification du temps restant aux autres joueurs
Expiration du délai (15 minutes) :

  • Élimination définitive du joueur
  • Drop de tous les items à la position de déconnexion
  • Enregistrement de la mort dans les statistiques
  • Vérification automatique des conditions de victoire
Corrections de bugs
Protection contre les erreurs NullPointerException
  • Correction du crash lors du scatter si un joueur se déconnecte pendant le processus
  • Protection globale dans le système de langue (LangManager)
  • Sécurisation de tous les événements impliquant des joueurs
Système de victoire
  • Les joueurs déconnectés ne bloquent plus la fin de partie
  • Détection correcte des survivants (uniquement joueurs connectés)
  • Vérification immédiate lors des déconnexions
----------, Mar 9, 2026

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
}
----------, Mar 8, 2026

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
}
----------, Mar 8, 2026

# NovaUHC v1.2.0
Bonjour à tous,

La version **1.2.0 de NovaUHC** est désormais disponible.
Cette mise à jour majeure introduit un système de statistiques centralisé ainsi qu’un dashboard web permettant de gérer vos serveurs à distance.

Toutes vos données sont maintenant accessibles depuis n’importe quel serveur utilisant NovaUHC.

Nouveautés principales

Dashboard Web

Un site complet pour gérer vos serveurs UHC :

- Interface moderne et responsive
- Monitoring en temps réel (rafraîchissement automatique toutes les 10 secondes)
- Statut des serveurs en direct : `Online` / `Ingame` / `Offline`
- Statistiques globales instantanées :
- Total de serveurs
- Serveurs en ligne
- Parties en cours
- Joueurs connectés
- Filtres et recherche par nom ou adresse IP

Améliorations du Plugin

- Enregistrement automatique des joueurs à la première connexion
- Tracking précis des statistiques en temps réel pendant les parties
- Support complet des modes Team et des modes spéciaux (Loup-Garou, etc.)
- Appels asynchrones vers le backend pour éviter tout lag serveur

Pour les hosts

Le dashboard permet :

- Gestion des serveurs à distance
- Monitoring en temps réel
- Vue d’ensemble des serveurs actifs, parties en cours et joueurs connectés

> ⚠️ Note : Le dashboard est encore en cours de développement. Certaines fonctionnalités peuvent ne pas être totalement opérationnelles.

Installation

1. Accédez au site :
http://91.134.136.202:3001
*(Nom de domaine à venir)*

2. Créez un compte
**Important : conservez votre clé API**
***Le bouton copier collez ne fonctionne pas***


3. Accédez au dashboard

Configuration

Dans le `config.yml` :

```
api:
url: 91.134.136.202:3000//api/v1/plugin
key: VOTRE_CLE_API
```

N’hésitez pas à tester cette nouvelle version et à partager vos retours.
Ils sont essentiels pour continuer à améliorer NovaUHC.

Plugin développé par lezombie3D
Version 1.2.0 – Février 2026
----------, Feb 23, 2026

[ADDITION]

Every scenarios have the customisation system

[FIX]

Minor fix with win condition
----------, Feb 4, 2026

Resource Information
Author:
----------
Total Downloads: 90
First Release: Feb 4, 2026
Last Update: May 3, 2026
Category: ---------------
All-Time Rating:
1 ratings
Find more info at nova-code.gitbook.io...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings