Écrire un serveur Minecraft en Java sans bidouilles ni code Mojang : Introduction à Minestom
Les serveurs classiques comme Paper, Spigot ou Bukkit sont issus du fichier jar original de Minecraft. Les développeurs de ces plateformes ont passé des années à décompiler le code de Mojang, à corriger des failles et à essayer d'optimiser quelque chose qui avait été conçu à l'origine sans penser à des milliers de joueurs. Le résultat est que la communauté s'est retrouvée avec des monolithes plutôt lourds.
Chaque entité qui se met à jour, chaque logique de redstone, chaque calcul de physique de l'eau et chaque génération de terrain s'exécute sur le serveur, même lorsque vous avez simplement besoin d'un hub léger pour rediriger les joueurs. Si vous exécutez une session rapide avec une centaines de joueurs, la moitié des ressources CPU sera consacrée à des mécanismes dont les joueurs ne sont même pas conscients à ce moment-là.
Minestom a emprunté un chemin complètement différent. Ce n'est pas un fork de Bukkit ni un autre correctif pour le cœur vanilla.
Ce qu'est Minestom
Le projet a été créé comme un framework réseau et une bibliothèque Java qui implémente le protocole réseau de Minecraft from scratch. Il ne contient pas une seule ligne de code original de Mojang.
Il n'y a pas de monde par défaut, de mobs prêts à l'emploi ou de physique de redstone ici. Lorsque vous lancez une instance Minestom propre, vous verrez le joueur apparaître dans un vide infini. Tout ce qui se passe ensuite est entièrement défini par le code du développeur.
Cette approche offre une liberté rare. Au lieu de réécrire le comportement existant du jeu via les événements de l'API Spigot, vous définissez les règles dès le départ. Le serveur démarre en fractions de seconde et consomme un minimum de RAM.
Points forts de l'architecture
L'architecture de Minestom diffère significativement des solutions habituelles dans l'écosystème Minecraft.
Traitement parallèle et instances
Un serveur Minecraft traditionnel exécute presque toute la logique critique dans un seul thread principal. Minestom divise le monde de jeu en instances indépendantes.
Chaque instance est traitée dans son propre thread. Si cinquante matchs d'un mini-jeu s'exécutent simultanément sur votre serveur, ils n'interféreront pas les uns avec les autres. Une chute de TPS à un endroit n'affectera pas du tout les arènes voisines.
Manipulation directe des paquets
Au lieu d'une hiérarchie d'objets complexe qui crée des déchets inutiles en mémoire, Minestom travaille directement avec les paquets réseau. Si vous avez besoin d'afficher mille blocs ou de mettre à jour la position d'un joueur, le framework construit les paquets sans surcharge intermédiaire.
Système personnalisé d'entités et de commandes
Minestom a complètement retravaillé les systèmes de commandes et d'entités. Les commandes sont construites via une API déclarative pratique intégrée directement dans le cœur du framework.
Exemple de serveur le plus simple
Vous pouvez lancer un serveur fonctionnel en quelques dizaines de lignes de code. Voici à quoi ressemble l'initialisation de base :
Exemple de code
Ce code crée un serveur Minecraft fonctionnel auquel vous pouvez vous connecter depuis un client ordinaire. Il ne prend que quelques mégaoctets de RAM et démarre instantanément.
Pour quelles tâches le projet est-il adapté
Ne supposez pas que Minestom peut complètement remplacer Paper pour n'importe quel projet. Si votre objectif est d'exécuter un serveur survie classique avec des amis où vous avez besoin de villageois fonctionnels, du Dragon de l'Ender et de la mécanique de brassage de potions, Minestom vous obligera à écrire toutes ces mécaniques manuellement.
Le framework se révèle dans d'autres scénarios :
- Les hubs réseau et les lobbies où une réponse instantanée et le support de milliers de joueurs simultanément importent.
- Les mini-jeux rapides comme BedWars ou SkyWars où l'isolation des arènes et la haute performance sont nécessaires.
- Les tests de charge et les bots pour vérifier l'infrastructure réseau.
- Les projets éducatifs et les expériences avec le protocole réseau du jeu.
Le revers de la médaille
Avant de migrer vos idées vers Minestom, vous devriez considérer les difficultés objectives.
Le principal inconvenient est le manque de logique vanilla. La physique de chute des objets, l'IA des mobs, les algorithmes de génération des cavernes et même l'inventaire de base devront être soit trouvés sous forme de bibliothèques communautaires prêtes à l'emploi, soit implémentés indépendamment.
Les plugins standards pour Spigot ou Paper ne fonctionneront pas ici non plus. Tout l'écosystème est construit from scratch autour de l'API Minestom.
Conclusion
Minestom sera une trouvaille formidable pour les développeurs Java qui sont fatigués des limitations des serveurs Minecraft traditionnels. Il transforme le travail avec le jeu en un développement agréable sur une API propre sans regarder en arrière vers l'ancien code vanilla.
Si vous avez besoin d'un contrôle total sur la performance et la logique réseau, consultez le dépôt Minestom sur GitHub. C'est l'un des projets open source de jeux les plus propres et les plus intéressants.
Projets similaires