Aller au contenu

SiloBlock

Un mode de jeu pour serveurs Minecraft : chaque île est un silo dont on fore les étages vers le bas.

En bref

Douze étages à forer, une économie commune, un classement. Le projet m’a servi à travailler un cœur de règles qui se teste sans la plateforme qui l’héberge, et un équilibrage qui se démontre par des tests.

Nature
Projet personnel, extension pour la plateforme BentoBox
État
En développement. Diffusion gratuite prévue après une phase de test
Rôle
Tout : conception du jeu, code, outillage, documents
Pile
Java, Gradle en Kotlin DSL, JUnit 5, Python pour l’outillage
Volume
98 commits en trois semaines, environ 22 000 lignes
Code
Dépôt privé

Mots-clésJava · Gradle · Kotlin DSL · JUnit 5 · architecture hexagonale · ports et adaptateurs · tests unitaires · modèle d’économie · Minecraft · Paper · BentoBox · Python · génération de PDF

Couverture du cahier de plans : le titre Silo Skyblock et le plan du niveau central vu du dessusPage des étages Ferme et Élevage : plan de chaque étage et tableau de son économieUne autre page du cahier de plans, avec ses figures et ses tableaux
Trois des dix-huit pages du cahier de plans, entièrement généré depuis les données du jeu.

Comment c’est fait

  1. silo-core, le moteurétages, paliers, économie : Java pur, testé sans serveur
  2. Des portséconomie, pose de blocs, île
  3. silo-bentobox, l’adaptateurbranche le moteur sur la plateforme
  4. Le serveur de jeu
Le moteur n’importe rien de la plateforme. Il se teste sans serveur, et un portage vers une autre plateforme reste possible.

Ce que j’ai décidé

Un moteur qui ignore la plateforme

Retenu
Deux modules : les règles en Java pur, et un adaptateur qui les branche sur le serveur.
Écarté
Tout écrire contre l’API de la plateforme.

Un moteur lié à la plateforme ne se teste qu’avec un serveur lancé. Séparé, il tourne en test en quelques secondes.

L’équilibrage est un test

Retenu
Le modèle d’économie dérive les prix du plan des étages, et des tests en vérifient les propriétés.
Écarté
Régler les prix à la main, au ressenti.

Un test dit par exemple que la descente dure quarante-neuf heures quels que soient les prix. Si un réglage casse cette propriété, le build échoue. Les tests sont nommés par des phrases françaises qui énoncent la règle.

Le document suit le jeu

Retenu
Un cahier de plans de 18 pages généré depuis les données du jeu.
Écarté
Rédiger le document à part.

Tout ce qui est chiffré vient du fichier des étages, du modèle d’économie et des plans, et le cahier se régénère à chaque changement du jeu.

  • La version de Java tranchée par un fait : la plateforme est publiée pour Java 25, donc tout serveur qui la fait tourner l’a déjà. Le moteur, lui, reste compatible Java 21.

Ce qui a été éprouvé

  • Un prototype jouable avant toute architecture : le forage, l’enchaînement et le rythme ont été validés en jouant.
  • Un banc d’essai séparé pour l’outil qui pose les blocs, avec son protocole de mesure.
  • Des textures de 16 pixels générées par un script sans dépendance, à partir de dessins en caractères.

Outils

  • Java, avec une chaîne de compilation qui télécharge son propre JDK.
  • Gradle multi-module, JUnit 5 : onze classes de tests.
  • Python pour le cahier de plans, rendu en PDF par un navigateur sans interface.

Ce que ça prouve

Que je sais sortir de mon terrain habituel, poser une architecture qui isole les règles de la plateforme, et faire porter une exigence de conception par des tests.