🕒 Lecture 8 min.

Désormais lancé dans la création d’outil de map-making et plus seulement de map Minecraft, la communauté de Gunivers nous offre aujourd’hui son tout nouveau projet : la Gunivers-Lib. À l’instar des outils habituellement connus (MCedit, WorldEdit, Lgdir, etc.), celui-ci se démarque en prenant la forme, non pas de plugin logiciel ou NoMod, mais bel et bien celle d’une librairie, d’où son nom.

gunivers lib bibliothèque

Une librairie (ou bibliothèque), est un ensemble d’éléments utiles à la réalisation de projets, souvent complexes. Cela permet aux créateurs de ne pas réinventer la roue à chaque projet (en refaisant des fonctions de base ou en reconstruisant des structures très communes).

Cette librairie a donc pour objectif de contenir un maximum de fonctions générales et utiles au développement de maps (ou autres projets) Minecraft ainsi que, à terme, des structures, resource packs, recettes, progrès et autres. Le tout permettant à n’importe quel map-maker de piocher les éléments qu’il souhaite ajouter à sa map, sans pour autant avoir les compétences ou le temps pour réaliser lui-même cet élément.

Que contient-elle ?

gunivers lib code

Bien que la Gunivers-lib en soit à un stade de développement très peu avancé, elle contient d’ores et déjà un grand nombre de fonctions pratiques, permettant entre autres de créer des mécaniques de jeu avancées. La réalisation d’un Lgdir (système de gestion de projectiles), jusqu’alors complexe se fait en quelques commandes.

Il sera également possible de créer des systèmes d’identification des entités présentes sur votre map, ou de bien utiliser des fonctions mathématiques avancées (fonctions trigonométriques, racines carrés, etc.). Ainsi, vous n’aurez plus aucune excuse pour ne pas créer des maps utilisant des moutons multicolores lançables rebondissants de partout et qui créent des trous noirs (toute ressemblance à un jeu existant est totalement fortuite). En revanche, la librairie ne contient pour le moment pas de structure, resource pack, recette ou progrès.

Comment utiliser les fonctions ?

L’utilisation de la librairie peut ne pas paraître évidente pour certains, et ce pour une raison simple : les fonctions de Minecraft ne sont pas vraiment des fonctions comme on en a l’habitude dans les autres langages (avec des paramètres et des retours). Gunivers a donc « simulé » ces paramètres et retours pour faciliter l’utilisation aux développeurs de longue date et pour faciliter l’explication aux autres. Ainsi, chaque fonction dispose d’un en-tête vous permettant de comprendre :

  • Les prérequis (requierements) : score(s) et/ou autre(s) élément(s) à mettre en place afin que le système puisse fonctionner ;
  • Les paramètres (input) : score(s) et/ou éléments(s) que la fonction va utiliser comme données pour exécuter sa tâche ;
  • Les retours (output) : score(s) et/ou autre(s) élément(s) que la fonction utilisera pour conserver les résultats (vous pourrez alors récupérer les résultats sur ces scores/éléments) ;
  • Autre : certaines fonctions peuvent avoir un fonctionnement assez différent (même si c’est rare). Tout est alors décrit dans l’entête ou dans un fichier ReadMe présent dans le dossier contenant la fonction.

Ainsi, prenons l’exemple d’une fonction prenant 2 variables en paramètre et retournant 2 autres variables. Ces deux variables devront contenir respectivement la somme et le produit des deux variables en paramètre. La marche à suivre est la suivante :

gunivers lib paramètres


Gunivers recommande vivement d’installer le logiciel Notepad++ (un éditeur de texte avancé) ainsi que leur add-on, le CSH (un colorateur syntaxique facilitant la lecture des fonctions).

Liste des fonctions

Vous retrouverez ci-dessous une sélection des fonctions disponibles, pour en voir la totalité, suivez ce lien.

Math

Les fonctions « Math », comme leur nom l’indique, servent à faire des maths. Avant que vous ne partiez en courant en vous remémorant vos cours indigestes et incompréhensibles que vous avez subit à l’école, sachez qu’ici, vous n’aurez rien besoin de calculer (en fait, c’est le but de la lib de vous simplifier la vie). Néanmoins, les fonctions de math qui suivent sont théoriques, mais c’est aussi sur elles que reposent la majorité des autres systèmes.

