193 lines
11 KiB
Markdown
193 lines
11 KiB
Markdown
# PLAN-01 — statues et plans légers — beta.072
|
||
|
||
Branche `codex/statues-plans-beta072`. Ticket ouvert le 15 septembre 2026.
|
||
**Implémenté, essais natifs réussis et archives locales beta.072 vérifiées.**
|
||
|
||
## Demande et choix retenu
|
||
|
||
Extraire les modèles et textures réellement utilisés par Minecraft pour créer
|
||
des statues en blocs, avec une palette de matériaux choisie par couleur.
|
||
Le créateur demande un outil Sanctuary léger qui couvre l'essentiel des plans
|
||
partagés en ligne. Il a retenu une implémentation native compatible avec les
|
||
fichiers Litematica, sans embarquer Litematica ou MaLiLib.
|
||
|
||
Parcours : modèle → hauteur et palette → plan → aperçu positionnable et
|
||
orientable → placement créatif, ou construction manuelle guidée en survie.
|
||
Les plans importés partagent ce dernier parcours. Une bibliothèque locale,
|
||
l'export `.litematic`, les couches et le décompte des blocs complètent l'outil.
|
||
Le lien de recherche Minecraft Schematics livré en beta.072 est retiré en
|
||
[beta.075](plans-library-beta075.md). La bibliothèque utilise les fichiers locaux.
|
||
|
||
## Utilisation
|
||
|
||
1. Appuyer sur **K** (raccourci modifiable dans les contrôles).
|
||
2. Dans **Statue**, choisir une espèce, ou le mob visé au moment d'ouvrir
|
||
l'écran. Régler la hauteur de 4 à 96 blocs et la palette : mélange, béton
|
||
ou laine. La géométrie et les textures viennent du rendu natif et des
|
||
ressources actives ; les pixels transparents ne deviennent pas des blocs.
|
||
3. Dans **Bibliothèque**, charger un fichier local ou le déposer sur l'écran.
|
||
Les dossiers `schematics/` et `schematics/sanctuary/` sont consultés.
|
||
**Ouvrir le dossier** permet d’y déposer des plans ; **Actualiser** relit
|
||
les fichiers disponibles.
|
||
4. Dans **Construction**, ancrer le plan au point visé, régler ses coordonnées,
|
||
tourner de 90°, isoler une couche et consulter les blocs restants.
|
||
Les blocs corrects disparaissent de l'aperçu ; les conflits sont rouges.
|
||
5. En créatif, **Placer** puis confirmer dans le jeu. En survie, poser les
|
||
blocs normalement avec son inventaire ; le compteur suit l'avancement.
|
||
**Exporter** écrit un `.litematic` dans `schematics/sanctuary/`, sans écraser
|
||
les exports précédents.
|
||
|
||
L'aperçu est local et se ferme au changement de dimension ou à la déconnexion.
|
||
Exporter avant de quitter conserve le plan. Le serveur Sanctuary est requis
|
||
pour le collage créatif ; un aperçu seul ne donne aucun droit de placement.
|
||
|
||
## Compatibilité implémentée
|
||
|
||
- Minecraft **26.3-pre-2**, Java 25, versions Fabric du dépôt.
|
||
- `.litematic` versions 4 à 7 en lecture, version 6 en écriture ; Sponge
|
||
`.schem` v2/v3 en lecture ; structures vanilla `.nbt` en lecture. Fichiers
|
||
NBT compressés gzip. Les palettes classiques `Name`/`Properties` et les clés
|
||
natives 26.3 `id`/`properties` sont lues ; l'export Litematic conserve le
|
||
contrat classique, indépendant de la version Minecraft.
|
||
- Refus explicite des blocs ou propriétés inconnus, des formats non pris en
|
||
charge et des données d'une version Minecraft plus récente. Aucun remplacement
|
||
silencieux par de l'air ; aucune migration automatique d'anciens identifiants.
|
||
- Les anciennes `.schematic` à identifiants numériques nécessitent une
|
||
conversion externe. Ni archive de monde ni ZIP n'est un plan importable.
|
||
- Import des blocs uniquement : les inventaires, commandes, entités vivantes,
|
||
ticks différés et biomes d'un fichier tiers ne sont pas exécutés/importés.
|
||
|
||
## Contrat de monde et de sauvegarde
|
||
|
||
Les plans sont des fichiers clients indépendants ; aucun format de sauvegarde
|
||
Sanctuary ni aucune génération n'évolue. Aucun monde personnel n'est ouvert
|
||
par le développement. La conversion utilise un modèle de rendu, sans faire
|
||
apparaître ni supprimer un mob. Un aperçu ne modifie pas le monde.
|
||
|
||
Le collage créatif demande une action explicite en jeu. Le serveur vérifie le
|
||
mode réel, la taille, la portée, les chunks déjà chargés, la frontière du monde,
|
||
les permissions et l'absence de blocs occupés. Un opérateur en survie reste en
|
||
survie. Les blocs d'air du plan ne servent jamais à effacer le terrain.
|
||
En survie, les poses et la consommation passent par Minecraft normalement.
|
||
|
||
## Limites de cette livraison
|
||
|
||
- Les statues sont des enveloppes creuses. Les couleurs sont approchées par
|
||
celles des textures moyennes des matériaux ; la forme dépend de la hauteur
|
||
choisie. Les effets, étiquettes, laisses et couches d'objets/blocs ne font pas
|
||
partie de la capture. Les textures dynamiques absentes des ressources et les
|
||
UV d'atlas spéciaux demandent encore un adaptateur.
|
||
- L'aperçu utilise des faces colorées et les formes de sélection natives,
|
||
sans reproduire toutes les textures et l'éclairage d'un bloc posé. Il dessine
|
||
à 96 blocs du joueur et recalcule les blocs restants toutes les dix ticks.
|
||
Le traitement des fichiers et la conversion géométrique passent par un
|
||
unique fil de travail ; masquer le plan arrête son actualisation périodique.
|
||
- Plafonds : 256 blocs par axe, 32 768 blocs non vides, 2 097 152 cellules de
|
||
volume ; fichier compressé de 8 Mio et lecture NBT de 32 Mio au maximum.
|
||
La capture refuse plus de 16 384 faces et la conversion plus de 8 millions
|
||
d'échantillons. Un gros build communautaire peut dépasser ces limites.
|
||
- Collage à moins de 192 blocs, dans des chunks chargés. Pas d'effacement,
|
||
de remplacement du terrain occupé, de blocs administratifs ou sans objet
|
||
associé. Le serveur consulte les permissions et le veto Fabric d'utilisation
|
||
des blocs. La physique et les mises à jour des voisins reprennent ensuite.
|
||
- Les matériaux comptent des états de blocs. Portes, lits et dalles doubles
|
||
peuvent donc demander un nombre d'objets différent du nombre affiché.
|
||
- Aucun import d'inventaire, de NBT de bloc ou d'entité ; aucun miroir, collage
|
||
avec remplacement, remplissage automatique en survie ou catalogue web intégré.
|
||
- Aucun benchmark comparatif avec Litematica n'est revendiqué. La réduction
|
||
de périmètre et l'absence de dépendance supplémentaire sont vérifiables ;
|
||
elles ne constituent pas une mesure de gain de FPS.
|
||
|
||
## Sources de compatibilité
|
||
|
||
Vérifiées le 15 septembre 2026 :
|
||
|
||
- [Litematica](https://modrinth.com/mod/litematica/versions) publie des versions
|
||
26.2, sans release annoncée pour la cible exacte du dépôt.
|
||
- [Source 26.3](https://github.com/sakura-ryoko/litematica/tree/101ac3a23649f916cdcf05f30a5036f72706a096)
|
||
: cible 26.3-rc-1, rendu encore en chantier. Consultée pour le contrat du
|
||
format ; aucun JAR tiers supposé compatible n'est ajouté au pack.
|
||
- [Spécification Sponge v3](https://github.com/SpongePowered/Schematic-Specification/blob/master/versions/schematic-3.md).
|
||
- [Recherche Minecraft Schematics](https://www.minecraft-schematics.com/search/).
|
||
- [Litemapy](https://github.com/SmylerMC/litemapy), utilisé seulement pour écrire
|
||
des fixtures synthétiques indépendantes et relire l'export, hors distribution.
|
||
|
||
## Vérifications
|
||
|
||
Essais sur macOS, Java 25, Minecraft 26.3-pre-2 et Fabric API 0.160.0+26.3.
|
||
Tous les mondes utilisés sont des mondes de développement jetables.
|
||
|
||
- **Client natif réussi** : les 88 espèces à œuf d'apparition ont fourni leur
|
||
géométrie texturée. Un creeper a parcouru les vrais widgets de création,
|
||
l'aperçu, les quatre rotations, les matériaux, l'export, la confirmation et
|
||
le collage réseau. Le serveur et le client retrouvent les mêmes blocs.
|
||
Résultat : **10 × 32 × 15**, **1 542 blocs**, 22 entrées de palette avec l'air.
|
||
Seul ce modèle a fait l'objet du parcours complet de statue en jeu ; la
|
||
capture des 88 espèces ne vaut pas inspection visuelle de 88 statues.
|
||
- **Survie vérifiée** : un paquet de collage envoyé malgré le mode survie est
|
||
refusé ; l'interface ne propose pas le collage. Une pose au clic droit natif
|
||
consomme un objet et fait avancer le compteur. Interfaces FR/EN capturées ;
|
||
les 95 nouvelles clés de traduction sont présentes dans les deux langues.
|
||
- **Interopérabilité indépendante** : Litemapy 0.11.0b0 relit le fichier produit
|
||
en jeu et retrouve dimensions, états et total de 1 542 blocs. Ses trois
|
||
écrivains ont aussi produit les fixtures `.litematic`, Sponge et vanilla
|
||
du test serveur. La dépendance Python reste dans un environnement ignoré ;
|
||
seuls les petits exemples synthétiques en base64 sont versionnés.
|
||
- **Serveur et formats réussis** : les six GameTests du ticket et le test de
|
||
contrôle Fabric passent. Ils couvrent l'autorité créatif/survie, le refus
|
||
complet sur bloc occupé ou permission refusée, les blocs administratifs,
|
||
la portée, les régions négatives, les palettes traversant les mots de 64 bits,
|
||
les fichiers indépendants, les entrées invalides, la transparence, les UV et
|
||
les rotations.
|
||
- **Build et distribution réussis** : `check build assemblePack assembleTestPack`
|
||
termine en 3 min 8 s, 130 tâches. Les GameTests sont ciblés sur PLAN-01 dans
|
||
le harnais plat ; les contrôles Java/Python généraux restent exécutés. Ce
|
||
ciblage ne revendique pas une nouvelle validation de toute la génération.
|
||
Un premier lancement avait échoué au démarrage Java du test historique
|
||
`lostCityPlanner15Smoke` avec un message JavaFX ; le même test isolé puis
|
||
l'ensemble de la commande réussissent sans modification de ce code.
|
||
|
||
Commande du parcours client :
|
||
|
||
```sh
|
||
./gradlew :sanctuary:runClientGameTest \
|
||
-PsanctuaryClientTests=true -PsanctuaryPlans072ClientTests=true \
|
||
-PsanctuaryQuickTests=true -PsanctuaryClientNoVsync=true
|
||
```
|
||
|
||
Commande de contrôle et d'assemblage finale :
|
||
|
||
```sh
|
||
./gradlew check build assemblePack assembleTestPack \
|
||
-PsanctuaryFocusedTests=plans072 -PsanctuaryAtlasOnly=true \
|
||
-PsanctuaryClientTests=true -PsanctuaryPlans072ClientTests=true \
|
||
-PsanctuaryQuickTests=true
|
||
```
|
||
|
||
Puis `packwiz modrinth export --output ../Sanctuary-beta.072.mrpack` dans
|
||
`build/packwiz/`, et l'équivalent `Sanctuary-Test-beta.072.mrpack` depuis
|
||
`build/packwiz-test/`.
|
||
|
||
Les captures et reçus locaux sont conservés dans
|
||
`build/statues-research/evidence/`, `client-tests.log` et `interoperability.json`
|
||
du même dossier de recherche. Ils ne sont pas ajoutés au pack.
|
||
|
||
## Archives locales
|
||
|
||
Le mod et les manifestes passent à **beta.072** ; les textures restent en
|
||
**beta.070**. Les 1 671 classes du JAR correspondent exactement aux classes
|
||
compilées, les 758 sources Java à l'archive des sources, et les 150 ressources
|
||
graphiques aux fichiers versionnés. Les deux MRpacks contiennent le même JAR
|
||
Sanctuary ; seul le profil Test ajoute le module de monde plat. Versions,
|
||
index packwiz, empreintes et intégrité ZIP sont vérifiés.
|
||
|
||
| Artefact | Octets | SHA-256 |
|
||
| --- | ---: | --- |
|
||
| [Pack normal](../build/Sanctuary-beta.072.mrpack) | 9 534 082 | `ccadfa614595f4409cb8eab9c795f112e65854c8e84864c8a8fb67dbc2de450e` |
|
||
| [Monde plat rapide](../build/Sanctuary-Test-beta.072.mrpack) | 9 553 013 | `cb1786ffbf0290fc2cc5437647423e96abee8bca7737537aecbb12de98aee811` |
|
||
| [Mod Sanctuary](../mods/sanctuary/build/libs/sanctuary-beta.072.jar) | 10 043 650 | `f324eba7046563e06671c27551497ad6254cac80a27b5adbf3887b20998f0325` |
|
||
|
||
Reçu : `build/statues-research/artifacts.json`. Les changements déjà présents
|
||
des beta.062 à beta.071 sont conservés. Aucun canal public, instance Prism ou
|
||
serveur personnel n'est synchronisé par cette préparation locale.
|