Extend golden wrench to native block states and persistent texture rotation (beta.120)
Build Sanctuary / build (push) Canceled after 0s

This commit is contained in:
koka
2026-09-17 13:43:02 +02:00
parent 6aaabf1cb9
commit 248dff47b7
18 changed files with 546 additions and 34 deletions
+96
View File
@@ -0,0 +1,96 @@
# TOOL-01 — Clé dorée et états de blocs — beta.120
Contrat du 17 septembre 2026, branche `codex/golden-wrench-beta120`.
Le créateur valide les gestes du debug stick : clic gauche choisit la propriété,
clic droit parcourt ses valeurs, Maj inverse le parcours. L'orientation est
proposée en premier, puis les propriétés de forme et les autres états natifs.
La sélection est personnelle, par type de bloc, pour la session courante.
Une indication dans la barre d'action affiche la propriété et sa valeur.
La clé ne casse pas le bloc, y compris en créatif, et ne remplace pas son type.
Les propriétés natives sont disponibles en survie avec la clé, sans condition
opérateur, dans le respect des droits de construction, protections, portée et
verrous de conteneurs. Comme avec le debug stick, les formes choisies restent
en place immédiatement ; les mises à jour ultérieures du jeu peuvent recalculer
les états dynamiques (redstone, connexions, cultures…).
Les multiblocs assemblés gardent leurs commandes d'ouverture/dissociation et
leurs propriétés techniques ne sont pas éditées individuellement. Un assemblage
complet garde priorité au clic droit ; Maj permet de régler les composants
non assemblés. Hors d'un assemblage complet, même un four, un baril, un piston
ou un établi reçoit l'action générique.
## Rotation de texture et contrat de stockage
La terre n'a pas d'orientation dans son blockstate vanilla. Une propriété
supplémentaire de la clé, « Rotation des textures », parcourt 0°, 90°, 180° et
270° sur les faces des modèles de blocs. La géométrie, l'éclairage, les teintes,
les ressources actives, le bloc, son inventaire et son butin restent natifs.
Les rendus spéciaux d'entités de blocs ne sont pas transformés par ce réglage
des faces ; leur orientation demeure modifiable par leurs états natifs.
Nouvelle donnée facultative `sanctuary:wrench_textures_v1`, attachée au chunk :
table immuable position entière → quart de tour (1 à 3). Une absence signifie
0°. Elle n'est créée qu'après une action de clé ; revenir à 0° retire l'entrée,
puis l'attachement s'il est vide. Aucun état vanilla ni format existant n'est
modifié ; aucun parcours, conversion ou régénération des anciens mondes.
Les modifications de blockstate du même type conservent la rotation. Casser,
remplacer ou déplacer par piston retire la rotation à l'ancienne position ;
les objets récupérés restent ordinaires. Les nouveaux clients la reçoivent
après le chunk natif, par lots bornés de 1 024 entrées au maximum.
Déconnexion, changement de dimension et déchargement libèrent le cache visuel.
Revenir à une ancienne version du mod supprime seulement cet effet visuel ;
les blocs conservent leurs identifiants, données et états natifs.
## Vérifications et livraison
Le parcours `Wrench120ClientChecks` passe en **47 s** sur Minecraft 26.3,
client macOS et serveur intégré, dans un monde plat jetable de graine 120 :
- **2 522 propriétés natives** parcourues, avec valeurs inverses et type conservé.
- Vrais clics sur les escaliers : orientation, moitié supérieure et forme,
sans casser le bloc en créatif ; gestes inverses et sélection distincte.
Les doubles événements créatifs d'un même clic sont filtrés à la cadence
native de cinq ticks.
- Terre en survie : rotation réelle des UV émis, positions des sommets et nombre
de faces identiques ; retour exact après quatre quarts de tour ou un inverse.
- Rechargement des ressources conservant les UV tournés ; capture de terre relue.
- Coffre tourné avec ses 23 diamants intacts, sans ouverture accidentelle.
- Assemblage/dissociation par vrais clics des quatre familles : Métabli, Fût,
Fourneau et super piston. Un clic gauche sur un assemblage ne modifie pas
les numéros de composants ; barils et pistons isolés tournent normalement.
- Refus en aventure, spectateur ou hors portée ; retrait des données visuelles
après remplacement, maintien lors d'un changement d'état du même bloc.
- Sauvegarde/reconnexion : rotation de terre côté serveur et client, état
natif de l'escalier et inventaire du coffre conservés.
```sh
./gradlew :sanctuary:runClientGameTest \
-PsanctuaryClientTests=true -PsanctuaryWrench120ClientTests=true \
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true
```
Marqueurs `WRENCH120_PASS` et `WRENCH120_PROPERTIES 2522` dans
`build/wrench120-client.log`, captures dans `build/wrench120-evidence/`.
Aucun monde personnel ouvert ; pas de validation Windows ni depuis deux
ordinateurs. Les rendus de faces natifs et le rechargement du pack sont vérifiés ;
pas de validation spécifique d'un shader tiers.
Le GameTest dédié reste exclu conformément au refus antérieur de son EULA.
`./gradlew check build assemblePack assembleTestPack -x :sanctuary:runGameTest`
passe en **2 min 12 s**, 125 tâches. Les sources JAR correspondent exactement
aux sources du dépôt. La comparaison avec beta.119 limite les différences de
production aux classes de clé/assemblage, aux deux nouveaux hooks, au rendu
et aux libellés prévus ; toutes les autres ressources sont identiques.
Les packs normal/Test contiennent le même JAR Sanctuary et aucune sauvegarde
ni fixture de test.
- Sanctuary-beta.120.mrpack : 10237973 octets, SHA-256
`86b5e480a12ba20b5c1e308c77dbb54bdf8a56806915fb32ca2d16f9a72cc9c9`.
- Sanctuary-Test-beta.120.mrpack : 10256895 octets, SHA-256
`2e3818483ba7dfa6e5652b97933e105a44e7cc4b269fc567116bf895d54bd8d9`.
- JAR Sanctuary : SHA-256
`8e35ef0f134a46b7760604175ad768264946d31fdd0694982e049e7a928fde2a`.
Reçu local : `build/wrench120-artifact.json`. Publication et synchronisation
Prism à consigner après leur réussite.