LRGN

Architecture générale d'Heavencraft

Vocabulaire

Serveur

Ce terme peut se rapporter à plusieurs choses bien différentes :

Dans la suite de cet article, quand je parlerai de "serveur", ce sera pour parler d'un logiciel proposant un service. Ainsi, un "serveur minecraft" ne sera pas une machine, mais bien un logiciel.

API

Une API (Application Programming Interface) est un composant logiciel permettant de faire fonctionner plusieurs logiciels ensemble. On peut voir une API comme étant un contrat proposé par un logiciel, pour permettre à d'autres développeurs que son auteur de venir communiquer avec ce dernier.

Par exemple, l'API Bukkit est implémenté par plusieurs logiciels : CraftBukkit son implémentation par défaut, mais aussi Spigot, Glowstone, etc... Si mon programme, ici appelé plugin, est correctement codé pour cette API, je peux donc l'utiliser avec chacun de ces logiciels, sans avoir à modifier une seule ligne de code.

Matériel

Heavencraft est (au moment où j'écris ces lignes) hébergé chez OVH (via sa fillière low-cost, Kimsufi), dans un data center situé à Roubaix, dans le nord de la France. La machine que nous utilisons est performante : 8 coeurs/16 threads, 24 Go de RAM, et un disque dur de 2 To. L'OS que nous utilisons est une Debian, une distribution Linux réputée pour sa stabilité. En fait, la distribution importe peu, et on pourrait même fonctionner sur d'autres Unix, ça ne changerai que peu de choses pour ce que nous faisons.

Logiciels

Du point de vu du joueur, se connecter à Heavencraft revient à se connecter à un serveur minecraft. Mais la réalité est un peu plus complexe : plusieurs logiciels fonctionnent en parallèle et communiquent entre eux. Néanmoins, le but est que cette complexité ne soit pas visible pour le joueur, afin qu'il puisse profiter pleinement de l'expérience de jeu.

Le proxy

Le proxy est le logiciel sur lequel le joueur va se connecter sans le savoir, car c'est lui qui écoute sur le port 25565 (port par défaut de minecraft). L'intéret du proxy, c'est qu'il s'intercale entre N serveurs minecraft et le joueur, permettant ainsi au joueur de changer de serveur sans même le savoir. Pour les développeurs, il est très pratique, car il nous permet d'isoler les différents modes de jeu.

Avant d'avoir le proxy, nous n'utilisions qu'un seul serveur, et nos plugins devaient être pensés pour gérer en même temps le monde semi-rp, mais aussi le créative, et les mini-jeux. Ceci rendait le développement de nouvelles fonctionnalités de plus en plus compliqué, et souvent il y avait des bugs permettant de faire sortir des items cheatés du créative ou des mini-jeux vers le monde semi-rp.

En plus de séprarer les modes de jeu, le proxy met à notre disposition une API, permettant de coder des plugins qui fonctionneront directement dessus. Notre plugin, HeavenProxy, fait fonctionner le chat commun entre les serveurs, la liste des bannis, le Prof Chen, et toute autre fonction commune à Heavencraft.

Les serveurs

Un serveur minecraft est un logiciel ayant deux objectifs :

Afin de faire fonctionner Heavencraft, nous n'utilisons pas le serveur minecraft officiel distribué par Mojang, car celui n'offre pas d'API permettant de coder des plugins. Nous utilisons Spigot, une version optimisée de CraftBukkit crée par md__5. Pour créer nos plugins, nous utilisons donc l'API Bukkit.

Les dynmap

Dynmap est un plugin très intéressant, permettant de créer des cartes interactives des mondes minecraft, et de les mettre à disposition en temps réel sur internet. Ce plugin est compatible avec plusieurs API, dont Bukkit.

Le problème de Dynmap, c'est qu'il est installé au niveau du serveur minecraft. Et qui dit plusieurs serveurs, dit plusieurs interface web dynmap distinctes. Le problème est que pour le joueur, il est plus simple d'avoir une seule interface web pour consulter toutes les cartes de tous les serveurs. On utilise donc un petit serveur web spécialement concu pour faire ce job : Dynmap-MultiServer.

Posté par lorgan le 26/10/2015