99 lines
5.7 KiB
Markdown
99 lines
5.7 KiB
Markdown
# beta.016 — XP des premiers pas
|
||
|
||
Ticket du 13 septembre 2026, branche `codex/tutorial-xp-beta016`.
|
||
Contrat préalable à l'implémentation et à l'ajout de données persistantes.
|
||
|
||
## Comportement et budget
|
||
|
||
Les cinq actions de `TutorialSteps` dans Minecraft 26.3-pre-2 reçoivent une
|
||
récompense personnelle de **8 points d'XP** chacune par défaut. Les 40 points
|
||
font quatre niveaux depuis zéro sans autre gain ni dépense. Ouvrir l'inventaire
|
||
suffit à pouvoir acheter le premier rang d'une compétence. Chaque action peut
|
||
être accomplie indépendamment de l'ordre du tutoriel client.
|
||
|
||
| Identifiant stable | Action validée |
|
||
| --- | --- |
|
||
| `movement` | Marcher au moins deux mètres et tourner la vue d'au moins 15° pendant la connexion |
|
||
| `find_tree` | Observer un bloc du tag natif `completes_find_tree_tutorial`, ou obtenir/miner une bûche |
|
||
| `punch_tree` | Miner réellement une première bûche (`logs`) en survie |
|
||
| `open_inventory` | Ouvrir l'inventaire personnel |
|
||
| `craft_planks` | Fabriquer des planches : statistique native de fabrication du tag `planks` |
|
||
|
||
Un message personnel FR/EN annonce l'étape et les points reçus. Le tutoriel
|
||
vanilla et ses préférences restent en place ; ces récompenses fonctionnent
|
||
aussi quand Minecraft n'affiche plus ses conseils. Aucun changement des
|
||
advancements Minecraft, aucun nouvel advancement Sanctuary pour ces gestes.
|
||
|
||
Les étapes ne se récompensent qu'une fois par UUID dans ce monde : conserver
|
||
leur état après reconnexion, mort et New Game+. Les points non dépensés suivent
|
||
les règles existantes de mort. Créatif et spectateur n'accordent rien ; un
|
||
opérateur jouant en survie suit les mêmes étapes que les autres habitants.
|
||
Les anciennes statistiques ne déclenchent pas de paiement rétroactif : les
|
||
habitants existants peuvent accomplir ces actions une fois après la mise à jour.
|
||
|
||
## Autorité et migration
|
||
|
||
Le serveur attribue les XP et constate les déplacements/statistiques, la vue
|
||
des blocs et la fabrication. L'ouverture de l'inventaire est un écran local :
|
||
le client la signale, et le serveur vérifie que le joueur est vivant, en survie
|
||
ou aventure, dans son propre menu d'inventaire, avec une progression active.
|
||
Ce signal ne contient ni quantité d'XP ni identifiant de récompense libre. Un
|
||
client modifié pourrait anticiper ce seul geste ; il ne peut pas répéter le gain.
|
||
|
||
Ajout de l'attachement persistant `sanctuary:tutorial`, schéma 1, contenant les
|
||
étapes terminées, leur date et le nombre de points payé. Absent des anciennes
|
||
sauvegardes, il commence vide. Il est enregistré **dans le même instantané joueur
|
||
que l'XP**, copié à la mort et laissé intact par le New Game+. Le schéma 8 de
|
||
progression et les journaux existants ne changent pas. Les données inconnues ou
|
||
corrompues sont refusées sans remplacement silencieux.
|
||
|
||
Nouvelle configuration `config/sanctuary/tutorial.json`, schéma 1 : `enabled`
|
||
et `xpPerStep` (8 par défaut, 0 à 10 000), lue au démarrage du serveur. La créer uniquement si absente ;
|
||
conserver toute configuration valide existante. Une étape terminée ne peut
|
||
pas être repayée après changement du montant. Aucun paiement périodique,
|
||
aucune remise à zéro des étapes au prestige.
|
||
|
||
Capacité réseau `sanctuary:tutorial_v1`, message d'ouverture
|
||
`sanctuary:tutorial_inventory_opened`, état personnel `sanctuary:tutorial_state`.
|
||
Client et serveur utilisent beta.016 ensemble. Aucune intervention sur le
|
||
terrain, les expansions ou une installation de jeu personnelle.
|
||
|
||
## Vérification prévue
|
||
|
||
Contrôler les déclencheurs réels, le total, les actions répétées, les modes de
|
||
jeu, l'achat avec l'XP du tutoriel, les sauvegardes, le respawn et le New Game+.
|
||
Vérifier les configurations et données malformées. Exécuter les tests Gradle
|
||
et un parcours client natif, puis exporter un MRpack beta.016 vérifié qui conserve
|
||
les nouvelles icônes beta.015 et les sprites vanilla de respiration/faim.
|
||
|
||
## Validation serveur réalisée
|
||
|
||
`./gradlew check build assemblePack
|
||
-PsanctuaryFocusedTests=progression,mining,building,inventory,cycle,inventoryflow,sorting,tutorial`
|
||
réussit avec **57 tests natifs** et tous les contrôles purs (`build/tutorial016-check-build.log`).
|
||
|
||
Les tests beta.016 passent par les statistiques natives de déplacement, une
|
||
observation Blocodex, un vrai bloc détruit et la sortie d'une recette du menu 2 × 2.
|
||
Le total de 40 XP atteint quatre niveaux ; une récompense d'ouverture seule
|
||
permet un achat. Répétition, coffre, réception de planches, créatif/spectateur,
|
||
désactivation et changement de montant n'offrent aucun gain supplémentaire indu.
|
||
Le même instantané joueur recharge l'XP et ses étapes ; le respawn et un vrai
|
||
New Game+ conservent les étapes, sans recréditer les points perdus.
|
||
|
||
Les contrôles purs vérifient les champs inconnus/manquants/dupliqués, schémas
|
||
futurs, montants fractionnaires/négatifs/hors limite et configurations invalides
|
||
sans écrasement. Le schéma de progression reste 8.
|
||
|
||
Le client natif (`runClientGameTest -PsanctuaryClientTests=true
|
||
-PsanctuaryTutorialClientTests=true`) passe également : E rapporte 8 XP,
|
||
vingt répétitions du message ne rapportent rien, puis l'achat du premier cœur
|
||
fonctionne. Les six icônes et les libellés FR/EN sont contrôlés à l'écran.
|
||
Capture : `mods/sanctuary/build/run/clientGameTest/screenshots/0001_sanctuary-beta016-tutorial-xp-fr_fr.png`.
|
||
|
||
Export local vérifié : [Sanctuary-beta.016.mrpack](../build/Sanctuary-beta.016.mrpack),
|
||
2 549 212 octets, SHA-256
|
||
`79f92b05d41c35d7408298831d1ac9edb18be9f86349400fdc044ee1ef37e60c`.
|
||
Versions internes, dépendance Fabric API, intégrité ZIP et icônes identiques aux
|
||
sources du resource pack contrôlées (`build/tutorial016-artifact.json`).
|
||
Les exports beta.003–015 sont inchangés. Aucun déploiement personnel effectué.
|