Files
sanctuary-beta/docs/statuary-beta106.md
T
2026-09-17 03:10:39 +02:00

173 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# STAT-01 — Atelier dargile et modèles 3D — beta.106
Contrat du 17 septembre 2026, branche `codex/statuary-import-beta106`.
Livraison locale vérifiée, cycle natif et archives normale/Test validés.
Aucune publication ni installation personnelle.
## Parcours retenu avec le créateur
Un seul dossier utilisateur : `schematics/sanctuary/`. La lecture historique
au premier niveau de `schematics/` reste possible, sans déplacement de fichiers.
Les boutons des deux ateliers ouvrent exactement le même dossier.
- **Métabli → Bibliothèque** : schémas `.litematic`, `.schem`, `.nbt` et `.schematic`
historiques, avec leurs règles dimport existantes.
- **Métabli → Statues → Mes modèles 3D** : modèles GLB, hauteur 496 blocs et
palette. La conversion produit un plan et rejoint les commandes K, matériaux,
export et règles de placement créatif/survie existants. Les statues des
créatures découvertes gardent leur accès habituel.
- **Atelier dargile** (`sanctuary:clay_workshop`) : choix du GLB et aperçu à
proportions conservées, limité à 16 × 16 × 16 voxels dans un seul bloc.
Un emplacement reçoit largile, lautre fournit la statue. **Un bloc dargile
est consommé pour chaque statue récupérée**, y compris en créatif.
Les blocs dargile normale conservent les couleurs du modèle ; les seize
argiles Sanctuary imposent leur couleur unie. Ni boule dargile ni terre
cuite nest acceptée. Fermer latelier restitue largile non consommée.
Recette de latelier : un bloc dargile au centre supérieur, trois dalles de
pierre lisse au milieu, trois planches en bas. Le bloc utilise les textures
actives de planches, argile et pierre lisse. Le résultat, **Statuaire**
(`sanctuary:statuary`), est un objet transportable et posable. Sa miniature se
voit dans linventaire et le monde. Il nouvre pas un éditeur lorsquon le pose.
Le fichier se choisit dans la liste ou par dépôt sur l’écran de latelier.
« Actualiser » relit le dossier. La rotation proposée à latelier dargile
est un quart de tour. Il ny a pas d’éditeur de sommets ou danimations.
## Identité des modèles et sauvegardes — contrat préalable
Les identifiants des anciens blocs, formats et générations restent inchangés.
Les nouveaux blocs napparaissent que par fabrication ou placement volontaire.
Aucun monde personnel nest ouvert et aucun chunk existant nest régénéré.
Chaque GLB reçoit un identifiant `sanctuary:model/<SHA-256 du fichier source>`.
Renommer ou déplacer un fichier ne change pas cet identifiant. Réexporter avec
un contenu binaire différent produit un nouvel identifiant. Les différentes
argiles et rotations du même modèle conservent lidentité de la source.
Il sagit dune identité de modèle dans les données, et non dun nouvel
identifiant de bloc enregistré pour chaque import. Elle ne donne aucun droit
serveur et ne désigne ni une URL ni un chemin à ouvrir.
Le statuaire a une BlockEntity dédiée avec un champ `sculpture`, schéma **1** :
nom, identifiant du modèle, dimensions et couples position/couleur ARGB des
voxels. La position est bornée à 16³, la couleur opaque, les doublons refusés.
Lobjet transporte ces données dans son composant natif de bloc ; pose, butin,
repose et sauvegarde utilisent le cycle Minecraft. Le bloc réplique les données
aux clients qui chargent son chunk. Aucun joueur na besoin du fichier source
pour voir une statue déjà fabriquée. Un schéma inconnu ou invalide chargé dans
un bloc est préservé sans être interprété ni édité.
Latelier utilise un menu natif temporaire, sans stock caché persistant.
Le serveur vérifie le menu actif, son jeton, la proximité, le bloc, les droits
et le veto dutilisation Fabric. La sélection envoie seulement des voxels bornés
(un paquet atomique de moins de 32 Kio), jamais un chemin ou un fichier exécutable.
La teinte vient du véritable objet dargile côté serveur et chaque retrait du
résultat consomme une unité. La fermeture ou la destruction de latelier annule
le droit de produire ; le travail local tardif ne change pas un autre menu.
## Contrat dimport et limites
GLB **2.0 autonome**, scène par défaut (ou première scène), triangles indexés
ou non, transformations hiérarchiques matrice ou TRS, matériaux de couleur
et textures PNG/JPEG intégrées, UV avec répétition/clamp/miroir. Le matériau
opaque ou à découpe alpha est voxelisé en surface. Le calcul seffectue sur
un fil de travail ; les faces visibles du résultat sont mises en cache pour
le rendu. Lextension de matériau non éclairé peut être lue pour sa couleur.
Limites explicites : fichier 8 Mio, JSON 1 Mio, hiérarchie de 64 niveaux,
16 384 triangles, 4 194 304 pixels décodés et autant de pixels de matériaux.
Les plans gardent les plafonds historiques de cellules et de volume.
Les grands scans demandent donc souvent une simplification préalable.
Squelettes et morphing doivent être figés avant export. Les animations ne sont
pas jouées (la pose statique des nœuds est utilisée). Couleurs de sommets,
accessors sparse, primitives non triangulaires, transparence mélangée,
compressions et extensions de textures non gérées sont refusés explicitement.
Les couleurs de sommets doivent être converties en texture. Aucun téléchargement
ni référence externe du GLB nest résolu. OBJ, FBX, STL, VOX et glTF multifichier
ne font pas partie de ce premier import. Un GLB sans surface visible est refusé.
Une miniature représente au maximum 4096 voxels de 1/16 de bloc, centrés en X/Z,
posés au sol. Les petits détails peuvent disparaître. Sa collision est le cube
contenant la sculpture ; les voxels ne sont pas des blocs exploitables ou des
inventaires. Les argiles utilisent la palette de couleur publiée du mod, avec
éclairage du rendu, sans texture de matière distincte sur chaque voxel.
Aucune dépendance tierce supplémentaire : Minecraft **26.3**, Fabric et Java 25
restent ceux du dépôt. Lecture suivant la [spécification Khronos glTF 2.0](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html).
## Vérifications
`Statuary106ClientChecks` passe sur un client natif Minecraft 26.3 avec serveur
intégré, dans un nouveau monde plat jetable, graine 106. Il vérifie :
- Lecture dun GLB texturé avec transformation de scène, conservation des
proportions et des couleurs ; refus des fichiers hors limites, références
externes, offsets invalides et hiérarchies cycliques.
- Import indépendant de [BoxTextured de Khronos](https://github.com/KhronosGroup/glTF-Sample-Assets/tree/main/Models/BoxTextured),
triangles indexés et texture embarquée. Le fichier nest pas distribué avec le mod.
- Dossier partagé avec filtres distincts, rotation, identité du modèle et
recoloration par les seize argiles.
- Fabrication native en survie : absence de résultat sans argile, coût dune
unité, restitution du reliquat à la fermeture et production par Maj-clic.
- Pose par clic natif dans la portée Sanctuary du joueur, butin complet,
repose, rendu dans le monde, dans linventaire et dans laperçu.
- Même source convertie au Métabli en plan de 32 blocs de hauteur, sans
modifier une miniature existante ; annulation dun import à la fermeture.
- Sauvegarde, suppression du GLB, réouverture du monde : modèle transmis au
nouveau client et sculptures colorées conservées dans linventaire.
- Captures FR/EN relues dans `build/statuary106-evidence/`.
Commande de reproduction :
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryStatuary106ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Le contrôle de régression `Plans072ClientChecks` passe également sur la copie
livrée en **47 s** : **88 modèles natifs, aucun refus**, textures UV, palette
active, statues de 32 blocs, rotations, matériaux, export gzip, aperçu, confirmation
et annulation en créatif, constructions, refus dusurpation et pose payée en
survie. Commande identique avec `-PsanctuaryPlans072ClientTests=true` à la place
de `-PsanctuaryStatuary106ClientTests=true`. Journal :
`build/statuary106-plans-regression.log`.
Les premiers échecs ont permis de corriger le champ natif `recipes` du critère
de découverte de recette. Les attentes du test ont ensuite été ajustées pour
attendre la confirmation serveur des clics et respecter la portée de pose du
nouveau joueur. Aucun contournement de ces règles nest ajouté au mod.
## Livraison locale
La copie `build/release-beta106` part de la livraison beta.105 et ajoute les
30 fichiers de production concernés par ce ticket. Les sources beta.107 des
œufs, arrivées en parallèle dans le dossier partagé, restent conservées dans
leur propre livraison. `build/statuary106-source-manifest.json` décrit la copie.
La commande suivante a réussi sur cette copie en **5 min**, **132 tâches** :
```sh
./gradlew check build assemblePack assembleTestPack :sanctuary:runClientGameTest \
-x :sanctuary:runGameTest \
-PsanctuaryClientTests=true -PsanctuaryStatuary106ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Le GameTest dédié reste exclu conformément au refus antérieur daccepter son
EULA. Le serveur intégré a vérifié les écritures, le coût, le butin, la sauvegarde
et la transmission au client. Les essais ont tourné sur macOS ; une connexion
depuis deux ordinateurs et les autres pilotes graphiques nont pas été testés.
Les sources JAR correspondent exactement aux sources Java de la copie isolée.
Les deux archives contiennent le même JAR Sanctuary, avec métadonnées beta.106
et Minecraft 26.3. Aucune classe de test ni modèle GLB de test nest distribué.
Rapport et empreintes : `build/statuary106-artifact.json`.
- [Pack normal](../build/Sanctuary-beta.106.mrpack), 10 144 169 octets.
SHA-256 : `b8b76ba914c8ceaed1b1d25f0817bd4cdeb7a4bd5ad43222c6970162811ff901`.
- [Pack de test](../build/Sanctuary-Test-beta.106.mrpack), 10 163 092 octets.
SHA-256 : `e55d5871f1e31d3ed46de32d748eba51be2029c60462cf0155be90b8dd40118b`.
Aucun tag publié, canal packwiz avancé ou déploiement dans Prism.