173 lines
10 KiB
Markdown
173 lines
10 KiB
Markdown
# CYCLE-01 · PROG-03 · FACTION-01 · NGP-01 — beta.011
|
||
|
||
Contrat commun établi avant l'évolution des sauvegardes. Branche :
|
||
`codex/factions-new-game-plus`. Minecraft reste **26.3-pre-2**.
|
||
|
||
> Historique beta.011. Depuis [beta.038](graves-food-beta038.md), la fondation
|
||
> coûte 10 niveaux et crée une seule place, sans prestige ; les charges servent
|
||
> aux places supplémentaires. Les anciennes fondations restent inchangées.
|
||
|
||
## Règles de cette livraison
|
||
|
||
Un cycle est personnel. Le premier porte le numéro 1. Seul un habitant vivant
|
||
ayant les **six compétences au maximum** peut confirmer son New Game+.
|
||
Les aptitudes ne conditionnent pas ce passage. Une mort ordinaire ne termine
|
||
jamais un cycle et ne distribue aucune récompense de prestige.
|
||
|
||
Valeurs initiales de `config/sanctuary/cycle-factions.json` : chaque passage
|
||
accorde **1 prestige et 1 charge personnelle**. Créer une faction coûte
|
||
**1 charge**, donne **2 places**, fondateur compris. Chaque membre peut payer
|
||
**1 charge pour ajouter 1 place**. Le plafond de cette première version est
|
||
100 membres. Le prestige compte les cycles achevés ; ce n'est pas une monnaie.
|
||
Les charges inutilisées appartiennent à l'habitant. Les places financées
|
||
appartiennent à la faction et restent après un départ ou un New Game+.
|
||
Aucun remboursement lors d'une dissolution. Les règles monétaires sont
|
||
configurables au redémarrage, mais ne recalculent jamais les anciens événements.
|
||
|
||
Une personne appartient à une seule faction à la fois. Le propriétaire invite,
|
||
révoque les invitations, exclut, transmet la responsabilité et dissout.
|
||
Les invitations durent 7 jours réels ; elles ne réservent pas de place.
|
||
L'acceptation revalide place, invitation et absence d'autre faction. Les membres
|
||
peuvent partir ; le propriétaire doit transmettre ou dissoudre. Son absence
|
||
ne transfère pas automatiquement la propriété. Le changement de propriétaire
|
||
annule les invitations en cours. La couleur de faction est copiée de celle du fondateur à sa création ;
|
||
la couleur personnelle reste indépendante.
|
||
Les factions n'accordent encore ni claims ni protection de blocs.
|
||
|
||
## Matrice du New Game+
|
||
|
||
| Donnée | Traitement |
|
||
| --- | --- |
|
||
| Six compétences | Rang zéro : 3 cœurs, 3 nourritures, 3 bulles, gestes individuels, 9 cases |
|
||
| XP non dépensée | Remise à zéro par défaut ; option serveur `keepXp` |
|
||
| Identité, UUID, pseudo enregistré, bio, couleur | Conservés |
|
||
| Aptitudes et preuves de leurs achats | Conservées |
|
||
| Achats du cycle terminé | Archivés intégralement, coûts et dates compris |
|
||
| Objets, équipement, main secondaire, coffre de l'Ender | Conservés, sans déplacement |
|
||
| Rangées d'inventaire redevenues verrouillées | Occupées et visibles en récupération : retrait autorisé, nouveau dépôt interdit |
|
||
| Recettes, découvertes, Atlas personnel, statistiques et advancements | Conservés |
|
||
| Demeure, faction, rôle, invitations encore valides | Conservés |
|
||
| Prestige et charges personnelles | Conservés, puis récompense du cycle ajoutée une seule fois |
|
||
| Monde, constructions, coordonnées du joueur | Conservés ; aucune régénération ou téléportation |
|
||
| Santé, faim, air courants | Bornés aux nouvelles capacités, sans soin gratuit |
|
||
| Argent, coffre-fort, favoris, mémoire Web | Systèmes futurs ; ce ticket ne crée ni ne migre de données fictives |
|
||
|
||
Exemple : Alice termine son premier cycle, obtient prestige 1 / charge 1 et
|
||
fonde une faction de deux places. Bob la rejoint sans payer. Son propre premier
|
||
New Game+ lui donne une charge : il l'investit et la faction passe à trois
|
||
places. Au deuxième New Game+ d'Alice, son prestige devient 2 ; sa nouvelle
|
||
charge reste personnelle et son rôle de propriétaire demeure. Ses 54 cases
|
||
pleines ne sont ni effacées ni jetées : les 45 cases désormais verrouillées
|
||
restent retirables jusqu'à leur prochain déblocage.
|
||
|
||
## Contrat de migration et reprise
|
||
|
||
L'adoption des progressions beta.003–010 est additive : schémas 1–5 vers
|
||
**schéma 6**, avec `cycle: 0` (zéro cycle terminé). Aucun achat n'est perdu.
|
||
La révision réseau vaut `cycle * 64 + nombre d'achats actifs`, empêchant qu'un
|
||
ancien clic d'achat soit accepté après remise à zéro. Les identifiants existants
|
||
restent stables. La capacité de configuration `sanctuary:cycle_factions_v1`
|
||
exige la mise à jour des deux côtés avant de rejoindre.
|
||
|
||
Le nouveau fichier `data/sanctuary-cycle-factions.json` est un journal de monde
|
||
versionné (schéma 1), lié à la graine, contenant UUID de monde et événements
|
||
datés identifiables. Il reconstruit soldes, factions et fins de cycle. Chaque
|
||
mutation est validée sur une copie, écrite par remplacement atomique puis
|
||
publiée en mémoire. Une erreur ou un fichier modifié extérieurement bloque les
|
||
mutations ; aucune remise à zéro silencieuse.
|
||
|
||
Un New Game+ écrit **d'abord** sa fin de cycle et sa récompense dans ce journal,
|
||
puis applique la nouvelle progression au joueur. Au prochain chargement, si
|
||
le journal a un cycle d'avance, sa décision est rejouée sur le joueur (avec
|
||
sa politique XP enregistrée). Si les numéros concordent, rien n'est réinitialisé.
|
||
Un joueur en avance sur le journal, ou en retard de plus d’un cycle, est
|
||
refusé, ce qui détecte une restauration partielle incompatible. Le délai entre clics utilise une horloge monotone réelle (250 ms), indépendante
|
||
des ticks suspendus dans le menu pause solo. Lire une page ne consomme pas
|
||
le délai réservé à une mutation. Le solde d’XP est envoyé explicitement avec
|
||
la progression pour rester exact pendant cette pause. Les tentatives répétées d'un même cycle ne donnent
|
||
pas de charge supplémentaire. La sauvegarde vanilla conserve les objets et
|
||
la progression dans le même fichier joueur, comme en beta.010. Les acquisitions
|
||
d’objets entre deux sauvegardes restent soumises à l’autosauvegarde Minecraft :
|
||
ce journal ne remplace pas la sauvegarde générale du monde.
|
||
|
||
Faire une copie complète du monde arrêté avant adoption ; restaurer ensemble
|
||
le journal, les fichiers des joueurs et les autres données du monde. Le retour
|
||
aux anciens binaires après adoption n'est pas supporté. Ce contrat autorise
|
||
l'évolution du code de lecture/écriture ; aucun monde personnel n'est modifié
|
||
par les travaux de développement.
|
||
|
||
## Livraison et vérifications
|
||
|
||
Les contrôles du contrat pur passent : reprise beta.010, cinq/six compétences,
|
||
conservation des aptitudes, deux cycles successifs, double requête, dépenses,
|
||
propriétaire absent, invitations concurrentes, expiration exacte à sept jours,
|
||
transmission, dissolution, relecture du journal et refus d'une écriture après
|
||
corruption ou modification externe.
|
||
|
||
Les sept scénarios natifs propres à beta.011 passent (8/8 avec l'admission
|
||
Fabric), puis la suite progression/carte/Demeure/minage/construction/inventaire/
|
||
cycles passe à **45/45**. Ils couvrent notamment :
|
||
|
||
- Inventaire réellement rempli de 54 piles avant passage ; récupération dans
|
||
le menu natif, équipement et coffre de l'Ender conservés.
|
||
- Retour à 3/3/3 sans soin offert, XP zéro, nouvel achat possible et ancien
|
||
paquet d'achat refusé grâce à la révision de cycle.
|
||
- Identité, statistiques, observations Atlas et influence Demeure conservées.
|
||
- Décision de fin écrite puis relecture d'un ancien fichier joueur ; après une
|
||
seconde sauvegarde, l'XP et les achats du nouveau cycle ne sont plus remis
|
||
à zéro. L'option de conservation XP est prise dans la décision enregistrée.
|
||
- Mort ordinaire après New Game+ : même progression, prestige et faction.
|
||
- Création, invitations par pseudo/UUID, contribution d'un membre, changement
|
||
de responsable, conteneurs ouverts et mode spectateur refusés.
|
||
|
||
Le test de reprise a d'abord détecté un problème de fixture : chaque joueur
|
||
simulé possède un nouveau profil d'authentification, que Minecraft rétablit au
|
||
chargement. La fixture de reconnexion utilise maintenant le même UUID.
|
||
|
||
Le parcours client natif `Cycle011ClientChecks` est compilé : ouvert depuis
|
||
le menu pause, cycle verrouillé, aperçu/annulation, passage confirmé, création
|
||
et journal, à deux échelles GUI. **Il n'a pas été exécuté graphiquement : le
|
||
Mac est verrouillé. Aucun rendu beta.011 n'est déclaré vérifié.**
|
||
|
||
La commande de livraison est :
|
||
|
||
```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
|
||
```
|
||
|
||
Les logs restent ignorés dans `build/cycle011-delivery-final.log`,
|
||
`build/cycle011-smoke.log` et `build/cycle011-client-final-compile.log`.
|
||
La commande finale réussit en **3 min 55 s**, avec les 45 tests natifs et
|
||
les contrôles purs. Le reçu `build/cycle011-artifact.json` confirme l'intégrité
|
||
ZIP, l'identité des JAR compilés et embarqués, les versions beta.011, les
|
||
87 libellés FR/EN des cycles, les dépendances exactes et les assets conservés.
|
||
Les exports beta.003–010 gardent leurs empreintes précédentes.
|
||
|
||
Artefact local : `build/Sanctuary-beta.011.mrpack` — 2 479 614 octets.
|
||
SHA-256 : `dae0d1fbd8f410fd73b2d3053ef0f17539e24639c3d338ce84dbfca6e4f43ec0`.
|
||
|
||
L'export local ne publie pas le canal packwiz et ne modifie aucune instance Prism.
|
||
|
||
## Essai en jeu
|
||
|
||
Installer la même beta.011 côté client et serveur. Dans un monde de test,
|
||
`/experience add @s 1000 levels` permet à un opérateur de tester les achats
|
||
sans attendre. Acheter les quarante rangs des six compétences dans le Blocodex,
|
||
puis ouvrir **Progression → Cycle**. Acheter les aptitudes reste facultatif.
|
||
Remplir aussi les dernières rangées avant de confirmer pour vérifier leur
|
||
récupération. Un second joueur peut rejoindre la faction via son invitation
|
||
sans avoir lui-même fait de New Game+.
|
||
|
||
Les invitations et les actions de faction se trouvent dans **Monde → Factions**,
|
||
l'historique dans **Monde → Journal des cycles et factions**. Les montants
|
||
s'éditent dans `config/sanctuary/cycle-factions.json`, serveur arrêté : `reward`,
|
||
`creationCost`, `initialCapacity`, `expansionCost`, `maxMembers`, `keepXp`.
|
||
Le prestige reste toujours le nombre de cycles terminés. Le journal est borné
|
||
à 100 000 événements / 16 Mio ; il refuse d'effacer les anciennes archives
|
||
pour faire de la place. Une future rotation nécessitera son propre contrat.
|
||
|
||
Le journal fournit une ontologie locale (`sanctuary:cycle_completed`, `sanctuary:faction_*`) ; aucune
|
||
connexion au site ni distribution de droits opérateur n'est incluse.
|