🕒 Lecture 7 min.

C’est dans la confusion liée à la fin prématurée du projet Bukkit qu’un nouveau venu – à peine le développement entamé – tente de se frayer un chemin dans la communauté très fermée des logiciels de serveur Minecraft. Comme quoi, quand la communauté contre-attaque, un nouvel espoir surgit du chaos…

Mais quel chaos ?

Pour ceux qui vivaient dans un abri antiatomique ces dernières semaines, je vais résumer la situation. CraftBukkit, le logiciel de serveur Minecraft le plus utilisé actuellement, a été victime d’une plainte de wolverness (l’un de ses contributeurs) en vertu du DMCA (le Digital Millenium Copyright Act Américain) accusant le projet de violer ses droits d’auteurs.

Comment cela est-il possible alors que le projet Bukkit est libre ? Eh bien, il faut comprendre que le projet Bukkit est divisé en deux parties distinctes : Bukkit et CraftBukkit. Bukkit est l’API des plugins, c’est-à-dire un ensemble de fonctionnalités permettant d’ajouter au serveur Minecraft la possibilité d’utiliser des plugins Bukkit. Bukkit n’est pas un serveur Minecraft, Bukkit est libre et d’ailleurs Bukkit n’est absolument pas concerné par la plainte DMCA puisqu’il est toujours disponible au téléchargement.

La seconde partie du projet se nomme CraftBukkit. CraftBukkit reprend le code du serveur Minecraft qui permet de générer un monde, d’accueillir un joueur, etc. et y mêle l’API Bukkit permettant d’utiliser les plugins. CraftBukkit est donc un projet dérivé de Bukkit puisqu’il utilise le code de Bukkit. Or, Bukkit est sous licence GPL (une licence est un texte qui dit ce qu’on peut et ce qu’on doit faire avec un logiciel) qui stipule que tous les projets dérivés d’un projet sous GPL doivent aussi être sous GPL. Or, CraftBukkit contient du code du serveur Minecraft qui est propriétaire et ne peut être placé sous licence GPL. En conséquence, CraftBukkit ne respecte pas les exigences de la licence de Bukkit et ne peut donc pas être distribué.

Ainsi, les téléchargements de CraftBukkit sont suspendus et avec lui ceux de Spigot et de Cauldron. Spigot est un serveur CraftBukkit avec quelques modifications ayant pour but d’améliorer ses performances. Cauldron (anciennement MCPC+) est une migration de l’API Bukkit sous un serveur Forge afin de pouvoir faire fonctionner les plugins Bukkit et les mods Forge simultanément.

Pour plus de précisions, je vous renvoie à ce message de sk89q (en anglais)

La genèse

blood, le lead developer (chefs des développeurs) de Cauldron a lancé un grandbrainstorming afin d’aboutir à un nouveau projet. C’est ainsi qu’est née l’idée de Sponge. Il s’est associé à sk89q (contributeur du projet Bukkit et développeur des plugins WorldEdit et WorldGuard) et tous deux sont devenus lead developers aidés par de nombreuses autres personnes parmi lesquelles, les développeurs de Forge, de Spout, de Spigot, de ForgeEssentials, de Floaw, de Canary, de Glowstone ainsi que des développeurs de Bukkit et de plugins Bukkit. Les deux lead developers prennent les décisions en consultant la communauté lorsqu’ils le jugent nécessaire (notamment sur leur chan IRC).

Vous avez certainement entendu parler du projet Minecraft API lancé par Mojang lorsqu’ils ont embauché le noyau dur des développeurs de Bukkit. Ce projet a pour but de doter le serveur Minecraft Vanilla d’une API semblable à celle de Bukkit. Mais les développeurs de Sponge ont choisi de développer leur propre solution pour des raisons de temps (ça mettra bien longtemps à sortir si jamais ça sort et beaucoup de gens n’ont pas envie d’attendre) et parce que Sponge est un projet communautaire donc plus réactif que Mojang au niveau de la correction des bugs.

Les capacités

