173 lines
10 KiB
Markdown
173 lines
10 KiB
Markdown
# STAT-01 — Atelier d’argile 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 d’import existantes.
|
||
- **Métabli → Statues → Mes modèles 3D** : modèles GLB, hauteur 4–96 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 d’argile** (`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 l’argile, l’autre fournit la statue. **Un bloc d’argile
|
||
est consommé pour chaque statue récupérée**, y compris en créatif.
|
||
Les blocs d’argile normale conservent les couleurs du modèle ; les seize
|
||
argiles Sanctuary imposent leur couleur unie. Ni boule d’argile ni terre
|
||
cuite n’est acceptée. Fermer l’atelier restitue l’argile non consommée.
|
||
|
||
Recette de l’atelier : un bloc d’argile 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 l’inventaire et le monde. Il n’ouvre pas un éditeur lorsqu’on le pose.
|
||
|
||
Le fichier se choisit dans la liste ou par dépôt sur l’écran de l’atelier.
|
||
« Actualiser » relit le dossier. La rotation proposée à l’atelier d’argile
|
||
est un quart de tour. Il n’y a pas d’éditeur de sommets ou d’animations.
|
||
|
||
## 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 n’apparaissent que par fabrication ou placement volontaire.
|
||
Aucun monde personnel n’est ouvert et aucun chunk existant n’est 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 l’identité de la source.
|
||
Il s’agit d’une identité de modèle dans les données, et non d’un 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.
|
||
L’objet 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 n’a 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é.
|
||
|
||
L’atelier 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 d’utilisation 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 d’argile côté serveur et chaque retrait du
|
||
résultat consomme une unité. La fermeture ou la destruction de l’atelier annule
|
||
le droit de produire ; le travail local tardif ne change pas un autre menu.
|
||
|
||
## Contrat d’import 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 s’effectue sur
|
||
un fil de travail ; les faces visibles du résultat sont mises en cache pour
|
||
le rendu. L’extension 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 n’est 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 d’un 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 n’est 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 d’une
|
||
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 l’inventaire et dans l’aperçu.
|
||
- Même source convertie au Métabli en plan de 32 blocs de hauteur, sans
|
||
modifier une miniature existante ; annulation d’un import à la fermeture.
|
||
- Sauvegarde, suppression du GLB, réouverture du monde : modèle transmis au
|
||
nouveau client et sculptures colorées conservées dans l’inventaire.
|
||
- 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 d’usurpation 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 n’est 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 d’accepter 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 n’ont 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 n’est 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.
|