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

182 lines
10 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.
# TIME-037 — temps réel et suivi commun
Branche `codex/realtime-tracking-beta037`, base beta.036.
Minecraft 26.3-pre-2 et Java 25. Contrat écrit avant limplémentation.
## Demande retenue
Le suivi des futurs objectifs de quête utilise le même système que les
notifications et advancements : même position, mêmes jauges, mêmes règles
visuelles et mêmes options. Aucun second HUD en haut à gauche. Les quêtes,
panneaux, rubis/saphirs, récompenses et visiteurs ne sont pas créés ici.
Le temps réel est activé par défaut dans les mondes concernés. En solo, le fuseau de la machine
est automatique. Le créateur confirme une **ville de référence du fuseau**, sans
IP ni géolocalisation, pour estimer le soleil saisonnier. En multijoueur, le
serveur choisit son fuseau et sa région de référence dans sa configuration.
## Contrat de migration et de retour
Lactivation concerne les mondes Sanctuary et le profil Sanctuary Test. Un monde
Minecraft ordinaire garde son horloge native. Aucun monde personnel nest ouvert
par le développement ; essais uniquement dans les dossiers ignorés.
Au premier lancement avec le nouveau mode, un fichier distinct
`data/sanctuary-realtime.json` consigne un ancrage de calendrier et les paramètres
natifs de vitesse/pause avant activation. Il est écrit atomiquement **avant**
dappliquer le nouveau temps. Le jour Minecraft courant est conservé comme base,
puis avance dun jour par jour réel ; lheure se cale immédiatement sur le soleil
réel estimé. Pas d’âge artificiel de plusieurs dizaines de milliers de jours.
Un changement de région ou de mode réancre cette base sans simuler les jours manqués.
Lhorloge de simulation `gameTime`, les ticks planifiés, cultures, fours, fluides,
croissance des entités, inventaires et progression ne sont ni sautés ni ralentis.
Aucun rattrapage de simulation hors ligne. Les comportements naturellement liés
au jour/nuit, dont les routines des villageois, suivent en revanche la journée
solaire plus longue. Génération, chunks, structures, graines et expansions restent
inchangés. Aucun schéma de sauvegarde existant nest remplacé.
Le fichier dhorloges natif garde une vitesse/pause native lors de lenregistrement,
même pendant le temps réel. Sans le mod, le monde reprend donc son rythme natif
à partir de sa dernière heure, sans conserver une vitesse solaire très lente.
Le mode vanilla rétablit cette même vitesse/pause, à lheure courante ; il ne
restaure pas un ancien `gameTime`. Les preuves dancrage restent dans le fichier
séparé. Un fichier invalide ou modifié extérieurement est refusé sans écrasement.
## Soleil et limites visuelles
Lheure et la date viennent de lhorloge du serveur intégré ou dédié. Les jours
allongent/raccourcissent selon la latitude de référence et la saison. Le fuseau
Java gère les changements dheure civile ; le soleil est calculé en instants UTC
pour rester continu lors du passage été/hiver. Les références publiques IANA sont
embarquées ; aucun accès réseau en jeu. Un fuseau sans ville de référence utilise
un repère équatorial à son méridien horaire, annoncé comme approximation.
Les levers, midi solaire et couchers cadrent les phases du ciel Minecraft. Les
nuages et lorbite restent natifs : ce nest pas un moteur astronomique complet.
Les journées polaires conservent un ciel de jour et les nuits polaires un ciel
de nuit, avec soleil stationnaire dans cette première version.
Le sommeil en lit conserve sa pose et son point de réapparition mais ne saute
plus la nuit et ne change pas la météo. Les apparitions naturelles de phantoms
liées à linsomnie sont désactivées en temps réel, conformément à la vision.
Les phantoms existants, œufs et familiers ne sont pas supprimés ; les autres
fantômes prévus dans la vision restent hors de ce ticket.
Les commandes administrateur permettent de consulter le mode et les heures,
de recharger la configuration, et de revenir au temps Minecraft. Les commandes
natives qui changent lhorloge solaire doivent signaler que le temps réel la
contrôle ; les requêtes de lecture et les autres horloges restent disponibles.
## Sources techniques
Formules solaires approximatives de [NOAA](https://gml.noaa.gov/grad/solcalc/solareqns.PDF),
références géographiques publiques de [IANA tzdb](https://data.iana.org/time-zones/tzdb/).
Les API dhorloges, paquets, timelines et sommeil sont vérifiées dans les sources
exactes de Minecraft 26.3-pre-2 fournies par Loom.
## Utilisation
En solo, aucune saisie : le fuseau de la JVM suit celui de la machine au
lancement. Exemple Europe/Paris : référence publique Paris. Aucun paramètre
client ne permet de modifier lheure dun serveur dédié.
Sur serveur dédié, modifier `config/sanctuary/realtime.json` :
```json
{
"enabled": true,
"serverTimeZone": "Europe/Paris",
"solarRegion": "auto"
}
```
`auto` prend la ville associée au fuseau. `solarRegion` accepte aussi un autre
identifiant IANA de référence, par exemple `Europe/London`. Ne pas entrer de
coordonnées privées. Par défaut dédié : UTC, repère équatorial approximatif.
La liste embarquée est `data/sanctuary/realtime/zone-references.json` dans le JAR.
- `/sanctuary time` : mode, date/heure civile, lever et coucher estimés.
- `/sanctuary time reload` : recharge le fichier de configuration (opérateur).
- `/sanctuary time vanilla` : reprend le rythme Minecraft dans ce monde (opérateur).
- `/sanctuary time realtime` : reprend lheure réelle, si la configuration
lautorise (opérateur).
Loption globale `enabled: false` arrête le pilotage solaire. Un monde créé
pendant cette désactivation nécessite `/sanctuary time realtime` après
réactivation. Une configuration invalide au lancement conserve lhorloge native ;
un rechargement invalide laisse la dernière configuration valide en place et
signale lerreur. Les commandes natives `/time` de modification exigent le mode
vanilla ; les lectures restent possibles. Le profil plat utilise aussi le temps
réel, avec ce même retour explicite au rythme Minecraft pour les essais.
## Contrat du suivi commun
`ObjectiveTracker` centralise les instantanés par couple source/identifiant.
Les advancements natifs sont déjà branchés sur ce moteur. Un futur adaptateur de
quêtes transmettra ses instantanés validés par le serveur à
`NotificationClient.objectives("quest", ...)`, sur le thread client, puis pourra
utiliser `toggleObjective` pour le choix manuel. Cette API est uniquement une
présentation : aucune validation de quête, récompense ou découverte côté client.
Premier instantané silencieux, message seulement quand la progression augmente,
barre temporaire expirante, épingle retirée à la réussite, trois épingles communes
maximum. Mort/respawn nettoient le fil et les instantanés temporaires ; un nouvel
instantané remet les épingles à jour. Déconnexion vide le contexte du serveur.
Les préférences beta.036 et leurs identifiants dadvancements restent lisibles,
sans migration forcée ; les autres sources utilisent `source|identifiant`.
Le raccord au rendu traite aussi les retours anticipés de Minecraft lorsque F3
na aucune ligne ; le suivi apparaît donc pendant le jeu normal.
Même position, options, textures natives et évitement F3/boss/hotbar pour toutes
les sources. Aucun panneau de quête ni nouvelle quête nest ajouté dans le jeu.
## Validation
Livré localement en **beta.037**. `./gradlew check build assemblePack assembleTestPack`
réussit avec 29 tests serveur ciblant temps réel, notifications, progression,
mouvements, collections et recettes. Les 7 765 assertions du test solaire et du
suivi couvrent les fuseaux Java disponibles sur les douze mois de 2026,
les solstices nord/sud, jours polaires, année bissextile, DST, ligne de date,
continuité à minuit, configurations, contrat atomique et objectifs mixtes.
Le test serveur vérifie les paramètres natifs sauvegardés, le paquet de
synchronisation, le temps de simulation inchangé, les permissions, le refus des
commandes `/time` en temps réel, lEnd indépendant, les phantoms naturels et
les retours/rechargements de configuration sans perdre les modifications
administrateur effectuées en mode vanilla.
Deux parcours client natifs réussissent sur des mondes plats de développement :
- lever, midi et coucher aux angles natifs attendus, synchronisation réelle du
paquet dhorloge, entrée dans un lit et sommeil profond sans saut de nuit ;
- source de quête synthétique **uniquement dans les tests** : rendu sans F3,
expiration, épingle et retrait à la réussite ;
- régression du suivi par clic/re-clic/glissement dans Advancements, conservation
après respawn, 36 dispositions avec F3 et son échelle indépendante, boss,
hotbar, écrans FR/EN, descente réelle avec un perroquet porté.
Les captures ont été inspectées dans `build/realtime037-evidence/`. Logs :
`build/realtime037-check-final.log`, `build/realtime037-client-release.log`,
`build/realtime037-regression-client.log`. Reçu dartefact :
`build/realtime037-artifact.json`.
Les 1 353 classes du mod et les trois classes de lextension de test correspondent
au build. Génération, ressources préexistantes hors langues/notices, code Demeure
et JAR JEI sont inchangés. Les deux beta.036 gardent leurs empreintes initiales.
Ni canal public, ni installation Prism personnelle, ni monde personnel modifié.
La validation ne simule pas plusieurs jours réels dhébergement continu : les
frontières calendaires sont testées avec une horloge déterministe. Le soleil
reste une approximation liée à une ville publique ; aux pôles il reste fixe
le jour ou la nuit. Les quêtes et leurs récompenses ne sont pas livrées ici.
## Artefacts vérifiés
- [Sanctuary-beta.037.mrpack](../build/Sanctuary-beta.037.mrpack) — 5,014,547 octets.
SHA-256 : `e91d29dddf5ee26098a4de6fff85a5cfa5ce920304754c12aecd06cf8b6a9d2d`.
- [Sanctuary-Test-beta.037.mrpack](../build/Sanctuary-Test-beta.037.mrpack) — 5,033,482 octets.
SHA-256 : `9b4e3c60e507e2ab9e3bf666615d833db8b0e4375454dc727aff7f5155c4b043`.