Files
sanctuary-beta/docs/head-cosmetics-beta021.md
T
2026-09-15 09:29:11 +02:00

6.5 KiB
Raw Permalink Blame History

beta.023 — cosmétiques de tête interactifs

Ticket commencé en beta.021 le 13 septembre 2026, branche codex/head-cosmetics-beta021. Finalisation en beta.023 après le correctif de chargement beta.022 préparé dans un autre espace de travail.

Contrat avant implémentation

Le slot tête reste un objet réel, sans protection, collision, redstone ou effet de bloc. Les œufs sur la tête gardent leur rendu dobjet. Les autres accessoires, familiers et pouvoirs ne changent pas.

Les bannières utilisent leurs couleurs et motifs natifs, y compris la bannière menaçante. Lits et portes ont leurs deux moitiés. Les minecarts utilisent leur modèle dentité sans créer dentité dans le monde. Feuilles, verre et toile daraignée enveloppent la tête. Les panneaux utilisent leur texte natif.

Clic droit sur un autre porteur : écrire sur son panneau, ajouter une bougie au gâteau avec une bougie en main, allumer avec briquet ou boule de feu, éteindre à main vide, changer la pose dune statue de golem à main vide. Une bougie éteinte sur un gâteau peut être retirée à main vide et est rendue. Lajout consomme une bougie hors créatif ; allumer use le briquet ou consomme la boule de feu. Aucun feu ni lumière de bloc nest créé dans le monde. Maj garde le geste de portage. Les trois interactions bougie/gâteau/statue sont aussi accessibles par clic droit sur la case cosmétique dans linventaire, avec lobjet au curseur. Un curseur vide éteint, retire la bougie ou change la pose ; la bougie retirée revient au curseur. Clic gauche retire normalement le cosmétique et Maj-clic conserve le transfert natif. Aucun bouton supplémentaire. Le porteur ne peut jamais écrire sur son propre panneau, même opérateur.

Les huit emplacements d’équipement ont une infobulle de rôle : tête, buste, jambes, pieds, main secondaire, familier, cape et cosmétique. Elle reste présente avec un objet équipé, à côté des informations natives de cet objet.

TNT : exception de gameplay demandée

Un coup infligeant des dégâts amorce la TNT équipée. Lobjet est consommé, remplacé par une vraie TNT native avec une mèche de 80 ticks (4 secondes à 20 TPS), qui suit la tête. Retirer ou remplacer le cosmétique nannule rien. La mort, la déconnexion ou le changement de dimension la détachent au dernier endroit, où elle poursuit sa mèche. Son explosion native endommage les entités et les blocs selon les règles du serveur, avec lattaquant comme responsable lorsque possible. Une seule TNT peut être amorcée sur un même porteur à la fois. Aucune immunité nouvelle nest accordée au porteur. La TNT utilise sa sauvegarde native (position et mèche) ; après redémarrage elle reste au dernier lieu sauvé.

Stockage et réseau

Le schéma 1 des accessoires reste inchangé. Les composants natifs de la pile portent sign_text_front, sign_text_back, banner_patterns et block_state. Le gâteau reçoit uniquement une clé additive sanctuary:head_candle dans custom_data, contenant lidentifiant de sa bougie. Labsence de cette clé signifie un gâteau ordinaire. Elle ne transforme pas la pose native du gâteau en bloc : retirer sa bougie avant de le poser permet de la récupérer. Toutes les autres données de lobjet sont préservées. Les piles existantes sont lues sans migration ni réécriture de monde.

Le serveur valide proximité, visibilité, objets, coût et état courant. L’éditeur natif de panneau est relié à un paquet dédié, jamais au paquet d’édition dun bloc du monde. Une session temporaire et un instantané de lobjet empêchent d’écrire sur un panneau remplacé ou à distance. Le texte accepté est constitué de quatre lignes sans commandes, avec le filtrage de texte natif du serveur. Le client et le serveur de cette livraison utilisent head_cosmetics_v2. La version 2 distingue linteraction avec lobjet au curseur de lancien bouton utilisant la main principale ; un ancien client est refusé à la connexion pour éviter de donner deux sens différents au même geste. Client et serveur doivent être mis à jour ensemble.

Validation

Livraison locale beta.023, client et serveur de même version.

  • ./gradlew check build assemblePack :sanctuary:runClientGameTest réussi, avec les suites cosmétiques, accessoires, familiers, progression, mouvement, inventaire, transferts, rangement, cycle, minage, construction, premiers pas et optimisation : 117 tests serveur, puis parcours client natif.
  • Actions au curseur : bougie consommée une seule fois, briquet usé ou cassé, extinction puis restitution au curseur, main principale conservée. Un menu de coffre ouvert refuse le paquet réservé à linventaire personnel.
  • Clic gauche retire le cosmétique ; le clic droit dun panneau personnel garde le transfert natif et nouvre pas l’éditeur. Le mixin ignore Maj.
  • Autre joueur : vrais clics sur panneaux classiques/suspendus, éditeur natif, texte réseau puis rendu. Motifs menaçants et seize couleurs de bannières, deux moitiés de portes/lits, six minecarts, verre/feuilles/toile et œuf inchangé.
  • TNT : dégâts réels, coup fatal avant les drops, quatre secondes de mèche, suivi et explosion native malgré le retrait du cosmétique.
  • Optimisation beta.022 intégrée : 588 288 comparaisons bit à bit réussies et classes de densité identiques à celles du précédent pack vérifié.
  • ZIP, versions, dépendances exactes, JAR embarqué et Demeure imbriqué vérifiés. Exports beta.020/beta.022 immuables ; PNG existants conservés ; aucun test ni monde distribué. Sources figées pendant la construction finale.

Commande de vérification :

./gradlew check build assemblePack :sanctuary:runClientGameTest \
  -PsanctuaryClientTests=true -PsanctuaryHeadCosmeticsClientTests=true \
  -PsanctuaryFocusedTests=cosmetics,accessories,familiar,companions,progression,movement,inventory,inventoryflow,sorting,cycle,mining,building,tutorial,startup

Export : Sanctuary-beta.023.mrpack. SHA-256 : 2140d477f2e105884ffdfe8d3d7a1199a1fdf3d298ad97dc7880c89918eb22c4. Preuves ignorées : build/cosmetics023-artifact.json, build/cosmetics023-check-build.log, captures du client et diagnostics serveur.

Les essais graphiques ont lieu sur Mac M1, dans un monde de développement neuf, avec un second avatar serveur de test ; aucune session distante réelle, ni validation Windows, ni installation Prism nest revendiquée. Le portage JEI est le ticket suivant, pas une fonction de ce pack.