Les datapacks Minecraft ouvrent la porte à un univers de possibilités presque infinies. Néanmoins, tirer pleinement parti de leur potentiel peut s’avérer être un véritable défi et certaines fonctionnalités avancées exigent souvent des efforts considérables. Avec Bookshelf, ces complexités deviennent transparentes. Simplicité et efficacité ne sont pas seulement des promesses, elles sont l’essence même de Bookshelf.
En effet, quand on s’attèle à créer de nouvelles choses, il est souvent plus judicieux de s’appuyer sur ce qui a déjà été fait. En informatique, cette réalité est même devenue une philosophie, comme dans le langage Python et la célèbre phrase qu’on lui attribue souvent : “ne jamais faire quelque chose deux fois”. Pourtant, si l’on observe l’ensemble des créations sur Minecraft, on constate à l’inverse que les créateurs font régulièrement des systèmes similaires. La culture des “lib” (ou bibliothèques) pour faciliter la création n’est pas aussi répandue parmi la communauté de datapacker, quand bien même les mcfunctions représentent aujourd’hui un réel langage de développement dont la complexité évolue sans cesse. Le projet que l’on vous présente aujourd’hui est justement une lib qui tente d’amorcer une transition afin de rendre légion l’usage de ces outils en proposant quelque chose d’aussi complet qu’accessible pour les non-experts.
“Qu’est-ce qu’une lib ?”
Si vous n’avez jamais fait de développement, ce mot peut vous paraître obscur et abstrait. Il est pourtant très concret et particulièrement bien choisi. En effet, si vous souhaitez rédiger un article retraçant une période de l’histoire, quoi de mieux que de vous reposer sur d’autres ouvrages présents dans des bibliothèques (ou “library” en anglais) ? En développement, si vous souhaitez créer quelque chose, le réflexe sera le même : aller regarder dans des banques de code prêt à l’emploi et pouvant résoudre une partie des problèmes rencontrés et ainsi simplifier et accélérer la création du code. Ces banques de code, ou bibliothèques, prennent généralement la forme de dossiers contenant plein de fichiers de code qu’il suffit de placer à côté de son projet pour pouvoir faire appel à ce dit code. Vous l’aurez compris, Bookshelf est un datapack proposant un large panel d’outils que vous n‘aurez qu’à placer à côté de votre datapack. Avec ça, une documentation claire et détaillée est mise à disposition pour vous aider à utiliser chacune des fonctionnalités proposées.
“Concrètement, comment ça peut m’aider ?”
Bookshelf contient énormément d’outils, trop pour les énumérer ici. La bibliothèque a même dû être divisée en modules (pour les datapackers qui nous lisent, il s’agit simplement de namespaces dédiés à un thème précis) pouvant être installé comme un datapack indépendant de sorte à ne pas avoir à installer l’ensemble des outils.
Ainsi, vous trouverez par exemple les fonctions mathématiques de base (sin, cos, log, exp, sqrt, etc.) au travers du module math. La possibilité de customiser la sidebar dans les moindre détails, comme si vous aviez un plugin, mais tout en restant 100% vanilla. La capacité de récupérer et modifier les propriétés des blocs ou les transformer en entité (item, block display etc.). Un raycast pour cibler des endroits précis, avec une gestion très fine des hitboxes ou encore le module move pour avoir un contrôle total sur le mouvement des entités (vitesses, rebonds etc.). Et bien d’autres encore ! Vous pourrez trouver une liste exhaustive directement sur la documentation du projet.
“C’est bien optimisé ?”
L’objectif principal de Bookshelf est l’accessibilité, c’est ce qui motive en priorité les choix de design. Cependant les membres derrière la lib, des mapmakers aguerris qui ont connu l’arrivée des commandes sur le jeu, ne manquent pas d’idées ni d’expertise pour répondre à tous les besoins. Pour cela, ils proposent par exemple des fonctions qui viennent simplifier l’usage d’autres fonctions très optimisées, elles aussi accessibles pour les datapackers aguerris, au prix d’un impact sur les performances. La encore, la documentation indique les fonctions qui peuvent être lourdes et donne des astuces de performance le cas échéant.
“Je préfère faire mon propre code…”
Les créateurs de Bookshelf sont parfaitement conscients que beaucoup de datapackers souhaitent garder cette forme d’indépendance. Pour répondre à cela, le projet encourage les créateurs à découvrir comment les fonctions ont été faites et à les recréer de leur côté s’ils le souhaitent. Cela passe par une attention toute particulière appliqué à l’écriture du code pour le rendre compréhensible, mais aussi par la licence du projet qui autorise explicitement un tel usage. Ainsi, chaque créateur peut apprendre à faire ce que la lib propose, tout en ayant un plan pour ne pas avoir à réinventer la roue.
Ensemble, on va plus loin
L’une des motivations phare du projet est la collaboration, la mise en commun des compétences de chacun pour mettre au point un outil qui soit vraiment profitable au plus grand nombre. Ainsi, le projet est totalement open-source, c’est-à-dire que n’importe qui peut y contribuer via le dépôt git sur lequel le code est hébergé et en suivant les conventions. Également, si vous avez créé des outils ou si vous en connaissez qui peuvent être intéressants à partager, les créateurs de Bookshelf ont mis en place une section “Related” sur leur documentation afin de référencer d’autres outils du genre, afin d’encourager la coopération plutôt que la concurrence. Ainsi, ils invitent tout le monde à partager leurs retours, conseils et informations qui peuvent être utiles à l’amélioration du projet ou à l’adoption de ce dernier dans la communauté des créateurs.
Toute une communauté derrière
Comme évoqué dans l’introduction, le projet ne s’arrête pas seulement à des fichiers de code et une documentation. L’objectif est réellement d’apporter cette philosophie de développement au sein de la communauté de datapackers et mapmakers. Le projet est porté depuis bientôt 7 ans par les membres de la communauté Gunivers qui a elle aussi pour objectif de favoriser l’entraide entre créateurs. Si vous souhaitez apprendre à développer en utilisant cet outil, ces membres seront ainsi ravis de vous accompagner via leur serveur Discord.
En tant que développeur je trouve que c’est un super article, vive les libs