Sponge est basé sur Forge. Ce qu’il faut bien comprendre avec Forge c’est qu’il est possible de tout faire avec : rajouter de nouvelles fonctionnalités au jeu, rajouter de nouvelles interfaces graphiques, rajouter de nouveaux blocs… Mais il est également possible de rajouter des commandes et de gérer les événements (joueur qui se connecte ou bloc qui se casse par exemple), c’est-à-dire des choses que l’on confiait le plus souvent à des plugins Bukkit. Sous Forge, c’est bien plus complexe à coder, ce qui explique le succès de Bukkit et de Cauldron.

Sponge propose une API qui vient par-dessus Forge pour simplifier la création de mods de tous types et également la création de mods qui ont les mêmes fonctionnalités que des plugins Bukkit. En réalité, l’API sera assez proche de celle de Bukkit et les développeurs donneront une marche à suivre pour adapter un plugin Bukkit pour Sponge.

Contrairement à Cauldron qui permettait de faire fonctionner ensemble mods et plugins mais qui faisait une distinction nette entre les deux, Sponge tend à rapprocher les deux et à les fusionner sous le nom de plugins. Il existera trois types de plugins :

  • server-side (côté serveur) comme WorldEdit et WorldGuard version Sponge qui, à l’instar de leurs versions Bukkit n’ont besoin que d’être connus du serveur pour fonctionner ;
  • client-side (côté client) comme Optifine ou le ShadersMod qui ne font que modifier l’affichage du joueur (donc le serveur n’en a pas besoin) ;
  • both-side (côté client et serveur) comme CustomNPCs (un mod Forge très connu) qui rajoute du contenu et doit donc être connu à la fois du joueur et du serveur.

À noter que Sponge étant basé sur Forge, les mods Forge classiques continueront à fonctionner. Mais l’avantage de Sponge, c’est que l’API fournie sera le plus possible indépendante de la version de Minecraft utilisée. Autrement dit, votre plugin Sponge fonctionnera sous plusieurs versions de Sponge sans nécessiter de modifications.

Avancement

Les développeurs de Sponge ne souhaitent pas s’engager sur une durée, mais indiquent qu’ils travaillent sur le projet activement (« day and night » si l’on cite les documents officiels). Ils travaillent sous licence MIT, un texte bien moins restrictif que la GPL qui évitera de rencontrer le même type de soucis que pour Bukkit. Ils tablent sur des performances au moins égales à celles de Bukkit et Spigot si ce n’est supérieures.

À l’heure actuelle, le projet possède déjà un répertoire Github. Pour ceux qui ne connaissent pas bien, Github est un site qui permet de partager le code de projets libres mais également d’organiser le travail entre les développeurs puisque chacun peut proposer son travail et les chefs de projet valident ou non les différents changements apportés. Dans le répertoire de Sponge, outre Meta qui est temporaire, nous avons la SpongeAPI et Sponge, le serveur en lui-même. La distinction est la même qu’entre Bukkit et CraftBukkit. SpongeAPI est l’API qui permet de simplifier l’utilisation de Forge et Sponge est un serveur Minecraft basé sur Forge Serveur qui implémente cette API.

Vous pouvez avoir un aperçu de la SpongeAPI et de son avancement en allant voir ce document (attention c’est un peu technique).

Pour voir l’avancement global du projet, je vous invite à consulter ce document mis-à-jour régulièrement (en anglais). Un forum est également disponible pour discuter du projet.

Vous voulez participer au projet Sponge ? Vous le pouvez !

Si vous n’êtes pas développeurs, il faut attendre ! Surveillez simplement les actualités, les développeurs sont assez transparents à ce niveau et dès que le projet sortira il va y avoir besoin de monde pour tester, traduire le wiki, remplir le forum, etc.
Si vous êtes développeurs web vous pouvez remplir le formulaire suivant (en anglais) mais les développeurs indiquent de ne pas forcément attendre une réponse.
Si vous développez en Java, vous pouvez remplir ce formulaire (en anglais également) mais vous vous n’aurez pas forcément de réponse non plus. Vous pouvez également commencer à vous familiariser avec l’API Sponge et préparer vos plugins. Les développeur conseillent de bien nettoyer son code et de minimiser les appels à l’API. Surveillez également l’avancement sur le répertoire Sponge git.

Sources et sites à propos de Sponge

La FAQ

Le site de Sponge

Le twitter de Sponge

Le projet sur Reddit

Le chan IRC : #sponge sur le serveur irc.esper.net

Article proposé par Guiyaume, lecteur de Minecraft.fr