Si vous ne voyez pas de quoi je veux parler, dites vous qu’avec cette lib, il est facile de créer (entre autres) un raycasting (= lancement de projectiles selon l’orientation d’un joueur). Ce système repose essentiellement sur de la trigonométrie. Mais encore une fois, rien de compliqué, tout est déjà fait ;)

  • arccos: Calcule l’arccosinus d’un angle (en °) compris entre 0 et 360. Cette fonction prend en paramètre le score Var1 compris entre 0 et 360 (correspondant à un angle) et retourne la valeur du sinus sur le score Res. Attention, le résultat est est multiplié par 1000 afin de conserver les décimaux (1 =* 1000; 0,5 =* 500 etc …)
  • arcsin: Calcule l’arcsinus d’un angle (en °) compris entre 0 et 360. Cette fonction prend en paramètre le score Var1 compris entre 0 et 360 (correspondant à un angle) et retourne la valeur du sinus sur le score Res. Attention, le résultat est est multiplié par 1000 afin de conserver les décimaux (1 =* 1000; 0,5 =* 500 etc …)
  • arctan: Calcule l’arctangeante d’un angle (en °) compris entre 0 et 360. Cette fonction prend en paramètre le score Var1 compris entre 0 et 360 (correspondant à un angle) et retourne la valeur du sinus sur le score Res. Attention, le résultat est est multiplié par 1000 afin de conserver les décimaux (1 =* 1000; 0,5 =* 500 etc …)
  • cos: Calcule le cosinus d’un angle (en °) compris entre 0 et 360. Cette fonction prend en paramètre le score Var1 compris entre 0 et 360 (correspondant à un angle) et retourne la valeur du cosinus sur le score Res. Attention, le résultat est est multiplié par 1000 afin de conserver les décimaux (1 =* 1000; 0,5 =* 500 etc …)

Move

Ce dossier contient toutes les fonctions relative au mouvement de l’entité.

  • pathfind_as_to_at: Permet de déterminer un chemin entre la position de l’entité source et la position d’execution de la fonction. Par défaut, la fonction ferra 500 tests (définit via le score Var2) et considèrera que l’entité est semblable à un joueur dans sa façon de se déplacer (le comportement est définit par la variable Var4 qui, par défaut est à 0. Lorsqu’elle est à 1, le comportement sera semblable à une chauve souris). Vous pouvez à tout moment créer vos propres comportements dans le dossier config/pathfind/possible_moves. Le chemin est ensuite définit par une succession d’armor_stand portant le tag « Glib_Pathfind_Rewind » et « Glib_Pathfind ».
  • vector_to_motion: Permet de mettre en mouvement l’entité selon son vecteur en passant par un motion (système de mouvement intégré au jeu). Un vecteur de 1000 sur un axe entraînera un déplacement d’un bloc à chaque tick du jeu. La somme des mouvements sur chacun des axes donnera un mouvement dans l’espace (donc en 3 dimensions), correspondant au vecteur global de l’entité.

Id

La gestion d’UID des entités permet d’identifier précisément une entité. Utile par exemple dans le cas d’un jeu de tir pour savoir qui tire sur qui.

  • check: Permet de comparer les scores Id des entités avec le score « TargetId » de l’entité ayant exécuté la fonction. Cette dernière recoit le tag « IdChecker ». Quand aux autres entités, elles recoivent « IdUpper » si leur Id est supérieur, « IdLower » si leur score Id est inférieur et « IdMatch » si le Id est égale au score « TargetId » de l’entité ayant exécuté la fonction.
  • check_parent: Permet de comparer les scores Id des entités avec le score « ParentId » de l’entité ayant exécuté la fonction. Cette dernière recoit le tag « ParentIdChecker ». Quand aux autres entités, elles recoivent « ParentIdUpper » si leur Id est supérieur, « ParentIdLower » si leur score Id est inférieur et « ParentIdMatch » si le Id est égale au score « ParentId » de l’entité ayant exécuté la fonction.
  • getsuid: (Simple Unique ID) Permet à l’entité exécutant la fonction d’obtenir un score Id différent de toutes les autres entités ayant déjà exécuté la fonction.
Menu en jeu permettant de configurer et d’accéder à quelques exemple. Disponible en utilisant la commande /function gunivers-lib:_menu_

Comme dit plus haut, cette librairie est un outil pouvant s’avérer très pratique pour la création de maps plus complexes permettant, par exemple, de gérer véritablement le déplacement des entités (telles que les porte-armures) en y simulant la gravité à l’aide des vecteurs de la trigonométrie avec de simples fonctions à appeler et de simples paramètres à changer (la map Witchery utilise cet outil).

Mais c’est aussi là l’un des principaux problèmes de cette dernière : l’utilisation de cette librairie peut paraître compliquée de prime abord, à devoir naviguer entre le jeu et les fonctions afin de voir leur spécificité et leur utilisation. Il est donc conseillé d’avoir de bonnes bases dans le domaine du bloc de commande afin de pouvoir s’en sortir.

📥 Téléchargement sur le site officiel

Ce projet naissant étant très ambitieux pour seulement deux/trois personnes, il est possible à tous ceux qui le souhaitent de contribuer au développement de ce dernier, que ce soit dans la réalisation de functions, structures, ou de models à ajouter au data pack.

Pour vous aider à mieux appréhender la Gunivers-lib, n’hésitez pas à regarder cette série de vidéos sur Youtube :