Files
sanctuary-beta/docs/mining-beta008.md
2026-09-15 09:29:11 +02:00

130 lines
8.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# PROG-02A — Minage et vein mining — beta.008
Branche : `codex/progression-vein-mining`. Ticket implémenté et export local
vérifié le 13 septembre 2026. Cible inchangée : Minecraft 26.3-pre-2 / Fabric.
## Contrat préalable de données
La progression personnelle passe au schéma 3 en ajoutant `mining`, entier
de 0 à 7. Les schémas 1 (beta.003/004) et 2 (beta.005007) sont lus selon
leurs champs stricts, puis reçoivent `mining: 0`. Le schéma 1 reçoit aussi
`atlas: false` selon son contrat antérieur. Aucun rang existant, achat, date
ou coût historique n'est modifié. La migration ne crée pas d'achat fictif.
L'historique accepte sept achats `mining` supplémentaires, soit 30 événements
au maximum. Chaque rang doit toujours correspondre à son nombre exact d'achats.
À la restauration du joueur, la représentation canonique est réattachée au
même champ persistant `sanctuary:progression` et enregistrée avec sa prochaine
sauvegarde Minecraft. La migration est idempotente. Une donnée invalide refuse
la restauration au lieu de réinitialiser la progression.
Les profils d'habitants, couleurs, Atlas, Demeure, XP non dépensée et fichiers
de configuration existants sont conservés. `statCosts` finance aussi Minage :
par défaut 1, 2, 4, 8, 16, 32 puis 64 niveaux. La configuration reste au schéma 2.
Le paquet de progression conserve son identifiant et transporte le nouveau
JSON ; le client et le serveur doivent utiliser beta.008 ensemble. Les anciennes
versions ne lisent pas le schéma 3 : un retour arrière exige une sauvegarde
antérieure des données de joueur. Aucun monde personnel n'est ouvert ici.
La mort ordinaire et la reconnexion conservent Minage comme les autres rangs.
Aucun New Game+ ou reset n'est activé dans ce ticket. La génération, les chunks,
les expansions et les identifiants existants restent inchangés.
## Fonctionnement implémenté
- Rangs 07, plafonds de 1 / 4 / 8 / 16 / 32 / 64 / 128 / 256 blocs.
Le rang 0 garde le geste de minage individuel.
- Courbe d'essai : vitesse Minecraft au départ, puis 115, 130, 145, 160, 175,
187,5 et 200 %. Le modificateur natif `BLOCK_BREAK_SPEED` compose avec les
outils, enchantements, effets et autres mods ; leurs modificateurs restent
présents. La courbe historique 25100 % n'est pas appliquée par défaut.
- Blocs identiques reliés par les faces, dans une limite de sept blocs sur
chaque axe autour de la cible. Coffres et autres blocs à entité, blocs
indestructibles et chunks absents sont exclus. Aucun chunk n'est chargé
pour trouver une veine.
- Touche configurable maintenue et clic gauche ; aperçu avant de commencer,
taille ajustable dans les rangs achetés. B reste le Blocodex.
- Par défaut **R maintenu** affiche la veine ; **R + clic gauche maintenus**
la minent. **R + molette** choisit un palier inférieur parmi les rangs acquis
sans changer de case de barre rapide. Le prochain rang se voit dans l'infobulle
de la compétence ; la touche affichée suit son réglage dans les contrôles.
- Le serveur recalcule la sélection, vérifie l'origine visée, les permissions,
l'outil, les états de blocs et la durée. Relâcher, changer d'outil, s'éloigner,
mourir ou se déconnecter interrompt l'action.
- La destruction passe par Minecraft pour les objets, l'XP, la durabilité,
la faim, les enchantements, les statistiques et les événements de mods.
L'aperçu et les actions refusées ne créditent aucune activité.
La durée de chaque bloc est cumulée avant la casse du groupe, puis les blocs
sont détruits par lots d'au plus 16 par tick. Les états et permissions sont
revérifiés ; une modification concurrente annule les travaux devenus obsolètes.
Un outil remplacé, même par un exemplaire identique, ne reprend pas une charge.
La rupture de l'outil arrête les blocs restants. Chaque geste a un identifiant
éphémère et des maintiens espacés de cinq ticks ; sans maintien pendant plus de
12 ticks, il expire. Un geste terminé ou refusé ne redémarre pas sur son maintien.
Le passage au geste groupé annule aussi le minage individuel différé de Minecraft.
Les sons et particules de casse du groupe remplacent uniquement l'événement
audiovisuel natif de ces blocs, pour ne pas jouer 256 sons simultanés. Les
événements de jeu, callbacks de protection, statistiques, objets et XP suivent
toujours la destruction Minecraft. Le créatif garde ses règles natives sans loot
ni usure ; être opérateur en survie n'accorde aucune de ces exemptions.
Références GPL-3.0-or-later en lecture seule : `../26.2/sanctuary`, sélection
`SanctuaryVeinSelection`, session `SanctuaryMiningSession`, limites communes
et aperçu `SanctuarySelectionPreviewRenderer`. Le port est compilé et testé sur
les API exactes de 26.3-pre-2 : attribut natif de vitesse synchronisé, nouvelle
signature d'animation d'attaque, paquet de geste et rendu des contours par Gizmos.
## Vérifications
- Compilation et contrôles de contrat `progression003Smoke` / `atlas005Smoke`
réussis. Les anciennes données, leurs achats et configurations sont relus,
et la migration Minage est contrôlée avec ses rangs, son plafond et ses refus.
- Parcours client natif :
`./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryProgressionClientTests=true`,
réussi en **2 min 15 s**. Deux achats par clic réel, aperçu de huit puis quatre
blocs, molette native sans changement d'outil, annulation, second geste avec
huit casses et huit usages d'outil, reconfiguration de R vers G, interruption
par B, mort et reprise des cinq achats sont vérifiés. La matrice de GUI et
le parcours Atlas précédents restent inclus. Captures inspectées et conservées
dans `build/beta008-preview/` ; journal `build/beta008-client-retry.log`.
- Un premier client a été arrêté avant le lancement des tests, bloqué dans
`SDL_GL_SwapWindow` pendant le chargement initial. Le nouvel essai a désactivé
la VSync dans les options de développement uniquement ; cette option a été
remise à sa valeur précédente après le succès. Aucun réglage de ce diagnostic
n'est distribué. Pile native : `build/beta008-client-threads.txt`.
- Le premier essai serveur a détecté deux erreurs de montage des tests : la
contribution Demeure devait être additionnée sur les chunks traversés, et
l'avance simulée d'un joueur faisait avancer les autres tests asynchrones.
La simulation est maintenant isolée par joueur ; le scénario à deux mineurs
les fait avancer alternativement. Le scénario créatif a aussi été corrigé :
le joueur simulé doit être créé dans ce mode, car le mock Minecraft conserve
le mode fourni à sa création malgré un appel ultérieur à `setGameMode`.
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=progression,map,demeure,mining`
réussi en **4 min 4 s**, dont **18 tests serveur natifs obligatoires réussis**.
Les dix scénarios Minage couvrent les achats, limites, protections Fabric,
annulations, interruptions, deux mineurs concurrents, expiration du maintien,
blocs instantanés, créatif, usure, mauvais outil, Toucher de soie et Fortune.
Ils vérifient aussi les crédits Blocodex/Demeure, statistiques, faim et XP
issus des destructions natives. Les contrôles purs du dépôt sont inclus.
Journal : `build/beta008-delivery-final.log`.
Les deux assertions worldgen générales connues en beta.003/005 ne sont pas
revendiquées corrigées par ce ticket ; la sélection de tests serveur ci-dessus
reste ciblée sur progression, carte, Demeure et Minage.
## Artefact local
- [Sanctuary-beta.008.mrpack](../build/Sanctuary-beta.008.mrpack), **2 331 912 octets**.
- SHA-256 : `760176daa164fd28ece77008dc0442cfc5539c997f9a9696ea2cea6edf21bcf3`.
- Reçu : `build/mining008-artifact.json` ; somme séparée :
`build/Sanctuary-beta.008.mrpack.sha256`.
- Export packwiz vérifié : CRC, manifeste et versions internes, identité du JAR
construit et du JAR Demeure embarqué, classes et mixins Minage, traductions
FR/EN, six icônes originales, index et dépendance Fabric API exacts, absence
de classes de test. Les exports beta.003 à beta.007 sont restés identiques.
Cet export n'a pas été publié sur le canal packwiz ni installé dans une instance
personnelle. Les mondes utilisés pour les vérifications sont ceux du développement.