Sculpt natural island edges and deliver alpha.2 with Prism updates
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-08 12:49:42 +02:00
parent 2932411349
commit ddc43d716b
23 changed files with 1052 additions and 113 deletions
+88 -26
View File
@@ -9,11 +9,22 @@ Utiliser Java 25 et les dépendances épinglées dans `gradle.properties`.
`check` inclut les tests GameTest. Pour un diagnostic ciblé de la génération seule,
utiliser `./gradlew :sanctuary:runGameTest --console=plain`.
Pour générer de vrais chunks et vérifier le spawn sur d'autres graines :
```sh
./gradlew :sanctuary:runGameTest -PsanctuaryTestSeed=42 --console=plain
./gradlew :sanctuary:runGameTest -PsanctuaryTestSeed=8675309 --console=plain
```
La propriété ne s'applique qu'au mod de test, jamais au mod distribué ni à une
sauvegarde de joueur. Chaque commande repart d'un monde de développement neuf.
## Tests de forme
La tâche `:sanctuary:worldgenSmoke`, incluse dans `check`, vérifie les invariants de
l'enveloppe de l'île : noyau solide, limite extérieure, hauteur et stabilité de la
fonction géométrique. Elle complète les tests en jeu ; elle ne charge pas à elle
l'enveloppe de l'île : absence de noyau imposé, conservation des trous naturels,
sculpture du bord, limite extérieure, hauteur et stabilité de la fonction
géométrique. Elle complète les tests en jeu ; elle ne charge pas à elle
seule les ressources de génération de Minecraft.
## Tests dans le moteur Minecraft
@@ -34,21 +45,50 @@ Deux adaptations y sont nécessaires, vérifiées contre les classes Minecraft
`sanctuary:sanctuary`, sans recopier ses JSON.
- Le framework désactive normalement les structures. Le test les active dans
`WorldOptions` pour examiner les chunks après toutes les étapes de génération.
La seed du serveur de test reste `0`.
La seed du serveur de test est `0` par défaut ; `-PsanctuaryTestSeed` est transmis
à la propriété JVM `sanctuary.test.seed` utilisée uniquement dans ce mixin.
Le framework déplace aussi le spawn vers une grille de tests située loin du centre.
Le test capture donc le spawn juste avant ce déplacement, après l'initialisation
normale du monde, et examine les coordonnées absolues de l'île.
Les trois tests vérifient :
Les quatre tests Sanctuary vérifient :
1. Le vrai générateur Sanctuary est chargé, le noyau de l'île existe et le spawn
collectif possède un sol plein de 3×3 blocs avec deux blocs libres et secs.
1. Le vrai générateur Sanctuary est chargé et le spawn collectif repose sur une
surface déjà présente dans la densité naturelle, avec un sol plein de 3×3
blocs et deux blocs libres et secs pour les graines de régression.
2. Douze chunks entièrement générés sont vides dans les quatre directions, juste
après l'enveloppe de décoration puis à environ 512 et 4 096 blocs. Cela couvre
notamment l'ancien retour automatique de l'archipel au loin.
3. La densité du datapack réellement chargé, compilée par `RandomState`, est
reproductible pour la seed `0` et change pour la seed `8675309`.
4. La densité compilée des graines `0`, `42` et `8675309` ne crée aucune matière
là où le terrain source est vide. Les trous dans l'ancien noyau restent vides,
et chaque graine conserve du terrain dans l'échantillon de l'île.
La recherche de spawn parcourt l'île finie, par anneaux de quatre blocs jusqu'à
288 blocs du centre. Elle examine d'abord la hauteur brute pour éviter de
générer entièrement les colonnes vides, puis vérifie le sol et les dégagements
après décoration. Elle préfère une zone naturelle de 3×3 ; si aucune n'est trouvée,
elle utilise le premier emplacement naturel sûr d'une colonne avec deux blocs
libres. Elle ne pose aucun bloc. Une graine pathologique sans emplacement sûr
échantillonné produit une erreur explicite, sans plate-forme de secours.
Le passage avec la graine de serveur `0` produit aussi, pour les trois graines,
des PNG et CSV dans `mods/sanctuary/build/run/gameTest/diagnostics/` :
- `island-density-seed-<graine>.png` : vue de dessus et coupes centrales X/Z,
avant/après, calculées avec les fonctions de densité réellement compilées.
La colonne « alpha.1 » reconstitue l'ancienne formule du noyau et du bord en
utilisant les bruits actuels ; elle ne reproduit pas exactement l'ancien bruit
de bord. La colonne de droite est la densité actuelle.
- `island-heightmap-seed-<graine>.csv` : coordonnées et hauteurs échantillonnées
des deux versions (`-1` indique une colonne vide dans cet échantillon).
La vue de dessus échantillonne tous les quatre blocs en X, Y et Z. Les coupes
échantillonnent tous les deux blocs horizontalement et chaque bloc en hauteur.
Ces diagnostics montrent les volumes ; ils n'affichent pas les arbres, matériaux,
fluides ou structures et ne remplacent pas un essai visuel dans le client.
Le chargement du serveur valide également les codecs et les références des
registres de biomes, densités, réglages et presets. Un échec de chargement ou un
@@ -63,27 +103,48 @@ Référence du workflow : [tests automatiques Fabric](https://docs.fabricmc.net/
Les signatures propres à `26.3-pre-2` ont été vérifiées dans les dépendances locales,
car la documentation publiée vise actuellement `26.2`.
## Validation de la fondation — 8 septembre 2026
## Validation alpha.2 — 8 septembre 2026
Commande `./gradlew check build assemblePack --console=plain` réussie en **22 secondes**
sur Java **25.0.3**, Minecraft **26.3-pre-2**, Fabric Loader **0.19.5**, Fabric API
**0.160.0+26.3** et Loom **1.17.20**, pour Sanctuary **0.1.0-alpha.1**.
Commande `./gradlew check build assemblePack --console=plain` réussie en **1 min 10 s**
sur Java **25**, Minecraft **26.3-pre-2**, Fabric Loader **0.19.5**, Fabric API
**0.160.0+26.3** et Loom **1.17.20**, pour Sanctuary **0.1.0-alpha.2**.
Les deux commandes supplémentaires de graines ont ensuite été exécutées
séquentiellement, chacune sur un monde de développement neuf.
- Quatre tests requis exécutés par le framework, dont les trois tests Sanctuary
ci-dessus : tous réussis en **5,040 secondes**.
- Monde de test neuf, seed **0**, structures activées et spawn initial observé
à **(0, 118, 0)**. Les douze chunks extérieurs inspectés au statut `FULL` sont vides.
- Densité compilée reproductible pour **0**, différente pour **8675309** ; seuls
les chunks du monde de seed **0** ont été générés entièrement.
- `WorldgenSmoke`, vérification des versions et empreintes packwiz, compilation
du JAR et assemblage dans `build/packwiz/` réussis.
- Le JAR `mods/sanctuary/build/libs/sanctuary-0.1.0-alpha.1.jar` ne contient aucune
| Graine | Spawn naturel initial | Tests requis | Durée des tests | Durée Gradle |
| --- | --- | --- | --- | --- |
| `0` | `(-4, 187, -4)` | 5/5 réussis | 51,40 s, diagnostics compris | 1 min 10 s, build et pack compris |
| `42` | `(0, 185, 0)` | 5/5 réussis | 1,843 s | 20 s |
| `8675309` | `(0, 183, 0)` | 5/5 réussis | 1,681 s | 17 s |
Les cinq tests requis comprennent les quatre tests Sanctuary et le test du
framework. Pour chacune des trois graines, le spawn possède naturellement une
zone sèche de 3×3 avec deux blocs libres ; les douze chunks extérieurs inspectés
au statut `FULL` sont vides. Aucun repli sur une colonne seule n'a été nécessaire.
- Les invariants `WorldgenSmoke`, le chargement des codecs et registres, la
reproductibilité des densités et l'absence de matière ajoutée par la sculpture
ont été vérifiés.
- Les trois diagnostics PNG et CSV ont été produits avec la densité actuelle.
Leur calcul synchrone explique la durée plus longue du test de graine `0` et
son avertissement serveur « Can't keep up » ; ce diagnostic est absent du mod
distribué.
- La compilation du JAR, l'assemblage dans `build/packwiz/` et la vérification des
versions et empreintes du pack ont réussi.
- Le JAR `mods/sanctuary/build/libs/sanctuary-0.1.0-alpha.2.jar` ne contient aucune
classe ni configuration de mixin GameTest.
Les preuves locales sont dans
`mods/sanctuary/build/run/gameTest/logs/latest.log` et `debug.log` ; elles restent
ignorées par Git et sont remplacées lors des prochains tests. Les vérifications
manuelles ci-dessous n'ont pas été effectuées dans cette livraison.
Les journaux de cette validation sont conservés localement dans
`build/alpha2-validation-seed0.log`, `build/alpha2-validation-seed42.log` et
`build/alpha2-validation-seed8675309.log`. Les journaux courants de Minecraft sont
dans `mods/sanctuary/build/run/gameTest/logs/` et sont remplacés au prochain test.
Ces preuves et les diagnostics restent ignorés par Git. Les vérifications
manuelles ci-dessous restent à effectuer ; les tests n'ont ouvert ni modifié
aucune sauvegarde de joueur.
La fondation alpha.1 avait été validée le même jour sur la graine `0`, avec un
spawn `(0, 118, 0)` reposant sur l'ancien noyau imposé. Ce résultat historique
ne décrit plus la génération alpha.2.
## Vérifications manuelles restantes
@@ -94,8 +155,9 @@ manuelles ci-dessous n'ont pas été effectuées dans cette livraison.
- Modifier le spawn administrateur, arrêter puis recharger le monde et vérifier
sa conservation. Le test automatique couvre le premier démarrage, pas un cycle
de sauvegarde et de redémarrage complet.
- Explorer plusieurs seeds dans le client. Les tests compilent deux seeds mais
ne génèrent des chunks complets que pour la seed `0`, et leur échantillonnage
extérieur ne constitue pas une inspection exhaustive de toutes les coordonnées.
- Explorer plusieurs seeds dans le client. Les tests compilent trois seeds et
chaque invocation génère des chunks complets pour la seed demandée ; leur
échantillonnage extérieur ne constitue pas une inspection exhaustive de toutes
les coordonnées.
- Tester les resource packs, shaders et mods communautaires après leur ajout et
vérification de compatibilité avec la version exacte du pack.