Support des runtimes hybrides
Un *runtime hybride* est un logiciel serveur qui expose à la fois les API Bukkit et Forge sur la même JVM — permettant aux mods Forge et aux plugins Bukkit de cohabiter. VoxelBench supporte les hybrides majeurs en première classe depuis la v1.2.
Hybrides supportés
| Runtime | Versions testées | Statut CI |
|---|---|---|
| Mohist | 1.20.1, 1.20.2 | Première classe. Smoketest CI. |
| Arclight | 1.20.1, 1.20.4 | Première classe. Smoketest CI. |
| NeoTenet | 1.21.1 | Soft-skip en CI sur bug upstream ; détecté à l'exécution. |
| Banner, Magma, CatServer, Cardboard | Variées | Détectés comme hybrides ; même enveloppe de compatibilité que ci-dessus. |
Le plugin détecte le runtime au démarrage et l'annonce :
[VoxelBench] Runtime serveur : Mohist 1.20.1-...
Mode hybride actif — optimisations Paper-only désactivées.
Ce qui change sur un hybride
- La génération de monde plat passe par un
ChunkGeneratorBukkit custom (FlatChunkGenerator). Forge intercepte silencieusement leWorldType.FLATstandard sur Arclight/Mohist, ce qui produisait auparavant un terrain overworld par défaut au lieu d'un terrain plat. Le générateur custom contourne la couche NMS. - Les optimisations Paper-only (hooks I/O chunks asynchrones, certains raccourcis du region scheduler) sont passées — elles n'existent pas dans l'API Bukkit de l'hybride.
- Les raccourcis scheduler Folia-only sont passés — même raison.
- La persistance des mondes est critique ici : les hybrides
perdaient historiquement les définitions de mondes
voxelbench_*au redémarrage. LePersistedBenchmarkWorldLoaderles recharge à l'activation du plugin. - Le spawn d'entités dans des chunks non-tickés est géré
défensivement — le plugin pré-charge les chunks avant le spawn
pour éviter le piège du
world.spawnEntity()qui renvoie null silencieusement.
Ce qui reste identique
- Tous les benchmarks intégrés tournent.
- Les rapports soumis au backend ont la même forme.
- La surface de l'API d'extension est identique.
/bench worldet/bench customfonctionnent normalement.
Limitations connues
- Certains mods Forge installent des types de dimensions custom ou
interceptent les events block-place ; les résultats des tests
gameplay peuvent varier si ces mods sont chargés. Lancez le
benchmark sur un monde plat
voxelbench_*dédié pour isoler le comportement plugin des effets de bord des mods. - Mohist 1.20.1 : l'interception du
WorldType.FLATnécessite le fix v1.2. La v1.1 produisait un terrain overworld par défaut sur ce runtime. samples.entitySpawn(le sample API fourni) plafonne à 50 000 mobs par run sur les hybrides. Au-delà, l'allocation d'IDs d'entités NMS ralentit visiblement.
Conseils de configuration
benchmark:
# Sur les hybrides, nous recommandons fortement d'épingler un
# target-world plutôt que de compter sur auto-temp. La création de
# monde est plus coûteuse sur les hybrides (listeners de chunks des
# mods + events Bukkit), et le churn de l'auto-temp devient le
# goulot d'étranglement.
target-world: "voxelbench_arena"
auto-temp-world: false
Voir Configuration et Gestion des mondes pour les détails opérationnels.