122 lines
7.0 KiB
Markdown
122 lines
7.0 KiB
Markdown
# beta.012 — transferts, barres rapides et progression
|
||
|
||
Ticket sur `codex/inventory-flow-progression`, demandé le 13 septembre 2026.
|
||
Contrat préalable à l'implémentation et à la migration des données.
|
||
|
||
## Comportement attendu
|
||
|
||
Les rangées de stockage suivent leur ordre naturel de haut en bas ; la barre
|
||
rapide active reste en bas. Tab fait tourner les contenus des rangées acquises,
|
||
Maj+Tab inverse le sens. La touche est configurable ; E prend la priorité sur
|
||
la fermeture de l'inventaire si elle est choisie, Échap ferme toujours le menu.
|
||
Une rotation complète restitue l'ordre initial. Les anciennes cases verrouillées,
|
||
l'équipement et les objets du conteneur ouvert ne participent pas à la rotation.
|
||
Le serveur valide le menu, sa révision et la capacité ; aucune rotation avec un
|
||
objet porté par le curseur. Il envoie ensuite les objets actualisés au client.
|
||
|
||
Maj-clic regroupe les piles compatibles dans toutes les rangées autorisées avant
|
||
d'occuper une case vide. Les priorités des machines restent celles de Minecraft.
|
||
Un coffre plein refuse le transfert sans déplacer l'objet dans l'inventaire du
|
||
joueur. Les rangées verrouillées restent utilisables uniquement en récupération.
|
||
Les fonds des coffres et machines partagent la même origine que leurs cases.
|
||
|
||
Les six compétences affichent une jauge textuelle et leur valeur/plafond. Le
|
||
bouton + apparaît lorsque l'achat est possible. Le bouton − exige la permission
|
||
opérateur réelle du serveur ; il retire un rang de compétence et rembourse le
|
||
prix du dernier achat encore acquis pour cette compétence, enregistré au moment
|
||
de l'achat. Les aptitudes ne sont pas retirables. Chaque retrait est historisé.
|
||
|
||
## Migration et protocole
|
||
|
||
La progression passe du schéma 6 au schéma 7. Les migrations 1–5 restent suivies.
|
||
Tous les achats, dates, coûts, compétences, aptitudes et cycles restent conservés.
|
||
Un compteur `revision` explicite est initialisé avec l'ancienne valeur
|
||
`cycle * 64 + history.size()`, puis augmente à chaque achat, retrait et New Game+.
|
||
Le passage de cycle conserve aussi le plancher historique `nouveauCycle * 64`
|
||
pour reprendre les anciens journaux. Une révision déjà utilisée ne redevient jamais valide après un remboursement.
|
||
|
||
L'historique enregistre aussi les événements `remove_<compétence>`, avec le coût
|
||
exact remboursé. La relecture vérifie les achats encore acquis, leurs plafonds et
|
||
chaque remboursement. Le journal est limité à 1 024 événements par cycle ; arrivé
|
||
à cette limite, les ajustements sont refusés explicitement. Les retraits
|
||
réservent toujours assez de place pour terminer les six compétences et acheter
|
||
les aptitudes restantes. Le New Game+ archive
|
||
l'ancien historique par le journal de cycle existant et conserve les aptitudes.
|
||
Les anciens événements de cycle restent lisibles par les migrations de progression.
|
||
|
||
Le format des objets `sanctuary:inventory` reste au schéma 1 : les rotations
|
||
modifient les emplacements existants, sans inventaire parallèle ni permutation
|
||
persistante. Les objets occupés restent récupérables après retrait d'un rang.
|
||
Mort ordinaire : progression et historique conservés, règles d'objets inchangées.
|
||
Aucun terrain, identité, carte, Demeure, faction ou charge n'est modifié.
|
||
|
||
Client et serveur beta.012 exigent la capacité `sanctuary:inventory_controls_v1`.
|
||
Le snapshot de progression ajoute le droit opérateur et agrandit la borne de son
|
||
historique. Les identifiants existants restent stables. Un ancien client est
|
||
refusé avant le spawn ; mise à jour des deux côtés requise. Export local MRpack
|
||
pour essai, sans publication ni installation personnelle.
|
||
|
||
## Vérification
|
||
|
||
La passe graphique `:sanctuary:runClientGameTest -PsanctuaryClientTests=true
|
||
-PsanctuaryInventoryClientTests=true` réussit en 1 min 29 s. Elle crée uniquement
|
||
un monde de développement neuf, de graine 42. Le journal est
|
||
`build/inventory012-client-final.log`.
|
||
|
||
Elle ouvre les six capacités à deux échelles GUI, puis 24 types de menus natifs.
|
||
Une sonde de test contrôle les coordonnées des vrais appels de dessin du fond,
|
||
comparées à celles des cases. Les coffres sont remplis de blé et de charbon pour
|
||
vérifier leur alignement. Les rangées visibles restent dans l'écran ; les grands
|
||
coffres permettent de faire défiler le stockage en conservant la barre rapide.
|
||
|
||
Les essais client couvrent aussi le déplacement Tab, son inverse, le remplacement
|
||
par E, la fermeture par Échap, les + masqués sans XP, l'affichage opérateur, l'achat
|
||
d'un cœur puis son remboursement par −. L'XP passe de 30 à 29 puis revient à 30,
|
||
et le serveur enregistre `remove_vitality`. Les contrôles du protocole opèrent
|
||
uniquement sur un serveur Sanctuary ; les serveurs sans Sanctuary restent accessibles.
|
||
|
||
Captures conservées dans `build/inventory012-evidence/`, notamment le coffre
|
||
`0014_sanctuary-beta012-generic_9x3-minimum.png` et la progression opérateur
|
||
`0039_sanctuary-beta012-progression-operator.png`.
|
||
|
||
La validation finale serveur et la vérification de l'artefact sont consignées
|
||
ci-dessous. Les tests ne simulent pas 30 clients simultanés.
|
||
Les autres mods communautaires ne sont pas inclus dans cet essai des menus natifs.
|
||
|
||
|
||
### Livraison vérifiée
|
||
|
||
`check build assemblePack` réussit en **4 min 19 s**, avec **49 tests natifs
|
||
réussis** et les tests purs. Commande :
|
||
|
||
```sh
|
||
JAVA_HOME=/Users/koka/Library/Java/JavaVirtualMachines/temurin-25.jdk/Contents/Home \
|
||
./gradlew check build assemblePack \
|
||
-PsanctuaryFocusedTests=progression,map,demeure,mining,building,inventory,cycle,inventoryflow
|
||
```
|
||
|
||
Journal : `build/inventory012-delivery-final.log`. Les quatre nouveaux scénarios
|
||
vérifient les regroupements à chacune des six capacités, les coffres pleins,
|
||
les priorités et restes natifs de 24 types de menus sur huit types d'objets,
|
||
les rotations inverses et complètes avec composants et anciennes cases occupées,
|
||
les refus de requêtes périmées, l'autorité opérateur et le remboursement exact.
|
||
Le coût remboursé et l'historique sont relus depuis la sauvegarde native du joueur.
|
||
Les tests de cycle vérifient également l'archivage des retraits au passage de
|
||
prestige ; les tests de progression atteignent le budget maximal d'historique
|
||
sans empêcher de terminer les six compétences. Les assertions historiques qui
|
||
exigeaient de déplacer tout le charbon dans toutes les machines sont remplacées
|
||
par la comparaison avec leurs règles natives ; les montures sont conservées
|
||
avec un conteneur de test aux dimensions exactes de 26.3-pre-2.
|
||
|
||
La suite serveur de génération générale n'est pas relancée par la sélection
|
||
ci-dessus ; les tests purs de génération inclus dans `check` passent. Aucun
|
||
serveur de 30 habitants n'est simulé.
|
||
|
||
- Export : `build/Sanctuary-beta.012.mrpack`, **2,496,778 octets**.
|
||
- SHA-256 : `5d7fa635adb7ea5bf32ef361be95f242090912d52d6209398abeac32ea06f87d`.
|
||
- Reçu : `build/inventory012-artifact.json`.
|
||
- Archives beta.003–011 inchangées ; versions internes, JAR imbriqué Demeure,
|
||
ressources d'origine, traductions et index packwiz vérifiés.
|
||
- Distribution locale pour essai, sans publication du canal ni installation
|
||
dans une instance personnelle.
|