Compare commits
60
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ea1d84160d | ||
|
|
7ca566292f | ||
|
|
0c68545b63 | ||
|
|
4e2b120bf2 | ||
|
|
352c166b6d | ||
|
|
f3b559b23b | ||
|
|
5869f85ec3 | ||
|
|
e5df72bdbe | ||
|
|
163618ed54 | ||
|
|
de6e11848a | ||
|
|
303210124e | ||
|
|
980544e279 | ||
|
|
7ef4d51a59 | ||
|
|
7b56c3cd78 | ||
|
|
bb61547b07 | ||
|
|
ebd35184b7 | ||
|
|
359f49792b | ||
|
|
4cbf350e01 | ||
|
|
03935e9c89 | ||
|
|
72c709ebc7 | ||
|
|
addc4bb4db | ||
|
|
228a953475 | ||
|
|
91db17450a | ||
|
|
36941f611f | ||
|
|
9dd63f683a | ||
|
|
60bc773b80 | ||
|
|
9fd380b782 | ||
|
|
ca5e350e4a | ||
|
|
feaf9ca62c | ||
|
|
a60937f77d | ||
|
|
930719d75e | ||
|
|
394e22d805 | ||
|
|
ed11cd77a5 | ||
|
|
d78d39cd1b | ||
|
|
77fdabfb4d | ||
|
|
fb8705369e | ||
|
|
c3d1443732 | ||
|
|
1967342247 | ||
|
|
89db24d7c2 | ||
|
|
bad2bdb0d1 | ||
|
|
098a5aa1bd | ||
|
|
8b1ae25256 | ||
|
|
9674e7f3c5 | ||
|
|
4e00f028ec | ||
|
|
584a075663 | ||
|
|
45ea66987f | ||
|
|
af18f6e014 | ||
|
|
34cdcfd00e | ||
|
|
679c0f8a5f | ||
|
|
c0b6b14e89 | ||
|
|
2734c2383a | ||
|
|
74dc1265a8 | ||
|
|
678d77fb91 | ||
|
|
97c601cd7f | ||
|
|
a93e261120 | ||
|
|
72f1cf50ae | ||
|
|
6821f6ee12 | ||
|
|
85d274f2ef | ||
|
|
235e3c08b7 | ||
|
|
697e4a205f |
@@ -2,6 +2,9 @@
|
||||
|
||||
Ce dépôt contient le pack Sanctuary et ses mods. Lire `README.md`, puis le ticket concerné.
|
||||
La vision est dans `docs/vision.md` ; elle décrit aussi des fonctionnalités futures.
|
||||
Pour développer/livrer le site, packwiz, la Beta dédiée et Prism local, lire
|
||||
`docs/updates.md`. La compétence personnelle `sanctuary-updates` mémorise les
|
||||
chemins et accès propres au poste ; ne pas déduire une publication d'un simple push.
|
||||
|
||||
- Avant une modification, lire l'état Git et préserver les changements existants.
|
||||
- Un ticket correspond à un résultat jouable ou vérifiable et à une branche `codex/<sujet>`.
|
||||
|
||||
+113
@@ -1,3 +1,116 @@
|
||||
# beta.293 — Happy Creepers, logo packwiz et mods facultatifs
|
||||
|
||||
- Intégration de la branche `codex/happy-creepers` avec les baleines beta.290.
|
||||
- Logo Sanctuary pendant packwiz et outils prêts dans le ZIP Prism.
|
||||
- Simple Voice Chat, Bobby facultatif, Lithium et Entity Culling épinglés pour 26.3.
|
||||
- Même canal et même instance Prism, profils client/serveur et sauvegardes conservés.
|
||||
- [Contrat et reçu de livraison](docs/release-beta293.md).
|
||||
|
||||
# beta.290 — Baleine fantôme volante
|
||||
|
||||
- Import de l’IA, du modèle animé, de la texture et des effets de la baleine Sanctuary 26.2.
|
||||
- Deux baleines chargées pour le serveur entier, toutes dimensions et sources d’apparition comprises.
|
||||
- Œuf créatif personnalisé depuis la texture native `egg.png` de Minecraft 26.3, silhouette et ombres conservées.
|
||||
- Refus d’un troisième œuf avant consommation, libellés FR/EN et calendrier propre à chaque serveur.
|
||||
- [Contrat et vérifications](docs/flying-whale-beta290.md).
|
||||
|
||||
# beta.278 — Duel Battle pour un claim consenti
|
||||
|
||||
- Proposition depuis le clic droit d’un claim déjà revendiqué ; propriétaire et challenger valident le même enjeu.
|
||||
- Challenger ayant habité le chunk, propriétaire connecté, Carte active et disponibilité Battle contrôlés côté serveur.
|
||||
- Battle privé à deux joueurs : consentement sur le claim, puis confirmations Prêt natives ; aucun tiers admis.
|
||||
- Transfert du seul claim au vainqueur, avec l’échéance de protection conservée et actualisation de la carte/minage.
|
||||
- Refus, annulation avant lancement, égalité et interruption sans résultat durable ne transfèrent rien.
|
||||
- Journal additif de consentement/résultat, application atomique et reprise idempotente ; anciens formats conservés.
|
||||
- Interface de lecture et acceptation FR/EN, enjeu explicite dans Battle, navigation corrigée entre propositions.
|
||||
- [Contrat et vérifications](docs/claim-battle-beta278.md).
|
||||
|
||||
# beta.277 — Claims liés à Demeure
|
||||
|
||||
- Habitation Demeure obligatoire avant de revendiquer un chunk libre ; simple traversée insuffisante.
|
||||
- Priorité à l’habitant le plus influent, avec départage par l’ordre des premières traces en cas d’égalité.
|
||||
- Un habitant plus influent peut prendre le spot tant qu’il n’a pas été revendiqué ; aucun transfert automatique après acquisition.
|
||||
- Vérification serveur avant réservation ou débit, et sauvegarde des traces avant achat.
|
||||
- Carte : condition expliquée, nom/couleur du joueur prioritaire, action bloquée quand nécessaire et actualisation du terrain libre.
|
||||
- Claims antérieurs, protections, tarifs et formats de sauvegarde conservés ; aucun délai supplémentaire ni duel ajouté.
|
||||
- [Règles et vérifications](docs/claim-demeure-beta277.md).
|
||||
|
||||
# beta.276 — Contours CTM et nouvelle protection des claims
|
||||
|
||||
- Propriétés sans protection visibles par leur contour, aux couleurs de leur propriétaire.
|
||||
- Contours raccordés sur les côtés et angles, sans frontières entre chunks d’un même joueur.
|
||||
- Fond coloré sur les chunks protégés ; contour conservé après expiration.
|
||||
- Actualisation des contours voisins après un achat, dans l’Atlas et l’aperçu de Pause ; masquage conservé.
|
||||
- Protection : 8 saphirs par chunk pour trois jours de serveur en marche ; renouvellements ajoutés au temps restant.
|
||||
- Durées déjà achetées et reçus de sept jours en attente conservés, sans changement de schéma.
|
||||
- Libellés FR/EN et légende incluant aussi les propriétés sans protection.
|
||||
- [Contrat et vérifications](docs/claim-contours-beta276.md).
|
||||
|
||||
# beta.275 — Habitant et menu Pause centrés sur l’Atlas
|
||||
|
||||
- Retrait du conseil d’arrivée « première propriété gratuite » et du bouton Propriété d’Habitant.
|
||||
- Propriétés verrouillées côté serveur et client avant l’aptitude Carte achetée et active ; ancien accès carte locale bloqué.
|
||||
- Habitant : statistiques sans fond à gauche, personnage centré, biographie à droite ; navigation Factions / Familier.
|
||||
- Activité et Historique retirés de cette fiche ; données conservées.
|
||||
- Durée de jeu en jours, heures, minutes et secondes entières, sans minutes décimales.
|
||||
- Pause sans Carte conservée ; avec Carte, Gazette et Tableau dans leurs colonnes latérales, carte au centre.
|
||||
- Aventure à gauche et Communauté à droite au-dessus de la carte, y compris en grande vue ; Partie et ses actions natives dessous.
|
||||
- Mise à jour automatique de Pause lors du déblocage ou de la désactivation de Carte ; droits et protections acquis conservés.
|
||||
- [Contrat et vérifications](docs/menu-atlas-beta275.md).
|
||||
|
||||
# beta.274 — Calques de territoire continus
|
||||
|
||||
- Fiche Habitant conservée et claims actuels accessibles, selon la clarification du créateur.
|
||||
- Refonte des règles de propriété, habitation préalable, départage par Battle et nouveau tarif consignés pour la reprise.
|
||||
- Demeure sans cadres de chunks ; intensité liée à la part relative d’influence et actualisée quand celle-ci change.
|
||||
- Protections actives rendues en couleur unie dans la même texture de pixels que Demeure, sans bouclier ni pointillés.
|
||||
- Zones protégées adjacentes d’un propriétaire raccordées ; légende compacte couleur / personnage, avec masquage conservé.
|
||||
- Aperçu de Pause teinté directement dans ses pixels, avec brouillard et vide conservés.
|
||||
- Infobulle Demeure « Présence et influence d’habitation » en FR/EN ; retrait de « aucun claim ni protection ».
|
||||
- Aucun changement des données, droits, prix ou durées ; aucune attribution depuis Demeure ni aucun transfert par duel automatique.
|
||||
- [Contrat et vérifications](docs/demeure-overlay-beta274.md).
|
||||
|
||||
# beta.273 — Claims aux couleurs de leurs propriétaires
|
||||
|
||||
- Teinte et bordure utilisent la couleur persistante Hello World du propriétaire, y compris déconnecté.
|
||||
- Protection active : bordure pleine et bouclier ; sans protection : bordure en pointillés.
|
||||
- Bouton Propriétés : oui/non, partagé avec l’aperçu de Pause ; clic droit conservé quand les claims sont masqués.
|
||||
- Apparition automatique avec les tuiles de la carte proche, de l’Atlas et de l’aperçu de Pause.
|
||||
- Achats actualisant le claim visible ; expiration modifiant le style sans retirer la propriété.
|
||||
- Légende et survol FR/EN avec nom et durée restante ; terrain inconnu non révélé.
|
||||
- Aucun changement du registre, des prix, de la durée ou des droits.
|
||||
- [Contrat et vérifications](docs/claim-map-beta273.md).
|
||||
|
||||
# beta.272 — Claims et protection sur la carte
|
||||
|
||||
- Clic droit sur un chunk : panneau de revendication ou de protection sur la carte, sans grille ni changement de page.
|
||||
- Propriété ouvre directement la carte ; terrain proche visible dès Hello World, Atlas complet conservant ses prérequis.
|
||||
- Cinq chunks gratuits par joueur, puis 100 points d’XP supplémentaires à chaque nouveau claim.
|
||||
- 64 saphirs par chunk ajoutent sept jours de serveur en marche ; aucun temps décompté pendant l’arrêt.
|
||||
- Minage ×2 pour le propriétaire et ×0,5 pour les autres pendant la couverture ; pose et interactions ordinaires.
|
||||
- Nouveau registre séparé, achats avec reçu natif et migration volontaire des anciens volumes remboursant leurs extensions.
|
||||
- Stabilisation de la sauvegarde des statistiques à la fermeture face au nettoyage de déconnexion.
|
||||
- [Contrat, migration et vérifications](docs/chunk-claims-beta272.md).
|
||||
|
||||
# beta.271 — fiche Habitant, statistiques et activité
|
||||
|
||||
- Combats rétabli dans Communauté sous Habitant ; Story retiré de Pause.
|
||||
- Navigation Propriété, Factions et Familier en haut ; personnage aéré à gauche et biographie à droite.
|
||||
- Six compteurs personnels sous la biographie, lus dans Minecraft et le Blocodex.
|
||||
- Activité sous le personnage jusqu’en bas, avec défilement et bouton Historique dans son pied de panneau.
|
||||
- Publications personnelles, progrès et progression réunis sans nouveau format de sauvegarde.
|
||||
- Aperçu du familier retiré d'Habitant ; réglages et consentement regroupés dans sa page dédiée.
|
||||
- [Contrat, sources et vérifications](docs/inhabitant-menu-beta271.md).
|
||||
|
||||
# beta.270 — première propriété d’habitant
|
||||
|
||||
- Faction et Battle déplacés de Pause vers la fiche Habitant, avec un accès Propriété.
|
||||
- Une réservation gratuite après Hello World, dans un volume fini indépendant des chunks.
|
||||
- Quatre extensions de 100 à 400 points d’XP, sauvegardées avec un reçu natif.
|
||||
- Contrôles serveur du minage, de la pose et des interactions des autres joueurs ; terrains libres jouables.
|
||||
- Menu natif FR/EN, commandes `/sanctuary property`, `propriete` et `propriété`, aperçu sans écriture de terrain.
|
||||
- [Contrat, sauvegarde additive et limites de protection](docs/property-beta270.md).
|
||||
|
||||
# beta.172 — cartes de horde utilisables en jeu
|
||||
|
||||
- Suppression de la restriction au cercle laboratoire : une carte peut ouvrir
|
||||
|
||||
@@ -1,11 +1,596 @@
|
||||
# Sanctuary
|
||||
|
||||
[Dernière release : beta.321](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.321) ·
|
||||
[Reçu de livraison](docs/release-beta321.md) ·
|
||||
[Installation et mises à jour](docs/packwiz.md).
|
||||
|
||||
Les **quatre expansions validées sont disponibles dans Sanctuary normal** :
|
||||
Nord glacial, Sud des canyons, Ouest océanique et Est volcanique.
|
||||
Créer un monde **Sanctuary** en Petit, Moyen ou Grand, puis activer les ancres
|
||||
correspondantes. Le module Sanctuary Test n’est pas requis.
|
||||
[Intégration et vérification du pack beta.224](docs/four-islands-base224.md).
|
||||
|
||||
## beta.324 — regroupement des nouveautés
|
||||
|
||||
[Lot intégré et validé](docs/integration-beta324.md) : poules colorées rares,
|
||||
aptitudes rééquilibrées avec conservation des anciens achats, recherche JEI
|
||||
corrigée et séchoir beta.322 à deux aliments. **221 tests serveur** et parcours
|
||||
commun **Vulkan avec Sodium** réussis. [Notes de version](docs/notes-beta324.md).
|
||||
|
||||
## beta.322 — séchoir à deux aliments (préparation locale)
|
||||
|
||||
[IA-14 : séchoir et fabrications](docs/drying-rack-beta322.md). Deux aliments
|
||||
indépendants, affichage plus grand et droit, séchoir sans fil et moulin sans
|
||||
tailleur de pierre. Le surplus des anciens séchoirs est conservé en attente
|
||||
avec sa progression. Préparation sur la même branche, sans publication.
|
||||
|
||||
## beta.321 — carte adaptative et modèles culinaires livrés
|
||||
|
||||
[Livraison vérifiée](docs/release-beta321.md) : serveur Beta, canal client/serveur
|
||||
et téléchargement du site en beta.321. Carte de surface en extérieur et coupe
|
||||
à hauteur du joueur en intérieur, y compris dans Pause ; baratte ouverte en
|
||||
bois, saucissons en pavés et noms FR/EN corrigés. **55 tests serveur**, packs
|
||||
vérifiés et JAR identique aux parcours de préparation **Vulkan avec Sodium**.
|
||||
La même instance Prism récupère la mise à jour à son prochain lancement.
|
||||
|
||||
## beta.320 — cuisine, carte et activité saisonnière livrées
|
||||
|
||||
[Regroupement des trois chantiers](docs/integration-beta320.md) : cuisine directe
|
||||
et baratte, carte et aperçu Pause à la hauteur exacte du joueur, insectes
|
||||
adaptés à la saison, au soleil et à la météo. [Livraison vérifiée](docs/release-beta320.md) :
|
||||
serveur Beta actif, canal client/serveur et téléchargement du site en beta.320.
|
||||
La même instance Prism suivra ce canal à son prochain lancement.
|
||||
**241 tests serveur**, trois parcours réunis sous **Vulkan avec Sodium** et
|
||||
packs assemblés ; [reçu de vérification](docs/integration-beta320-verification.json).
|
||||
|
||||
## beta.319 — cuisine directe et baratte (intégrée au lot beta.320)
|
||||
|
||||
[IA-12 : cuisine directe, chaudron Minecraft et semences naturelles](docs/cuisine-beta319.md).
|
||||
Les préparations artificielles quittent les fabrications, le créatif et JEI ;
|
||||
les anciens stocks restent cuisinables. La [baratte](docs/wiki/alimentation/laitages.md)
|
||||
fait reposer le lait pour la crème, puis travaille beurre, crème fouettée et
|
||||
beurre aux herbes. Ce chantier est livré avec beta.320 ; les anciennes
|
||||
préparations stockées restent utilisables.
|
||||
|
||||
## beta.318 — récoltes et recettes séchées livrées
|
||||
|
||||
[Les 18 nouvelles recettes et leur fonctionnement](docs/dried-cuisine-beta318.md) :
|
||||
pains, biscuits, sandwichs, plats au chaudron, salade, dessert, provisions et épices.
|
||||
Le saucisson pimenté se prépare, sèche puis se pose pour partager quatre tranches.
|
||||
Manger épicé produit deux petits coups visuels et sonores sans dégât.
|
||||
[Ingrédients, quantités, appareils et durées](docs/wiki/alimentation/sechoir.md).
|
||||
[Livraison complète](docs/release-beta318.md) : serveur Beta, téléchargement du
|
||||
site et même instance Prism à jour sur le canal public. Build et packs vérifiés,
|
||||
**204 tests serveur**, **7 tests du site** et binaire du parcours **Vulkan avec Sodium**.
|
||||
|
||||
## beta.317 — produits séchés (préparation locale)
|
||||
|
||||
[Viande, poissons, fruits, herbes et vanille au séchoir](docs/drying-foods-beta317.md) :
|
||||
15 recettes avec leurs propres durées, 12 objets supplémentaires, quatre crochets
|
||||
indépendants. Les herbes et piments séchés rejoignent la cuisine existante.
|
||||
[Recettes et 18 propositions de combinaisons](docs/wiki/alimentation/sechoir.md).
|
||||
Même branche locale, sans publication ni installation. Build et packs vérifiés,
|
||||
**179 tests serveur** et parcours **Vulkan avec Sodium** réussis.
|
||||
|
||||
## beta.316 — découverte alimentaire en survie (préparation locale)
|
||||
|
||||
[IA-09 : récolter et rapporter les premières semences](docs/foraging-beta316.md).
|
||||
Plantes sauvages, fruitiers, café et vanille répartis par habitat sur les neuf îles ;
|
||||
solutions de découverte dans les terrains déjà explorés, sans repeuplement.
|
||||
[Guide et pages des îles](docs/wiki/alimentation/README.md) ·
|
||||
[Planche illustrée](docs/wiki/alimentation/planche.html). Même branche locale ;
|
||||
aucune publication ou installation par ce ticket.
|
||||
Build et packs vérifiés, **85 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis ; premières récoltes et sauvegarde sur le preset Sanctuary actuel.
|
||||
|
||||
## beta.315 — cuisine et agriculture livrées
|
||||
|
||||
[Livraison complète vérifiée](docs/release-beta315.md) : les incréments locaux
|
||||
beta.299 à beta.315 sont publiés et installés sur la Beta dédiée, le site et
|
||||
la même instance Prism. **187 tests serveur** et artefacts vérifiés ;
|
||||
sauvegardes et réglages conservés. [Textures modifiables](docs/itsalive-textures-export-beta315.md).
|
||||
|
||||
### Saucisson posé en tranches
|
||||
|
||||
[Poser le saucisson séché et partager quatre tranches](docs/sausage-slices-beta315.md).
|
||||
Même objet après le séchoir, quatre orientations, modèle qui raccourcit et
|
||||
chair visible sur la coupe. Deux points de nourriture par tranche, sons natifs
|
||||
et parts restantes conservées après sauvegarde. Préparation locale vérifiée avant cette publication. Build et packwiz, **134 tests serveur** et deux
|
||||
parcours **Vulkan avec Sodium** réussis : séchoir, pose payée, quatre prises,
|
||||
sauvegarde orientée, seize états de rendu et sons natifs.
|
||||
|
||||
## beta.314 — fromage à partager et vins de garde (préparation locale)
|
||||
|
||||
[Poser et partager le fromage, choisir la qualité du vin](docs/cheese-wine-beta314.md).
|
||||
Le fromage garde son objet historique et se mange en sept parts posées,
|
||||
comme un gâteau. Le vin jeune garde ses trois minutes de fermentation ;
|
||||
le laisser dans le tonneau donne du vin de table après **un jour réel**,
|
||||
de réserve après **trois jours** et un grand cru après **sept jours**,
|
||||
même jeu fermé. Quatre objets/qualités, HUD FR/EN, recettes JEI et sortie
|
||||
compatible avec les entonnoirs. Même branche locale, sans publication ou
|
||||
installation. Build et packwiz, **126 tests serveur** et parcours **Vulkan
|
||||
avec Sodium** réussis : sept parts, face de coupe, sauvegarde, jours réels,
|
||||
qualités, collecte et consommation.
|
||||
|
||||
## beta.313 — saucisson au séchoir (préparation locale)
|
||||
|
||||
[Préparer le saucisson, puis le suspendre cinq minutes](docs/drying-rack-beta313.md).
|
||||
Séchoir en bois sans combustible ni menu, quatre crochets indépendants,
|
||||
pluie et immersion qui suspendent le séchage, toit protecteur et reprise
|
||||
après sauvegarde. Recettes à l’établi, modèles cubiques aux textures vanilla,
|
||||
HUD FR/EN et découverte dans JEI. Même branche locale, sans publication ou
|
||||
installation. Build et packwiz, **112 tests serveur** et parcours
|
||||
**Vulkan avec Sodium** réussis : fabrication, quatre crochets, humidité,
|
||||
sauvegarde, collecte et consommation.
|
||||
|
||||
## beta.312 — recettes répétées au même chaudron (préparation locale)
|
||||
|
||||
[Un premier coup de bâton mémorise la recette](docs/cauldron-repeat-beta312.md).
|
||||
Réapprovisionner avec les mêmes ingrédients et servir les plats ne demandent
|
||||
plus de recommencer. Les ajouts en cours attendent leur lot complet ; la
|
||||
sortie s’accumule et une sortie pleine attend de la place. Maj-clic à main
|
||||
vide arrête la série. Même branche locale, sans publication ou installation.
|
||||
Build et packwiz, **100 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis : quatre lots après un geste, réassort, service, rechargement et arrêt.
|
||||
|
||||
## beta.311 — chaudron préparé puis remué (préparation locale)
|
||||
|
||||
[Ajouter les ingrédients, puis remuer avec un bâton](docs/cauldron-beta311.md).
|
||||
Le chaudron attend le geste, conserve les mélanges incomplets et rend le seau
|
||||
du lait seulement à la cuisson terminée. Toute modification demande de
|
||||
remuer à nouveau ; les restes ne lancent pas une nouvelle recette. Sons
|
||||
natifs discrets à l’ajout, au geste, pendant la cuisson et au service.
|
||||
Même branche locale, sans publication ou installation. Build et packwiz,
|
||||
**89 tests serveur** et parcours **Vulkan avec Sodium et contrôle audio**
|
||||
réussis.
|
||||
|
||||
## beta.310 — poêles en ligne et piles de quatre (préparation locale)
|
||||
|
||||
[Une recette commune par pile de une à quatre poêles](docs/pan-stacks-beta310.md).
|
||||
Chaque portion paie ses ingrédients, y compris les seaux de lait conservés
|
||||
dans des réserves natives. Des piles voisines peuvent cuire des plats
|
||||
différents, chacune avec sa chaleur par-dessous. Contenu visible, HUD FR/EN,
|
||||
casse et continuité des anciennes cases documentés. Même branche locale,
|
||||
sans publication ou installation. Build et packwiz, **76 tests serveur**
|
||||
et parcours **Vulkan avec Sodium** réussis.
|
||||
|
||||
## beta.309 — une seule sortie de cuisinière (préparation locale)
|
||||
|
||||
[La cuisinière garde une seule sortie, comme un four](docs/oven-single-output-beta309.md).
|
||||
La case d'aperçu disparaît. La grille se remplit à la main ; un entonnoir
|
||||
dessous peut récupérer les plats cuits. Consommation en fin de cuisson,
|
||||
annulation des modifications et poursuite avec le menu fermé conservées.
|
||||
Même branche locale, sans publication ou installation.
|
||||
Build et packwiz, **63 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis ; sortie unique, entonnoirs et décalage du feu vérifiés.
|
||||
|
||||
## beta.308 — cuisinière automatique (préparation locale)
|
||||
|
||||
[Grille de préparation et cuisson comme un four](docs/oven-beta308.md) :
|
||||
aperçu séparé, ingrédients consommés uniquement en fin de cuisson, annulation
|
||||
si la grille change et lots successifs avec le menu fermé. Treize recettes de
|
||||
cuisine, combustible natif et sortie réservée aux plats terminés.
|
||||
Même branche locale, sans publication ou installation.
|
||||
Build et packwiz, **63 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis : grille modifiable, annulation, lots avec le menu fermé, menus FR/EN,
|
||||
sortie et rechargement réel.
|
||||
|
||||
## beta.307 — recette du moulin manuel (préparation locale)
|
||||
|
||||
[La recette remplace la redstone par un bâton](docs/mill-recipe-beta307.md)
|
||||
pour représenter la poignée, avec les trois dalles de pierre lisse, deux
|
||||
lingots de cuivre et un tailleur de pierre. Elle rejoint la catégorie Divers
|
||||
du livre de fabrication natif. Même branche locale, sans publication ou
|
||||
installation.
|
||||
Build et packwiz, **52 tests serveur** et comparaison des archives réussis.
|
||||
|
||||
## beta.306 — moulin manuel (préparation locale)
|
||||
|
||||
[Le moulin fonctionne comme le tailleur de pierre](docs/mill-beta306.md) :
|
||||
entrée et résultat immédiat, sans combustible. Prendre le résultat consomme
|
||||
l'ingrédient ; Maj-clic traite les lots disponibles. Le feu disparaît du menu,
|
||||
avec un bref mouvement mécanique à chaque utilisation. Nom **Moulin / Mill**,
|
||||
neuf recettes conservées et anciens objets stockés récupérables.
|
||||
Même branche locale, sans publication ou installation.
|
||||
Build et packwiz, **52 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis : prises natives, clic droit, lots, menus FR/EN et rechargement.
|
||||
|
||||
## beta.305 — écrasement direct des fruits (préparation locale)
|
||||
|
||||
[Les blocs de tomates, raisins et olives s'écrasent en sautant dessus](docs/crushing-beta305.md) :
|
||||
huit paliers descendants, résidus progressifs et neuf portions au total.
|
||||
Un piston libère immédiatement le reste ; le super piston traite jusqu'à
|
||||
27 blocs sur sa course complète. La presse quitte fabrication, créatif et JEI.
|
||||
Même branche locale, sans publication ou installation.
|
||||
Build et packwiz, **78 tests serveur**, parcours d'écrasement et régression
|
||||
complète du super piston sous **Vulkan avec Sodium** réussis.
|
||||
|
||||
## beta.304 — appareils culinaires (préparation locale)
|
||||
|
||||
[Six appareils et 80 recettes physiques portés en 26.3](docs/kitchen-beta304.md) :
|
||||
poêle, chaudron vanilla qui devient une marmite, cuisinière 3 × 3, tonneau de
|
||||
fermentation, moulin et pressoir à piston. Récipients conservés, lots limités,
|
||||
contenus visibles et progression sauvegardée. La fermentation instantanée de
|
||||
beta.303 cède la place au tonneau. Même branche locale, sans publication.
|
||||
Les dix nouvelles entrées rejoignent Nourriture et boissons, sans nouvel onglet.
|
||||
Build et packwiz, **72 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis : appareils, JEI, menus FR/EN GUI 2/3/4, sauvegardes et régressions
|
||||
cuisine/agriculture.
|
||||
|
||||
## beta.303 — recettes de cuisine (préparation locale)
|
||||
|
||||
[Les 92 recettes alimentaires de la 26.2 utilisent les nouvelles récoltes](docs/cuisine-beta303.md).
|
||||
Salades, soupes, plats, pains, gâteaux, boissons et ingrédients intermédiaires.
|
||||
Préparation à la table, cuisson au four/fumoir ; transformations de fermentation
|
||||
adaptées en fabrication manuelle immédiate. 129 objets dans Nourriture et
|
||||
boissons, sans nouvel onglet. Même branche locale, sans publication.
|
||||
Les appareils culinaires restent dans leurs tickets.
|
||||
Build, packwiz et **55 tests serveur** réussis. Parcours **Vulkan avec Sodium**
|
||||
validé : fabrication, fumoir, 196 étapes dans JEI, 129 modèles, onglet natif
|
||||
FR/EN GUI 2/3/4 et rechargement ; régression agricole réussie.
|
||||
|
||||
## beta.302 — vanille en 16 × 16 (préparation locale)
|
||||
|
||||
[Les quatre stades de vanille passent en 16 × 16 pixels](docs/vanilla-16px-beta302.md).
|
||||
Dessin simplifié pour cette résolution, feuillage, fleurs et gousses sur un
|
||||
seul plan contre le tronc. Même branche `codex/itsalive-26-3`, sans publication.
|
||||
Dimensions vérifiées dans le JAR et dans l'atlas chargé par Minecraft.
|
||||
Build et packwiz, 46 tests serveur et parcours Vulkan avec Sodium réussis.
|
||||
|
||||
## beta.301 — vanille grimpante (préparation locale)
|
||||
|
||||
[La vanille s'attache aux troncs comme les lianes et pousse vers le haut](docs/vanilla-beta301.md).
|
||||
Faces fines contre l'écorce, nouvelle texture réunissant feuilles et gousses
|
||||
sur un seul plan, appui requis pour chaque segment, maturité et poudre d'os.
|
||||
Elle s'arrête aux obstacles et à la fin du tronc.
|
||||
Bouture dans Naturel, gousses dans Nourriture et boissons, sans nouvel onglet.
|
||||
Même branche locale `codex/itsalive-26-3`, sans publication ou installation.
|
||||
Build et packwiz, **46 tests serveur** et parcours **Vulkan avec Sodium**
|
||||
réussis, avec contrôle du plan unique et rechargement réel de 24 segments.
|
||||
|
||||
## beta.300 — cultures, arbres fruitiers et caféier (préparation locale)
|
||||
|
||||
[Les 20 cultures d'It's Alive ! deviennent jouables en 26.3](docs/agriculture-beta300.md),
|
||||
avec le citronnier, l'olivier et le caféier. Les 45 objets rejoignent les
|
||||
onglets vanilla Naturel et Nourriture et boissons, sans nouvelle page créative.
|
||||
Semences, croissance, récoltes pérennes, plants hauts, riz immergé, fruits et
|
||||
grains de café. Les textures fournies sont conservées, les libellés sont FR/EN.
|
||||
Quinze cultures, dont l'oignon et l'ail, utilisent deux plans en croix pour
|
||||
mieux montrer le pied ; les PNG restent intacts.
|
||||
Même branche locale `codex/itsalive-26-3` ; apparition naturelle, vanille
|
||||
grimpante et appareils culinaires restent dans leurs prochains tickets.
|
||||
Aucune publication ni mise à jour d'installation.
|
||||
Build, **34 tests serveur**, packwiz et parcours **Vulkan avec Sodium**
|
||||
réussis : modèles, onglets vanilla FR/EN GUI 2/3/4 et rechargement réel.
|
||||
|
||||
## beta.299 — textures d'It's Alive ! (préparation locale)
|
||||
|
||||
[Premier lot de la refonte cuisine et agriculture pour 26.3](docs/itsalive-26-3.md) :
|
||||
343 textures importées, dont les 38 PNG fournis prioritaires et conservés
|
||||
sans retouche. Cultures, citronnier, olivier, caféier, ingrédients et appareils
|
||||
disposent de leurs sources graphiques ; leur fonctionnement reste à porter.
|
||||
Le suivi conserve les tickets chaudron, plats ratés, séchoir, poêle, vanille
|
||||
grimpante et cuisinière. Branche locale `codex/itsalive-26-3`, sans publication.
|
||||
Build, 13 tests serveur ciblés, contenu du JAR et assemblage packwiz vérifiés.
|
||||
|
||||
## beta.298 — normales de l'ancre corrigées
|
||||
|
||||
[Retrait du petit cadre résiduel dans la passe PBR](docs/media-anchor-normals-beta298.md).
|
||||
Le modèle invisible de l'ancre ne laisse plus de reflet sur la vidéo
|
||||
avec les shaders Sanctuary activés.
|
||||
[Livraison vérifiée](docs/release-beta298.md) : serveur Beta, site et même
|
||||
instance Prism à jour ; écrans existants et réglages conservés.
|
||||
|
||||
## beta.297 — correctifs des cadres disponibles
|
||||
|
||||
[Menu de taille à la pose, lecteur au Maj + clic droit et cadre en volume](docs/media-frame-fixes-beta297.md).
|
||||
Retrait du repère rouge et du contour de sélection du bloc invisible.
|
||||
Le redimensionnement reste accessible par Taille / Size dans le lecteur.
|
||||
[Livraison vérifiée](docs/release-beta297.md) : serveur Beta, site et même
|
||||
instance Prism à jour, sauvegardes et réglages conservés.
|
||||
|
||||
## beta.296 — écrans partagés disponibles pour essai
|
||||
|
||||
[Cadres de redstone, taille libre et menu Dream Displays](docs/media-beta296.md).
|
||||
Un seul cadre pour poser une ancre, agrandissement gratuit, vidéo commune
|
||||
et acoustique personnelle. Le module Media est inclus dans Sanctuary ; Dream
|
||||
Displays rejoint packwiz côté client et serveur.
|
||||
|
||||
[Livraison complète vérifiée](docs/release-beta296.md) : serveur Beta, site et
|
||||
même instance Prism synchronisés ; 18 tests serveur et parcours à deux clients
|
||||
Vulkan réussis. Sauvegardes et réglages conservés.
|
||||
|
||||
## Étude — écrans et séances partagées
|
||||
|
||||
[Cadrage des cadres de redstone et du streaming collectif](docs/media-displays-study.md) :
|
||||
ancre avec menu de taille, mur complet, image à 16 pixels par bloc
|
||||
et lecteur commun accessible à 16 blocs. Comparaison Dream Displays, extension,
|
||||
fork et moteurs alternatifs, avec limites de synchronisation live et d'acoustique.
|
||||
Étude sur branche dédiée, sans implémentation ni modification du pack.
|
||||
|
||||
[Prototype à deux vrais clients Vulkan](docs/media-playback-prototype.md) :
|
||||
lecture VOD et live HLS contrôlé, traces d'images GPU et audio, avec correction
|
||||
de la collision de couleur Hello World. Le live dérive après reconnexion et
|
||||
le son vidéo ne traverse pas Sound Physics. Outils de développement isolés,
|
||||
aucun cadre Sanctuary ni ajout au pack.
|
||||
|
||||
[Correction expérimentale de synchronisation et d'audio](docs/media-sync-audio-prototype.md) :
|
||||
horloge commune, reprise VOD au bon point de décodage, live HLS daté et sortie
|
||||
audio Minecraft. Réglage personnel « Acoustique des vidéos » pour retirer Sound
|
||||
Physics du flux. Extension isolée sur `codex/media-sync-audio`, avant les cadres.
|
||||
|
||||
[Ancre et cadre ajusté à tout l’écran](docs/media-anchor-prototype.md) : un seul
|
||||
cadre consommé, dimensions libres sans surcoût, **menu natif Dream Displays**
|
||||
conservé pour les flux. Extension expérimentale sur `codex/media-anchor`.
|
||||
|
||||
|
||||
## beta.295 — Serveur Sanctuary dans la liste multijoueur
|
||||
|
||||
[Serveur préenregistré et logo du pack](docs/default-server-beta295.md) :
|
||||
ajout initial de **Sanctuary Beta** sans écraser les favoris personnels,
|
||||
avec icône 64 × 64 également distribuée au serveur. Intègre la simplification
|
||||
de `/sanctuary property`. Build, 18 tests serveur et parcours Vulkan FR/EN
|
||||
réussis. [Livraison complète effectuée](docs/release-beta295.md) : serveur,
|
||||
téléchargement Web et instance Prism historique en beta.295.
|
||||
|
||||
## beta.294 — Une seule commande de propriété (intégrée à beta.295)
|
||||
|
||||
[La commande de propriété garde uniquement son nom anglais](docs/property-command-beta294.md) :
|
||||
`/sanctuary property`, avec `claim`, `protect` et `duel`. Les alias `propriete`
|
||||
et `propriété` sont retirés. Build, **18 tests serveur ciblés** et assemblage
|
||||
du pack réussis lors de la préparation locale. Cette version n’a pas été
|
||||
publiée séparément ; son contenu est livré avec beta.295.
|
||||
|
||||
## beta.293 — mise à jour complète
|
||||
|
||||
[Livraison complète publiée](docs/release-beta293.md) : Happy Creepers de la
|
||||
branche dédiée, baleines fantômes, logo packwiz et quatre mods facultatifs.
|
||||
Serveur Beta, téléchargement Web et même instance Prism synchronisés en
|
||||
**beta.293**, sauvegardes et réglages conservés. Build et 79 tests serveur
|
||||
réussis ; assertions Vulkan réussies, blocage de fermeture de l'outil de test
|
||||
consigné. Réseau vocal contrôlé, essai audible à deux joueurs encore ouvert.
|
||||
|
||||
## beta.292 — voix et mods facultatifs (préparation locale)
|
||||
|
||||
[Simple Voice Chat, Bobby, Lithium et Entity Culling rejoignent le pack](docs/optional-mods-beta292.md).
|
||||
Les quatre restent décochables côté client ; Lithium et la voix rejoignent
|
||||
aussi le profil serveur. Logo packwiz conservé, 46 tests serveur ciblés et
|
||||
parcours Vulkan avec et sans Sodium réussis. Préparation locale, sans publication ni
|
||||
modification de l'instance personnelle. Dozei Stream et Only Fun restent en tickets.
|
||||
|
||||
## beta.291 — logo Sanctuary dans packwiz (préparation locale)
|
||||
|
||||
[Le bandeau fourni s'affiche pendant les téléchargements packwiz](docs/packwiz-logo-beta291.md),
|
||||
dans l'instance Prism préparée. L'installateur embarque le logo et conserve
|
||||
le moteur packwiz officiel. Les [tickets des prochaines intégrations](docs/integrations-mods-next.md)
|
||||
couvrent Simple Voice Chat, Bobby facultatif, Lithium, Entity Culling,
|
||||
Dozei Stream et Only Fun ; ces mods ne sont pas ajoutés dans cette version.
|
||||
Fenêtre FR/EN, contrôles d'archive et deux synchronisations isolées réussis.
|
||||
Construction ciblée avec 13 tests serveur réussie ; un test hérité du quota
|
||||
de baleines reste en échec, détaillé dans le contrat. Aucune publication.
|
||||
|
||||
## beta.290 — baleine fantôme volante (branche locale)
|
||||
|
||||
[Import direct de la baleine 26.2](docs/flying-whale-beta290.md), avec son IA,
|
||||
son rendu nuageux animé et son œuf personnalisé à partir de `egg.png` de
|
||||
Minecraft. Deux baleines chargées au maximum pour le serveur, œuf refusé
|
||||
sans consommation si les places sont prises. Construction, 19 tests serveur
|
||||
et parcours Vulkan avec Sodium réussis. Préparée localement, sans publication
|
||||
ni mise à jour d’installation.
|
||||
|
||||
## beta.289 — mise à jour complète
|
||||
|
||||
[Livraison des zombies et de la lumière portée](docs/release-beta289.md), avec
|
||||
JEI intégré au même JAR pour le client et le serveur. Le téléchargement du
|
||||
site conserve l’instance Prism prête à suivre le canal stable.
|
||||
**Publiée** : serveur Beta, téléchargement Web et instance Prism personnelle
|
||||
synchronisés en beta.289, avec sauvegardes et réglages conservés.
|
||||
[Procédure de développement et de publication](docs/updates.md).
|
||||
Construction client/serveur, **31 tests serveur** et parcours des zombies et
|
||||
familiers sous **Vulkan avec Sodium** réussis pour cette livraison.
|
||||
|
||||
## beta.288 — correction des lumières portées intégrée
|
||||
|
||||
[Le correctif des Dynamic Lights rejoint le pack courant](docs/dynamic-hand-light-beta288.md).
|
||||
Les torches et lanternes tenues en main éclairent le terrain avec Sodium,
|
||||
avec ou sans PBR. Les zombies et les neuf tenues de beta.287 sont conservés.
|
||||
Build, **19 tests serveur** et trois parcours **Vulkan** réussis : éclairage
|
||||
avec/sans Sodium, puis zombies et familiers avec Sodium.
|
||||
[Pack local beta.288](build/Sanctuary-beta.288.mrpack).
|
||||
|
||||
## beta.287 — tenues de zombies et postures
|
||||
|
||||
[Neuf tenues aléatoires et Hunter accroupi](docs/zombie-appearances-beta287.md)
|
||||
pour le zombie classique et les six infectés. Les PNG fournis par le créateur
|
||||
sont choisis aléatoirement par individu et gardés au rechargement, y compris
|
||||
pour les familiers. Tous gardent les bras classiques en avant ; le Hunter
|
||||
conserve sa marche accroupie.
|
||||
Les familiers infectés conservent leur modèle adulte miniature à taille variable.
|
||||
Build, **77 régressions, 19 tests Smoker et 16 tests Hunter** en sessions
|
||||
séparées, ainsi que le parcours **Vulkan**, réussis. Neuf tenues par type,
|
||||
bébé classique, 21 combinaisons de familiers, rééquipement stable et marche/bond
|
||||
du Hunter vérifiés. [Pack local beta.287](build/Sanctuary-beta.287.mrpack).
|
||||
|
||||
## beta.286 — Hunter et bond offensif
|
||||
|
||||
[Sixième infecté](docs/hunter-beta286.md) : préparation accroupie, bond physique
|
||||
vers le joueur et frappe unique au contact. Sa trajectoire reste fixe après
|
||||
le départ : une esquive, un mur ou un plafond peuvent faire rater l’attaque.
|
||||
T-shirt bleu et pantalon anthracite, œuf créatif et familier adulte miniature
|
||||
à taille variable, avec son propre bond offensif sur G.
|
||||
Build, **16 tests Hunter, 19 tests Smoker et 77 régressions**, en sessions séparées,
|
||||
ainsi que le parcours **Vulkan FR/EN GUI 2/3/4**, réussis. Contact contre un vrai
|
||||
joueur, esquive au clavier, atterrissage et trois tailles vérifiés.
|
||||
[Pack local beta.286](build/Sanctuary-beta.286.mrpack).
|
||||
|
||||
## beta.285 — Smoker et lasso
|
||||
|
||||
[Cinquième infecté](docs/smoker-beta285.md) : un lasso physique qui peut rater.
|
||||
Il doit toucher sa cible avant de la ramener vers le Smoker à la vitesse des
|
||||
tyroliennes. Les obstacles sur le corps arrêtent le trajet ; blesser la source
|
||||
ou couper le crochet libère la victime. Tenue gris clair et vert olive, œuf
|
||||
créatif et familier adulte miniature à taille variable, avec son propre lasso.
|
||||
Build, **19 tests Smoker et 77 régressions** en sessions séparées, ainsi que
|
||||
le parcours **Vulkan FR/EN GUI 2/3/4**, réussis. Esquive au clavier, touche
|
||||
réelle, traction imposée du joueur et arrivée vérifiées.
|
||||
[Pack local beta.285](build/Sanctuary-beta.285.mrpack).
|
||||
|
||||
## beta.284 — Boomer et bile
|
||||
|
||||
[Quatrième infecté](docs/boomer-beta284.md) : gerbe de bile en cône,
|
||||
diversion temporaire des zombies déjà présents et éclaboussure à la mort,
|
||||
sans destruction du terrain. Tenue violette, pantalon sable, œuf créatif et
|
||||
familier adulte miniature à taille variable, avec une gerbe qui affaiblit
|
||||
les ennemis et une éclaboussure G qui garde le familier vivant.
|
||||
Build, **68 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4**
|
||||
réussis, avec G, recrutement sauvage, mort et trois tailles vérifiés.
|
||||
[Pack local beta.284](build/Sanctuary-beta.284.mrpack).
|
||||
|
||||
## beta.283 — Spitter et flaque d’acide
|
||||
|
||||
[Troisième zombie spécial](docs/spitter-beta283.md) : le crachat dépose une
|
||||
zone verte persistante au sol, comme une potion persistante. Les dégâts cessent
|
||||
en sortant ; aucun poison ne suit la victime. Tenue orange, pantalon bleu
|
||||
ardoise, œuf créatif et familier adulte miniature à taille variable.
|
||||
Build, **54 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4**
|
||||
réussis, avec G, dégâts dans la zone, sortie et trois tailles vérifiés.
|
||||
[Pack local beta.283](build/Sanctuary-beta.283.mrpack).
|
||||
|
||||
## beta.282 — Chargeur
|
||||
|
||||
[Deuxième zombie spécial](docs/charger-beta282.md) : préparation visible, charge
|
||||
en ligne droite, choc et récupération. Tenue verte, pantalon anthracite, œuf
|
||||
créatif et familier adulte miniature à taille variable, avec sa propre charge.
|
||||
Build, **45 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis,
|
||||
avec appui réel sur G, choc et recharge vérifiés.
|
||||
[Pack local beta.282](build/Sanctuary-beta.282.mrpack).
|
||||
|
||||
## beta.281 — Infectés adultes en miniature
|
||||
|
||||
[Les infectés abandonnent la forme bébé](docs/infected-adults-beta281.md).
|
||||
Le familier reprend les proportions adultes en miniature, avec son trait de
|
||||
taille variable conservé. La règle est commune aux futures variantes d'infectés.
|
||||
Build, **34 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis,
|
||||
avec trois tailles réelles de miniature vérifiées.
|
||||
[Pack local beta.281](build/Sanctuary-beta.281.mrpack).
|
||||
|
||||
## beta.280 — Premier infecté
|
||||
|
||||
[Un nouveau zombie et son familier](docs/infected-beta280.md) : modèle vanilla,
|
||||
t-shirt rouge, pantalon brun, 10 PV et vitesse légèrement supérieure au zombie.
|
||||
Œuf créatif `sanctuary:infected_spawn_egg`, apparitions peu fréquentes dans les
|
||||
habitats de zombies de l'Overworld et familier bébé avec son profil de combat.
|
||||
Texture vanilla recolorée pixel par pixel, sans déplacement UV. Build,
|
||||
**33 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.280](build/Sanctuary-beta.280.mrpack).
|
||||
|
||||
## beta.279 — Carte des îles et grand dézoom
|
||||
|
||||
[Vue d'ensemble de l'archipel et relevés prolongés](docs/map-islands-zoom-beta279.md).
|
||||
La carte dézoome jusqu'à l'échelle du monde avec des niveaux de détail adaptés,
|
||||
et reçoit les nouveaux chunks lointains en gardant son centre fixe. Capacité
|
||||
portée de 16 384 à **131 072 chunks par couche et habitant**, sans effacer les
|
||||
relevés existants. Les propriétés et Demeure retrouvent leurs détails en zoomant.
|
||||
Build, **20 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.279](build/Sanctuary-beta.279.mrpack).
|
||||
|
||||
## beta.278 — Disputer une propriété dans Battle
|
||||
|
||||
[Duel consenti pour un claim déjà revendiqué](docs/claim-battle-beta278.md).
|
||||
Clic droit sur la propriété → Disputer via Battle. Le challenger propose et
|
||||
le propriétaire accepte explicitement le chunk mis en jeu ; les deux confirment
|
||||
ensuite Prêt dans Battle. Le vainqueur reçoit ce seul claim avec sa protection
|
||||
restante. Refus, annulation avant lancement ou combat sans vainqueur ne changent
|
||||
pas le propriétaire. Résultat et transfert disposent d’un journal de reprise.
|
||||
Build, **40 tests serveur ciblés**, **26 contrôles du journal** et parcours
|
||||
**Vulkan FR/EN GUI 2/3/4** réussis. [Pack local beta.278](build/Sanctuary-beta.278.mrpack).
|
||||
|
||||
## beta.277 — Habiter avant de revendiquer
|
||||
|
||||
[Claims reliés aux influences Demeure](docs/claim-demeure-beta277.md).
|
||||
Une simple traversée ne suffit plus. Sur un terrain libre, l’habitant le plus
|
||||
influent peut revendiquer ; à égalité, la première trace d’habitation départage.
|
||||
Un autre habitant peut donc prendre la priorité avant le claim en dépassant
|
||||
l’influence du premier. Les propriétés acquises restent attribuées, avec les
|
||||
mêmes prix et protections. Le clic droit indique la condition ou le nom prioritaire.
|
||||
Build, **34 tests serveur ciblés**, contrôles Demeure et parcours **Vulkan
|
||||
FR/EN GUI 2/3/4** réussis. [Pack local beta.277](build/Sanctuary-beta.277.mrpack).
|
||||
|
||||
## beta.276 — Contours des propriétés et protection à huit saphirs
|
||||
|
||||
[Contours CTM aux couleurs des propriétaires](docs/claim-contours-beta276.md),
|
||||
visibles aussi sans protection. Les chunks voisins d’un même joueur se raccordent ;
|
||||
les chunks protégés ajoutent un fond coloré. **8 saphirs par chunk pour trois jours
|
||||
de serveur en marche**, avec conservation des durées déjà achetées.
|
||||
Build, **30 tests serveur ciblés**, **63 vérifications du registre** et parcours
|
||||
**Vulkan FR/EN GUI 2/3/4** réussis. [Pack local beta.276](build/Sanctuary-beta.276.mrpack).
|
||||
|
||||
## beta.275 — Habitant et Pause autour de la carte
|
||||
|
||||
[Habitant en trois colonnes et Pause centrée sur l’Atlas](docs/menu-atlas-beta275.md).
|
||||
Statistiques transparentes à gauche, personnage au centre, biographie à droite ;
|
||||
Factions et Familier restent seuls en haut. Le temps joué utilise jours, heures,
|
||||
minutes et secondes. Le message d’arrivée Propriété et l’activité de la fiche
|
||||
sont retirés. Les propriétés exigent la Carte débloquée et active côté serveur.
|
||||
Après déblocage, Aventure et Communauté forment deux colonnes au-dessus de la
|
||||
carte ; Partie et ses options restent dessous, Gazette à gauche et Tableau à droite.
|
||||
Build, **30 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.275](build/Sanctuary-beta.275.mrpack).
|
||||
|
||||
## beta.274 — Calques continus et propriétés conservées
|
||||
|
||||
[Demeure et les protections utilisent des couleurs par pixel sans cadres de chunks](docs/demeure-overlay-beta274.md).
|
||||
Les protections voisines de même propriétaire se raccordent, avec une légende
|
||||
couleur / personnage ; les boucliers et pointillés sont retirés. Le bouton
|
||||
Propriétés conserve le masquage. L’aide de Demeure décrit l’habitation et son
|
||||
influence. La fiche Habitant et les claims actuels restent accessibles.
|
||||
[La refonte des règles, de l’habitation préalable, des duels et du tarif est mise en attente](docs/property-demeure-refonte.md).
|
||||
Build, **29 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.274](build/Sanctuary-beta.274.mrpack).
|
||||
|
||||
## beta.273 — Couleurs et protection des claims
|
||||
|
||||
[Les claims portent la couleur de leur propriétaire sur la carte](docs/claim-map-beta273.md),
|
||||
même hors ligne. Bordure pleine et bouclier pour les chunks protégés ; pointillés
|
||||
pour les autres. Affichage dès l’ouverture, actualisation après achat et état
|
||||
au survol, dans la carte proche, l’Atlas et son aperçu de Pause. Le bouton
|
||||
**Propriétés : oui/non** permet de les masquer et de les réafficher.
|
||||
Build, **26 tests serveur ciblés** et parcours **Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.273](build/Sanctuary-beta.273.mrpack).
|
||||
|
||||
## beta.272 — Claims sur la carte
|
||||
|
||||
[Clic droit sur le terrain pour revendiquer un chunk](docs/chunk-claims-beta272.md).
|
||||
Les cinq premiers sont gratuits, puis 100, 200, 300 points d’XP, etc.
|
||||
Chaque chunk peut être protégé pour **64 saphirs et sept jours de serveur en
|
||||
marche** : minage ×2 pour son propriétaire, ×0,5 pour les autres. L’arrêt du
|
||||
serveur suspend la durée ; le claim reste acquis après expiration.
|
||||
Migration volontaire des anciens volumes, avec remboursement des extensions.
|
||||
Build, **25 tests serveur ciblés**, **58 vérifications du registre** et parcours
|
||||
**Vulkan FR/EN GUI 2/3/4** réussis. [Pack local beta.272](build/Sanctuary-beta.272.mrpack).
|
||||
|
||||
## beta.271 — Habitant, statistiques et activité
|
||||
|
||||
[Fiche en deux colonnes et deux rangées](docs/inhabitant-menu-beta271.md).
|
||||
Propriété, Factions et Familier forment une barre en haut. Le personnage
|
||||
respire en haut à gauche, avec son activité jusqu’en bas et Historique dessous.
|
||||
La biographie et les statistiques occupent la droite. Le familier et ses
|
||||
réglages restent dans sa page dédiée. Combats revient dans Communauté ;
|
||||
Story quitte Pause. Build, **15 tests serveur ciblés** et parcours **Vulkan
|
||||
FR/EN GUI 2/3/4** réussis. [Pack local beta.271](build/Sanctuary-beta.271.mrpack).
|
||||
|
||||
## beta.270 — Propriété personnelle et fiche Habitant
|
||||
|
||||
[Première propriété gratuite après Hello World](docs/property-beta270.md) :
|
||||
volume initial de 17 × 17 × 17 blocs, emplacement choisi dans le monde principal,
|
||||
quatre agrandissements en points d’XP et protection des actions directes des
|
||||
autres joueurs. Accès par **Habitant → Propriété** ou `/sanctuary property`.
|
||||
Faction et Battle rejoignent Habitant et libèrent leurs places dans Pause.
|
||||
Explosions, pistons, fluides et autres dégâts environnementaux restent hors
|
||||
protection dans ce premier lot. **41 GameTests serveur ciblés** et parcours
|
||||
**Vulkan FR/EN GUI 2/3/4** réussis.
|
||||
[Pack local beta.270](build/Sanctuary-beta.270.mrpack).
|
||||
|
||||
## beta.269 — Les réponses de Providence
|
||||
|
||||
[Six issues et leurs couleurs](docs/providence-verdicts-beta269.md) :
|
||||
@@ -1014,9 +1599,8 @@ explicites, résultat commun, sans récompense économique dans ce prototype.
|
||||
Le laboratoire utilise un nouveau monde ; aucune mise à jour de Prism ni du
|
||||
canal public n'est effectuée par ce chantier.
|
||||
|
||||
[Dernière release : beta.166](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.166) ·
|
||||
[Historique des publications beta.144–166](docs/publications-beta144-166.md).
|
||||
Les releases sont distinctes du canal packwiz, qui reste inchangé lors de ce rattrapage.
|
||||
Ce rattrapage historique des releases n’avait pas modifié le canal packwiz.
|
||||
|
||||
La [direction de travail du 25 septembre](docs/ecosysteme-communaute-economie.md)
|
||||
pose les liens entre tableau, Gazette, statistiques en BDD, État, navets,
|
||||
@@ -3480,7 +4064,7 @@ Depuis beta.090, la cible est **Minecraft 26.3 finale**, publiée le 15 septembr
|
||||
| Fabric API | 0.160.5+26.3 |
|
||||
| Fabric Loom | 1.17.20 |
|
||||
| Gradle Wrapper | 9.5.1, distribution vérifiée par SHA-256 |
|
||||
| Sanctuary / pack | beta.166 |
|
||||
| Sanctuary / pack | beta.295 |
|
||||
|
||||
Java 25 et Python 3.11 ou plus récent sont nécessaires. Le script pack utilise
|
||||
uniquement la bibliothèque standard et repère aussi une installation Python
|
||||
@@ -3509,7 +4093,7 @@ décrits dans [Validation](docs/testing.md).
|
||||
|
||||
Résultats :
|
||||
|
||||
- `mods/sanctuary/build/libs/sanctuary-beta.166.jar` : mod à installer avec
|
||||
- `mods/sanctuary/build/libs/sanctuary-beta.295.jar` : mod à installer avec
|
||||
Fabric API sur la version Minecraft indiquée.
|
||||
- `build/packwiz/` : pack de développement complet, avec le mod construit et
|
||||
l'index vérifié. Voir [Installation packwiz](packwiz/README.md).
|
||||
@@ -3557,13 +4141,17 @@ sauvegarde 26.2 : aucun outil de migration de ses chunks n'est livré ici.
|
||||
| `.gitea/ISSUE_TEMPLATE/` | Modèles de tickets fonctionnalités et bugs |
|
||||
| `.gitea/workflows/` | Vérification sur un runner Gitea compatible |
|
||||
|
||||
It's Alive !, Only Fun et Master Key restent des modules autonomes prévus par la
|
||||
vision. Leurs sources 26.2 ne sont pas copiées dans ce socle. Fabric API est
|
||||
requise ; Demeure appartient au code interne de Sanctuary. Depuis beta.257,
|
||||
le port source de JEI pour 26.3 et Sound Physics sont des mods client séparés
|
||||
et facultatifs, comme Sodium. Leurs sources ou procédures de reconstruction
|
||||
et leurs attributions figurent dans `mods/demeure/`, `mods/jei/` et
|
||||
`mods/sound-physics-remastered/`.
|
||||
La [refonte d'It's Alive !](docs/itsalive-26-3.md) reprend les textures et
|
||||
l'agriculture dans Sanctuary ; ses appareils et sa cuisine restent à porter. Only Fun
|
||||
et Master Key restent prévus par la vision. Fabric API est
|
||||
requise ; Demeure appartient au code interne de Sanctuary. Depuis beta.280,
|
||||
le port source de JEI pour 26.3 est embarqué dans le JAR Sanctuary pour le
|
||||
client et le serveur. Sound Physics et Sodium restent facultatifs côté client.
|
||||
Depuis beta.293, Simple Voice Chat, Bobby, Lithium et Entity Culling sont
|
||||
aussi facultatifs côté client ; la voix et Lithium font également partie du
|
||||
profil serveur. Voir [les dépendances du pack](docs/optional-mods-beta292.md).
|
||||
Les sources ou procédures de reconstruction et les attributions figurent
|
||||
dans `mods/demeure/`, `mods/jei/` et `mods/sound-physics-remastered/`.
|
||||
|
||||
## Travailler par tickets
|
||||
|
||||
|
||||
+364
-4
@@ -1,5 +1,234 @@
|
||||
# Provenance et crédits
|
||||
|
||||
## Poules rares beta.323
|
||||
|
||||
Le comportement et le rendu sont portés des classes `GemChickenEntity`,
|
||||
`GemChickenVariant`, `GemChickenRenderer`, `ChickenMixin` et `ThrownEggMixin`
|
||||
du module `itsalive` de Sanctuary 26.2, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, sous GPL-3.0-or-later.
|
||||
Les six PNG de `assets/itsalive/textures/entity/gem_chicken/` sont copiés
|
||||
intacts dans `assets/sanctuary/textures/entity/gem_chicken/`. Ce sont des
|
||||
recolorations des textures de poule Minecraft 26.2, par le script historique
|
||||
`itsalive/tools/generate_gem_chickens.sh` ; Mojang/Microsoft restent titulaires
|
||||
des textures sources. La nouvelle variante or référence la texture native
|
||||
tempérée résolue par Minecraft et applique une teinte au rendu sans copier
|
||||
cette texture. L'icône `assets/sanctuary/textures/item/golden_egg.png` est
|
||||
reprise sans modification du module `anotherworld` du même commit.
|
||||
Voir [le contrat et les différences du port](docs/rare-chickens-beta323.md).
|
||||
|
||||
|
||||
## Saucisson posé en tranches, beta.315 locale
|
||||
|
||||
Le bloc de saucisson, ses quatre longueurs et orientations sont développés
|
||||
dans Sanctuary 26.3. Les modèles cubiques originaux reprennent les références
|
||||
natives du modèle d’objet beta.313 : terre cuite rouge, laine blanche et bloc
|
||||
de champignon rouge pour la coupe. Aucun PNG ni fichier audio Minecraft
|
||||
n’est copié ; le son natif de mastication est référencé. Les modèles d’objets
|
||||
cru/séché et leur affichage au séchoir sont conservés. Voir
|
||||
[comportement et continuité](docs/sausage-slices-beta315.md).
|
||||
|
||||
## Fromage à partager et élevage du vin, beta.314 locale
|
||||
|
||||
Le nouveau bloc de fromage réutilise les règles du gâteau de Minecraft 26.3
|
||||
par héritage, avec des modèles cubiques originaux Sanctuary pour ses sept
|
||||
états et des références aux textures natives de terre cuite jaune et pierre
|
||||
de l’End. Les icônes historiques de fromage et de vin sont conservées ; les
|
||||
trois qualités ajoutées héritent du modèle d’objet du vin et distinguent
|
||||
leurs noms, raretés et saturation. Aucun PNG, son ou source Minecraft n’est
|
||||
copié. Le calcul des jours réels et les recettes d’élevage sont développés
|
||||
dans Sanctuary. Voir [comportement et continuité](docs/cheese-wine-beta314.md).
|
||||
|
||||
## Séchoir et saucisson, beta.313 locale
|
||||
|
||||
Le séchoir, ses modèles cubiques, les deux états du saucisson, la préparation
|
||||
à l’établi et le séchage sont développés dans Sanctuary 26.3. Ils réutilisent
|
||||
les ingrédients du catalogue culinaire historique et des textures Minecraft
|
||||
référencées : chêne écorcé, terre cuite rose/rouge, laine blanche et bloc de
|
||||
champignon rouge. Aucun fichier de texture ni son Minecraft n’est copié.
|
||||
Les événements sonores natifs d’ajout/retrait de cadre et de récupération
|
||||
d’objet sont référencés sans nouveau fichier audio. Voir
|
||||
[comportement, provenance et continuité](docs/drying-rack-beta313.md).
|
||||
|
||||
## Répétition au chaudron, beta.312 locale
|
||||
|
||||
Sanctuary mémorise la recette autorisée au bâton, enchaîne ses lots et conserve
|
||||
les ingrédients réapprovisionnés pour leurs cycles complets. Le chaudron, ses
|
||||
19 recettes et ses ressources restent issus du port de `26.2/itsalive`
|
||||
(commit `26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later).
|
||||
Aucune recette, texture ou piste audio n’est modifiée ; les sons natifs de
|
||||
beta.311 restent utilisés une fois par événement. Voir
|
||||
[comportement et continuité](docs/cauldron-repeat-beta312.md).
|
||||
|
||||
## Chaudron remué, beta.311 locale
|
||||
|
||||
Le chaudron et ses 19 recettes proviennent du port de `26.2/itsalive`
|
||||
(commit `26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later).
|
||||
Sanctuary remplace le délai d’échec par une préparation lancée au bâton,
|
||||
conserve les récipients réels jusqu’au paiement final et précise la capture
|
||||
dans l’ouverture. Les sons référencent les événements natifs de Minecraft
|
||||
26.3, sans copie de fichier audio ni modification de texture. Voir
|
||||
[fonctionnement et continuité](docs/cauldron-beta311.md).
|
||||
|
||||
## Piles de poêles, beta.310 locale
|
||||
|
||||
La poêle, sa texture et ses 26 recettes restent issues du port de
|
||||
`26.2/itsalive` (commit `26f2c2a0061619df1f146f9081d6740c560a7497`,
|
||||
GPL-3.0-or-later). Sanctuary ajoute une pose native par couches de quatre
|
||||
pixels, une préparation commune et des réserves réelles pour payer chaque
|
||||
portion. Les trois modèles supérieurs translatent la géométrie historique
|
||||
avec ses UV conservés ; aucun PNG ne change. Voir
|
||||
[fonctionnement et contrat de continuité](docs/pan-stacks-beta310.md).
|
||||
|
||||
## Sortie unique de cuisinière, beta.309 locale
|
||||
|
||||
La correction Sanctuary retire la case d'aperçu et l'alimentation de la grille
|
||||
par entonnoir, tout en conservant l'extraction des plats et le cycle culinaire
|
||||
porté de `26.2/itsalive` (GPL-3.0-or-later, même reçu beta.304).
|
||||
L'interface utilise les panneaux et sprites vanilla existants, sans retouche
|
||||
de PNG. Voir [comportement et continuité](docs/oven-single-output-beta309.md).
|
||||
|
||||
## Cycle de cuisinière et aperçu, beta.308 locale
|
||||
|
||||
La cuisinière et ses treize recettes restent issues du port de `26.2/itsalive`
|
||||
(commit `26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later).
|
||||
Sanctuary renforce l'annulation sur modification de grille, sépare l'aperçu
|
||||
virtuel des plats cuits et conserve l'inventaire natif et ses compteurs.
|
||||
L'interface réutilise les panneaux et sprites Minecraft de l'établi et du four ;
|
||||
aucun PNG n'est retouché. Voir [cycle et continuité](docs/oven-beta308.md).
|
||||
|
||||
## Moulin manuel, beta.306 locale
|
||||
|
||||
Le moulin et ses neuf recettes proviennent du port culinaire de
|
||||
`26.2/itsalive`, commit `26f2c2a0061619df1f146f9081d6740c560a7497`,
|
||||
GPL-3.0-or-later. Sanctuary remplace le traitement au combustible par un poste
|
||||
manuel inspiré du tailleur de pierre vanilla 26.3. L'interface réutilise le
|
||||
panneau natif Minecraft et les deux sprites mécaniques historiques importés ;
|
||||
aucun PNG n'est modifié. Les anciennes cases de stockage restent lisibles.
|
||||
Voir [comportement et continuité](docs/mill-beta306.md).
|
||||
La [recette adaptée en beta.307](docs/mill-recipe-beta307.md) remplace la
|
||||
redstone historique par un bâton et utilise la catégorie native Divers.
|
||||
|
||||
## Écrasement direct des fruits, beta.305 locale
|
||||
|
||||
Le comportement de piétinement à huit hauteurs et son intégration aux pistons
|
||||
sont développés dans Sanctuary 26.3. Ils utilisent les trois textures de blocs
|
||||
et les trois recettes de transformation déjà importées de `26.2/itsalive`
|
||||
(commit `26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later).
|
||||
Aucun PNG n'est retouché ; les modèles partiels réutilisent les mêmes textures.
|
||||
La presse beta.304 devient une compatibilité de lecture d'inventaire inactive.
|
||||
Voir [comportements, continuité et vérifications](docs/crushing-beta305.md).
|
||||
|
||||
## Appareils culinaires, beta.304 locale
|
||||
|
||||
Les six appareils, leurs 36 sources Java, leurs modèles et recettes adaptent
|
||||
`26.2/itsalive` au commit `26f2c2a0061619df1f146f9081d6740c560a7497`,
|
||||
GPL-3.0-or-later. Le [reçu source](docs/kitchen-beta304-sources.json) conserve
|
||||
les empreintes historiques. Les recettes d'équipement adaptées sont dans
|
||||
`scripts/data/kitchen-crafting.json` ; celles des procédés restent dans le
|
||||
reçu de cuisine beta.303. Le port conserve les PNG déjà importés, adapte
|
||||
explicitement les API Minecraft 26.3 et ajoute les catégories JEI, les retours
|
||||
de récipients et le suivi exact de l'eau vanilla. La fermentation instantanée
|
||||
de l'étape beta.303 est remplacée par le tonneau et ses délais historiques.
|
||||
Voir [comportements, limites et vérifications](docs/kitchen-beta304.md).
|
||||
|
||||
## Cuisine, beta.303 locale
|
||||
|
||||
Les 92 recettes alimentaires, noms FR/EN et profils alimentaires adaptent
|
||||
`26.2/itsalive` au commit `26f2c2a0061619df1f146f9081d6740c560a7497`,
|
||||
GPL-3.0-or-later. Le reçu source `scripts/data/cuisine.json` conserve les
|
||||
recettes originales et leurs SHA-256. Les mécanismes sont adaptés à la table,
|
||||
au four et au fumoir de Minecraft 26.3 ; les transformations de fermentation
|
||||
deviennent des fabrications manuelles immédiates. Les appareils historiques
|
||||
ne sont pas portés dans ce lot. Les modèles de préparations réutilisent les
|
||||
sprites importés, avec une teinte native, sans modifier les PNG. Voir
|
||||
[le contrat, les adaptations et contrôles](docs/cuisine-beta303.md).
|
||||
|
||||
## Vanille 16 × 16, beta.302 locale
|
||||
|
||||
Les quatre sprites grimpants de beta.301 sont repris avec l'outil intégré
|
||||
imagegen pour leur lecture en 16 × 16 pixels. L'atlas de production contient
|
||||
quatre cellules de cette taille ; les PNG de jeu sont exportés à cette
|
||||
résolution exacte, sans interpolation. Les sources, prompt et empreintes
|
||||
restent dans `ressources-pack/sources/vanilla-beta301/`. Les 343 PNG de l'import
|
||||
historique beta.299 restent intacts. Voir [le correctif](docs/vanilla-16px-beta302.md).
|
||||
|
||||
## Vanille grimpante, beta.301 locale
|
||||
|
||||
La maturité et la récolte adaptent le `VanillaVineBlock` de Sanctuary 26.2
|
||||
(`26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later). L'attachement
|
||||
à plusieurs faces, la croissance ascendante et les modèles plats sont adaptés
|
||||
pour Sanctuary 26.3. Les quatre PNG historiques restent intacts. Quatre
|
||||
nouveaux sprites intégrant feuilles, fleurs et gousses sont créés avec l'outil
|
||||
imagegen, à partir de la liane Minecraft comme référence de structure et de
|
||||
style et des anciens PNG comme références de vanille. Un seul plan est rendu
|
||||
par face ; aucune texture native n'est copiée dans le pack. L'atlas final,
|
||||
les prompts et la préparation des sprites sont conservés dans
|
||||
`ressources-pack/sources/vanilla-beta301/`.
|
||||
Voir [le contrat et les contrôles](docs/vanilla-beta301.md).
|
||||
|
||||
## Agriculture d'It's Alive ! pour 26.3, beta.300 locale
|
||||
|
||||
Les classes `fr.koka.sanctuary.agriculture` adaptent le code agricole et les
|
||||
registres du module `26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later. Leur portée
|
||||
exclut créatures, Canaplia et appareils culinaires. Les définitions des deux
|
||||
arbres plantés adaptent les paramètres `oak` et `acacia` de Minecraft 26.3
|
||||
finale ; les butins utilisent les règles natives de cette version.
|
||||
Les textures du [reçu beta.299](docs/itsalive-textures-beta299.json) sont
|
||||
conservées sans retouche. Voir le [contrat et les vérifications](docs/agriculture-beta300.md).
|
||||
|
||||
## Textures cuisine et agriculture d'It's Alive !, beta.299 locale
|
||||
|
||||
Le premier lot de la refonte reprend 343 PNG du module `itsalive` du projet
|
||||
Sanctuary 26.2 (GPL-3.0-or-later), commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, sous
|
||||
`itsalive/src/main/resources/assets/itsalive/textures/`. Les 38 images du dossier
|
||||
`food` fournies par le créateur le 28 octobre 2026 remplacent leurs homologues
|
||||
dans la nouvelle copie ; elles sont conservées octet pour octet. Les 305 autres
|
||||
PNG restent strictement identiques aux sources historiques. Les textures de
|
||||
créatures et les œufs ne font pas partie de cet import.
|
||||
|
||||
Le [reçu par fichier](docs/itsalive-textures-beta299.json) conserve origine,
|
||||
empreintes anciennes/nouvelles et dimensions. Le
|
||||
[ticket de portage](docs/itsalive-26-3.md) distingue la présence des textures
|
||||
des mécaniques encore à développer. Aucun nouveau code 26.2 ni modèle tiers
|
||||
n'est inclus par ce lot ; les notices des portages antérieurs restent valables.
|
||||
|
||||
## Mods facultatifs beta.292
|
||||
|
||||
Les binaires officiels de [Simple Voice Chat 2.6.24+26.3](https://modrinth.com/plugin/simple-voice-chat/version/OLnMVWXy)
|
||||
(Max Henkel, All Rights Reserved), [Bobby 5.2.16+mc26.3](https://modrinth.com/mod/bobby/version/J7YnfCss)
|
||||
(johni0702, LGPL-3.0-or-later), [Lithium 0.26.2+mc26.3](https://modrinth.com/mod/lithium/version/xS0Q8LSi)
|
||||
(CaffeineMC et contributeurs, LGPL-3.0-only) et
|
||||
[Entity Culling 1.11.3 pour 26.3](https://modrinth.com/mod/entityculling/version/X1g3VhTx)
|
||||
(tr7zw et contributeurs, tr7zw Protective License) sont téléchargés séparément
|
||||
par packwiz, sans modification ni imbrication dans Sanctuary. Leurs notices,
|
||||
licences et bibliothèques imbriquées restent attachées aux JAR originaux.
|
||||
Leurs métadonnées et SHA-512 sont dans `packwiz/mods/` ;
|
||||
[choix de versions et vérifications](docs/optional-mods-beta292.md).
|
||||
|
||||
## Installateur packwiz Sanctuary beta.291
|
||||
|
||||
Le bandeau `launcher/packwiz/sanctuary.png` est le fichier `minecraft.png`
|
||||
fourni par le créateur le 26 octobre 2026, conservé sans modification.
|
||||
`InstallWindow.java` adapte la fenêtre de packwiz-installer v0.5.14 de
|
||||
comp500, sous MIT ; licence et source sont joints au JAR généré. Toutes les
|
||||
autres classes et les notices des dépendances de l'installateur officiel
|
||||
restent identiques. Sources, hashes et périmètre dans
|
||||
[le contrat du logo packwiz](docs/packwiz-logo-beta291.md).
|
||||
|
||||
## Tenues des zombies beta.287
|
||||
|
||||
Les neuf PNG `zombie.png`, `zombie2.png` à `zombie9.png` sont fournis par le
|
||||
créateur le 26 octobre 2026. Ils sont copiés sans modification sous
|
||||
`assets/sanctuary/textures/entity/zombies/zombie1.png` à `zombie9.png`.
|
||||
Le [reçu des sources et dérivés](docs/zombie-skins-beta287.json) conserve
|
||||
leurs SHA-256. `scripts/prepare_zombie_skins.py` produit aussi neuf adaptations
|
||||
UV pour le modèle bébé natif de Minecraft 26.3 par rééchantillonnage déterministe
|
||||
des faces ; aucun générateur d’image n’intervient. La géométrie et les couches
|
||||
d’armure restent issues de Minecraft. Les notices historiques des anciennes
|
||||
recolorations ci-dessous décrivent les livraisons précédentes.
|
||||
|
||||
Depuis beta.256, le pack client inclut [Sodium 0.9.2+mc26.3](https://modrinth.com/mod/sodium/version/bAZQdGpg),
|
||||
de JellySquid et des contributeurs CaffeineMC, sous Polyform-Shield-1.0.0.
|
||||
Le JAR officiel est une dépendance séparée téléchargée par packwiz ; il n’est
|
||||
@@ -106,15 +335,52 @@ L’icône d’objet correspondante provient de `../26.2/sanctuary`
|
||||
restent la propriété de leurs auteurs et ne sont pas placées sous la licence
|
||||
du code Sanctuary. Il ne s’agit pas d’une cape officielle accordée au compte.
|
||||
|
||||
Les familiers utilisent les modèles et textures résolus par Minecraft installé ;
|
||||
aucune copie des textures de mobs ni aucun ancien pouvoir n’est embarqué.
|
||||
Les familiers vanilla utilisent les modèles et textures résolus par Minecraft
|
||||
installé. L'exception du premier infecté est décrite ci-dessous.
|
||||
|
||||
## Infecté beta.280
|
||||
|
||||
Le modèle, les animations, l'armure et les sons sont ceux du zombie installé
|
||||
avec Minecraft 26.3. Aucun modèle ou son de Left 4 Dead n'est inclus ; cette
|
||||
série reprend seulement l'idée de rôles différents pour des zombies.
|
||||
|
||||
La texture `assets/sanctuary/textures/entity/infected.png` est une recoloration
|
||||
déterministe du zombie **Minecraft 26.3**, réalisée par
|
||||
`scripts/generate_infected_texture.py` à partir du JAR installé. Seules les
|
||||
couleurs du t-shirt et du pantalon changent ; coordonnées UV, peau, visage,
|
||||
chaussures et transparence restent identiques. Empreinte SHA-256 du PNG natif :
|
||||
`1b88eea9b63889c2c3399773f887af375defc3aad0e7a375adc84249da54cbbd`.
|
||||
Aucune texture produite par ImageGen n'est livrée.
|
||||
|
||||
L'icône `textures/item/infected_spawn_egg.png` est reprise intacte de Sanctuary
|
||||
26.2, commit `26f2c2a0061619df1f146f9081d6740c560a7497`, module `itsalive`.
|
||||
Elle provenait d'une recoloration de l'œuf Minecraft par
|
||||
`itsalive/tools/generate_infected_textures.sh`. Ces ressources dérivées ne sont
|
||||
pas couvertes par la licence GPL du code ; les droits sur les ressources
|
||||
Minecraft restent à Mojang/Microsoft.
|
||||
|
||||
## Chargeur beta.282
|
||||
|
||||
`assets/sanctuary/textures/entity/charger.png` utilise le même PNG natif du
|
||||
zombie Minecraft 26.3 et les mêmes masques UV que l'Infecté. La sélection
|
||||
`--variant charger` de `scripts/generate_infected_texture.py` produit un
|
||||
t-shirt vert et un pantalon anthracite, avec peau, visage, chaussures et alpha
|
||||
conservés pixel pour pixel. Aucun dessin génératif ni modèle de Left 4 Dead.
|
||||
SHA-256 : `cf2344d870753ed621b9fd7c3fd7dfe0b3dc35294620e798f113b71abd27fbda`.
|
||||
|
||||
L'icône `textures/item/charger_spawn_egg.png` est reprise intacte du module
|
||||
`itsalive` de Sanctuary 26.2, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, générée à partir de l'œuf Minecraft.
|
||||
Les droits sur les ressources Minecraft restent à Mojang/Microsoft.
|
||||
|
||||
## JEI beta.024
|
||||
|
||||
Just Enough Items, mezz, MIT : fork source de la branche 26.2, commit
|
||||
`aae2dfcfb82e6b5bce787ba72bb2eda7339b274f`, adapté à Minecraft 26.3-pre-2.
|
||||
Depuis beta.257, le fork Minecraft 26.3 `30.32.0-sanctuary.4` est un JAR client
|
||||
séparé et facultatif, avec la licence d’origine et [la provenance du portage](mods/jei/PROVENANCE.md).
|
||||
Depuis beta.280, le fork Minecraft 26.3 `30.32.0-sanctuary.4` est à nouveau
|
||||
embarqué dans le JAR Sanctuary, avec la licence d’origine et
|
||||
[la provenance du portage](mods/jei/PROVENANCE.md). Sa distribution séparée
|
||||
facultative concernait les beta.257–278.
|
||||
Les patches et la reconstruction sont fournis ; les téléchargements restent ignorés.
|
||||
Baked Substring Index 0.1.0 (MIT, James Mitchell) et Suffix Tree 1.1.0
|
||||
(Apache-2.0, Alessandro Bahgat Shehata) sont inclus avec leurs licences.
|
||||
@@ -212,3 +478,97 @@ leurs aperçus publics de haute qualité ; la cigale du soir utilise la
|
||||
conversion MP3 publique de Commons. Aucun enregistrement d’Animal Crossing
|
||||
n’est inclus. L’identification biologique du grillon reste non précisée ;
|
||||
la courtilière européenne sert d’analogue sonore.
|
||||
|
||||
## Spitter beta.283
|
||||
|
||||
`assets/sanctuary/textures/entity/spitter.png` est une recoloration déterministe
|
||||
du zombie Minecraft 26.3 via `scripts/generate_infected_texture.py --variant spitter`.
|
||||
Seuls le t-shirt orange et le pantalon bleu ardoise changent. Peau, visage,
|
||||
chaussures, alpha et UV restent identiques au PNG natif décrit ci-dessus.
|
||||
SHA-256 : `92f6a8f7ad09a817fc74bfc2728a5f75d34a838dcc91a2ddee336c31803c0592`.
|
||||
Aucun modèle, son ou dessin génératif de Left 4 Dead n'est inclus.
|
||||
|
||||
L'icône `textures/item/spitter_spawn_egg.png` est reprise intacte du module
|
||||
`itsalive` de Sanctuary 26.2, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, dérivée de l'œuf Minecraft.
|
||||
Les droits sur les ressources Minecraft restent à Mojang/Microsoft.
|
||||
|
||||
## Boomer beta.284
|
||||
|
||||
`assets/sanctuary/textures/entity/boomer.png` est une recoloration déterministe
|
||||
du zombie Minecraft 26.3 par `scripts/generate_infected_texture.py --variant boomer`.
|
||||
T-shirt violet et pantalon sable : 570 pixels de vêtements changent, avec
|
||||
visage, peau, chaussures, UV et transparence conservés. SHA-256 :
|
||||
`2cbc0a87435c8f12fbbd77bd3d7fc23c9843e9ae22493dbfb6ffe14ea492c230`.
|
||||
|
||||
Le même script recolore en violet la silhouette et les ombres de l'icône
|
||||
`spitter_spawn_egg.png` historique, décrite ci-dessus, pour produire
|
||||
`textures/item/boomer_spawn_egg.png`. SHA-256 :
|
||||
`dd11449f7072db2faf753e5d258acfe8e5d2c50116e076d9b799345ed5f62ffa`.
|
||||
Les droits sur ces ressources dérivées restent à Mojang/Microsoft. Aucun
|
||||
modèle, son ou bitmap de Left 4 Dead, ni texture générative, n'est livré.
|
||||
|
||||
## Smoker beta.285
|
||||
|
||||
`assets/sanctuary/textures/entity/smoker.png` est une recoloration déterministe
|
||||
du zombie Minecraft 26.3 par `scripts/generate_infected_texture.py --variant smoker`.
|
||||
T-shirt gris clair et pantalon vert olive : 570 pixels de vêtements modifiés ;
|
||||
visage, peau, chaussures, UV et alpha conservés. SHA-256 :
|
||||
`80b7b34c915466d2c022f2222bd5bedf5b5b6c39ab447a97dcae7edf66ba4d17`.
|
||||
|
||||
Le même script dérive `textures/item/smoker_spawn_egg.png` de la silhouette et
|
||||
des ombres de l'icône historique `spitter_spawn_egg.png`, avec la teinte du
|
||||
t-shirt. SHA-256 :
|
||||
`e73b7d1e08ef0f35bfc7bac3e81795b166b56d9a5267045bcef64ae311c256c6`.
|
||||
La tête du lasso utilise l'objet laisse natif et son câble le rendu natif des
|
||||
laisses tendues déjà employé par les tyroliennes. Aucun modèle, son ou bitmap
|
||||
de Left 4 Dead ni texture générative n'est inclus. Les droits sur les ressources
|
||||
Minecraft dérivées restent à Mojang/Microsoft.
|
||||
|
||||
## Hunter beta.286
|
||||
|
||||
`assets/sanctuary/textures/entity/hunter.png` est une recoloration déterministe
|
||||
du zombie Minecraft 26.3 par `scripts/generate_infected_texture.py --variant hunter`.
|
||||
T-shirt bleu et pantalon anthracite : 570 pixels de vêtements modifiés ; tête,
|
||||
peau, chaussures, UV et alpha conservés. SHA-256 :
|
||||
`1057efc7947105684a24fe165e83581b66fccc877687433cc00ed80231c2c970`.
|
||||
|
||||
Le même script dérive `textures/item/hunter_spawn_egg.png` de la silhouette et
|
||||
des ombres de l'icône historique `spitter_spawn_egg.png`, avec la teinte du
|
||||
t-shirt. SHA-256 :
|
||||
`294bbd145e09707f2006d51e9190b538b50148c44c13f3ecaf563e316f03384d`.
|
||||
Les sons et le modèle sont natifs à Minecraft. Aucun bitmap ou son de Left 4
|
||||
Dead ni texture générative n'est inclus. Les droits sur les ressources
|
||||
Minecraft dérivées restent à Mojang/Microsoft.
|
||||
|
||||
## Baleine fantôme volante beta.290
|
||||
|
||||
Le modèle, son animation, le rendu, l’IA et le spawner proviennent du module
|
||||
`itsalive` de Sanctuary 26.2, commit
|
||||
`94644a28f05b8010f06ec1181fe6c74a50ad80d6`, sous la licence du projet
|
||||
GPL-3.0-or-later. Cette source est elle-même le port de la baleine du JAR
|
||||
historique Real Ghost ; aucune archive 26.2 n’est redistribuée.
|
||||
`textures/entity/flying_whale/flying_whale.png` est repris octet pour octet.
|
||||
SHA-256 : `0828ba1b9443f31cdb0ce9c22393a8702a72b9e59c2a0c02f3dd6dedadd33fb8`.
|
||||
|
||||
L’icône `textures/item/flying_whale_spawn_egg.png` est une recoloration
|
||||
déterministe directe de `assets/minecraft/textures/item/egg.png` de Minecraft
|
||||
26.3, produite par `scripts/generate_whale_egg.py` ; silhouette, alpha et
|
||||
ombrage natifs conservés. Source SHA-256 :
|
||||
`3bfccf5fcfe66933d591e944f6b08456c8083f5c3898b924da52bfebc41e6322`.
|
||||
Résultat SHA-256 :
|
||||
`d476a3fedba3af3e463d6461b81cf6ca8702fe10ceb3934f426390d59da63f7e`.
|
||||
Les sons et particules sont natifs à Minecraft, référencés sans copie ; les
|
||||
droits sur les ressources Minecraft dérivées restent à Mojang/Microsoft.
|
||||
|
||||
|
||||
## Happy creepers
|
||||
|
||||
`assets/sanctuary/textures/entity/creeper/happy.png` est repris sans modification
|
||||
du module `itsalive` de Sanctuary 26.2, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, chemin
|
||||
`itsalive/src/main/resources/assets/itsalive/textures/entity/creeper/happy.png`.
|
||||
SHA-256 : `40e22bf0610cfc7ae8ca910b1e6bdce0c759ccbf8714df7566ebe5538cac24f0`.
|
||||
Il s'agit du visage souriant historique sur le modèle natif du creeper. Les
|
||||
droits sur les ressources Minecraft dérivées restent à Mojang/Microsoft.
|
||||
Aucune autre variante de texture ni ressource Mobopia n'est importée.
|
||||
|
||||
+48
-1
@@ -14,6 +14,39 @@ allprojects {
|
||||
|
||||
tasks.named('build') { dependsOn(':sanctuary:build', ':jei:build', ':sanctuary-test:build') }
|
||||
tasks.named('check') { dependsOn(':sanctuary:check', ':jei:check', ':sanctuary-test:check', 'verifyPack') }
|
||||
tasks.named('check') { dependsOn(':sanctuary-media:check') }
|
||||
tasks.named('build') { dependsOn(':sanctuary-media:build') }
|
||||
|
||||
tasks.register('verifyServerUpdater', Exec) {
|
||||
group = 'verification'
|
||||
commandLine('python3', 'scripts/test_server_runtime.py')
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyServerUpdater') }
|
||||
|
||||
tasks.register('verifyWebDistribution', Exec) {
|
||||
group = 'verification'
|
||||
commandLine('python3', 'scripts/test_publish_web_pack.py')
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyWebDistribution') }
|
||||
|
||||
tasks.register('verifyOptionalMods', Exec) {
|
||||
group = 'verification'
|
||||
commandLine('python3', 'scripts/verify_optional_mods.py')
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyOptionalMods') }
|
||||
|
||||
tasks.register('assemblePackwizInstaller', Exec) {
|
||||
group = 'distribution'
|
||||
description = 'Build and verify the Sanctuary-branded packwiz window.'
|
||||
commandLine('python3', 'scripts/packwiz_installer.py')
|
||||
}
|
||||
|
||||
tasks.register('verifyPackwizInstaller', Exec) {
|
||||
group = 'verification'
|
||||
dependsOn('assemblePackwizInstaller')
|
||||
commandLine('python3', 'scripts/test_packwiz_installer.py')
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyPackwizInstaller') }
|
||||
|
||||
tasks.register('verifyPack', Exec) {
|
||||
group = 'verification'
|
||||
@@ -24,10 +57,17 @@ tasks.register('verifyPack', Exec) {
|
||||
tasks.register('assemblePack', Exec) {
|
||||
group = 'distribution'
|
||||
description = 'Assemble a local packwiz pack including the built Sanctuary mod.'
|
||||
dependsOn(':sanctuary:build', ':jei:build', 'verifyPack', 'assembleResourcePack', 'assembleResourceTemplate')
|
||||
dependsOn(':sanctuary:build', ':jei:build', 'verifyPack', 'verifyOptionalMods', 'assembleResourcePack', 'assembleResourceTemplate', 'assemblePackwizInstaller')
|
||||
commandLine('python3', 'scripts/pack.py', 'assemble')
|
||||
}
|
||||
|
||||
tasks.register('assembleServerPack', Exec) {
|
||||
group = 'distribution'
|
||||
description = 'Build the Linux server kit and verify its packwiz profile.'
|
||||
dependsOn('assemblePack')
|
||||
commandLine('python3', 'scripts/server_pack.py')
|
||||
}
|
||||
|
||||
tasks.register('verifyResourcePack', Exec) {
|
||||
group = 'verification'
|
||||
description = 'Verify the versioned Sanctuary texture sources and their release hashes.'
|
||||
@@ -35,6 +75,13 @@ tasks.register('verifyResourcePack', Exec) {
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyResourcePack') }
|
||||
|
||||
tasks.register('verifyItsAliveTextures', Exec) {
|
||||
group = 'verification'
|
||||
description = 'Verify the first agriculture and cooking texture import and its source hashes.'
|
||||
commandLine('python3', 'scripts/verify_itsalive_textures.py')
|
||||
}
|
||||
tasks.named('check') { dependsOn('verifyItsAliveTextures') }
|
||||
|
||||
tasks.register('assembleResourcePack', Zip) {
|
||||
group = 'distribution'
|
||||
description = 'Export the same textures as the built-in resource pack for standalone use.'
|
||||
|
||||
@@ -0,0 +1,181 @@
|
||||
# IA-02 — Cultures, arbres fruitiers et caféier en 26.3
|
||||
|
||||
Préparation **locale** du 28 octobre 2026, `beta.300`, sur la même branche
|
||||
`codex/itsalive-26-3`. Socle : import graphique beta.299, commit `d78d39cd`.
|
||||
Minecraft 26.3, Fabric Loader 0.19.5, Fabric API 0.160.5+26.3 et Java 25
|
||||
restent inchangés. Aucun push, tag, publication, serveur, site ou Prism modifié.
|
||||
|
||||
## Contenu jouable
|
||||
|
||||
Le créatif utilise exclusivement les onglets vanilla existants :
|
||||
|
||||
| Onglet | Ajouts |
|
||||
| --- | --- |
|
||||
| **Naturel / Natural Blocks** | 23 semences, propagules et pousses, plus les deux feuillages fruitiers |
|
||||
| **Nourriture et boissons / Food & Drinks** | 26 récoltes et ingrédients, plus la gousse d'ail |
|
||||
|
||||
Ces **45 objets distincts** comprennent sept récoltes replantables ou grains
|
||||
présents dans les deux catégories selon leur usage. Aucun onglet ou page
|
||||
créative supplémentaire n'est enregistré.
|
||||
Tous portent des identifiants `sanctuary:*` et des noms FR/EN. Les blocs et
|
||||
objets sont ceux de Sanctuary ; aucun deuxième JAR It's Alive n'est nécessaire.
|
||||
|
||||
Les **20 cultures** sont : fraise, tomate, ananas, maïs, concombre, poivron,
|
||||
aubergine, laitue, oignon, ail, chou, raisin, riz, soja, haricot, pois chiche,
|
||||
piment, basilic, menthe et coriandre. Elles ont huit âges, croissent par les
|
||||
ticks aléatoires et acceptent la poudre d'os. La croissance garde les règles
|
||||
vanilla de lumière et de sol ; aucun verrou climatique nouveau n'est ajouté.
|
||||
|
||||
Les modèles suivent la silhouette des plantes : **15 cultures en croix**
|
||||
(fraise, ananas, poivron, aubergine, laitue, oignon, ail, chou, raisin, soja,
|
||||
pois chiche, piment, basilic, menthe et coriandre). Le riz, le maïs, la tomate,
|
||||
le concombre et le haricot gardent les plans de culture existants, avec les
|
||||
parties hautes pour les quatre derniers. La croix comprend deux plans
|
||||
diagonaux au lieu des quatre plans formant un cadre. Son pied est abaissé
|
||||
d'un pixel, comme le modèle de culture vanilla, pour toucher la terre
|
||||
labourée. Ce choix s'applique aux huit âges, sans retoucher les PNG.
|
||||
|
||||
- Les semences se plantent sur la terre labourée. L'oignon, l'ail, le riz,
|
||||
le soja, les haricots et les pois chiches sont directement replantables.
|
||||
- Le **riz** se plante exclusivement dans une vraie source d'eau au-dessus
|
||||
de boue. L'eau courante et la plantation à sec sont refusées sans consommer
|
||||
de riz. Le plant contient sa source ; le casser restitue l'eau.
|
||||
- Fraise, tomate, concombre, poivron, aubergine, raisin, piment, basilic,
|
||||
menthe et coriandre se récoltent au clic droit à maturité. Ils donnent
|
||||
une à quatre unités selon la plante et reviennent à l'âge 3.
|
||||
- Le **haricot** donne des haricots verts aux âges 5–6 et des haricots secs
|
||||
à l'âge 7, puis revient à l'âge 3. Les autres cultures se récoltent par casse.
|
||||
- Tomate, maïs, concombre et haricot occupent **deux blocs dès l'âge 4**.
|
||||
La partie haute suit l'âge du pied ; son clic transmet la récolte ou la
|
||||
poudre d'os au pied. La casse ne produit qu'un seul butin. Un plafond bloque
|
||||
le passage au stade haut et la poudre d'os n'est pas consommée en vain.
|
||||
- Manger un **ananas** rend exactement une couronne en survie, pour replanter.
|
||||
Les fruits, légumes et herbes comestibles conservent leurs valeurs 26.2.
|
||||
Les grains secs et ingrédients de transformation ne deviennent pas tous
|
||||
des aliments crus par cet import.
|
||||
|
||||
Le **caféier** se plante avec un grain vert sur un sol admis par les buissons
|
||||
vanilla. Il croît sur quatre âges, donne des cerises aux âges 2–3 et revient
|
||||
à l'âge 1 après récolte. Il n'a ni épines, ni ralentissement du buisson à baies.
|
||||
Les cerises donnent deux grains ; le fumoir torréfie les grains verts.
|
||||
Les boissons et les appareils culinaires restent dans les tickets suivants.
|
||||
|
||||
Le **citronnier** et l'**olivier** poussent depuis leurs propres pousses :
|
||||
forme de chêne pour le premier, forme d'acacia pour le second, avec bois
|
||||
vanilla. Les feuilles fruitières sont créées directement par les arbres,
|
||||
sans scanner ou convertir les feuilles d'un arbre voisin. Une feuille sur
|
||||
douze environ porte un fruit à la croissance ; les fruits reviennent ensuite
|
||||
rarement par tick aléatoire, comme dans l'intention historique. Le clic droit
|
||||
récolte un fruit sans arracher les feuilles ; cisailles et Toucher de soie
|
||||
récupèrent les feuilles, sinon elles peuvent donner une pousse.
|
||||
|
||||
Les recettes natives de récupération des semences et de torréfaction sont
|
||||
disponibles pour la fabrication manuelle. Le compostage utilise le composant
|
||||
`minecraft:compostable` et les probabilités natives 26.3, au lieu de l'ancienne
|
||||
table statique Java. Les tags de cultures, maintien de terre labourée,
|
||||
feuilles, pousses et nourriture des poules sont additifs.
|
||||
|
||||
## Accès pour les essais
|
||||
|
||||
Créer un **nouveau monde de développement** en créatif, prendre les semences
|
||||
dans **Naturel** et les récoltes dans **Nourriture et boissons**. Sur un monde de test où les
|
||||
commandes sont autorisées :
|
||||
|
||||
```mcfunction
|
||||
/give @s sanctuary:tomato_seeds 16
|
||||
/give @s sanctuary:rice 16
|
||||
/give @s sanctuary:coffee_beans 16
|
||||
/give @s sanctuary:lemon_sapling 4
|
||||
/give @s sanctuary:olive_sapling 4
|
||||
```
|
||||
|
||||
Les infobulles FR/EN expliquent la plantation du riz et du caféier.
|
||||
Le bloc d'ananas sauvage est porté pour le futur peuplement, sans apparition
|
||||
naturelle activée dans ce lot.
|
||||
|
||||
## Génération et sauvegardes
|
||||
|
||||
Les deux nouvelles définitions `sanctuary:lemon_tree` et
|
||||
`sanctuary:olive_tree` servent aux **pousses plantées**, avec leurs fournisseurs
|
||||
de feuillage `sanctuary:lemon_foliage` et `sanctuary:olive_foliage`. Leurs formes
|
||||
reprennent les paramètres exacts des arbres `oak` et `acacia` de Minecraft
|
||||
26.3 finale, adaptés au feuillage Sanctuary. Ce premier contrat de pousses
|
||||
fruitières est **IA-02 / beta.300** ; graine de validation : **300**.
|
||||
|
||||
Aucune nouvelle feature n'est ajoutée aux biomes ou aux étapes de décoration.
|
||||
L'apparition naturelle et la découverte des premières semences en survie
|
||||
restent un lot séparé. Aucun ancien chunk n'est repeuplé ou régénéré. Le client
|
||||
de validation utilise un monde plat Sanctuary Test neuf, jamais une sauvegarde
|
||||
personnelle. Les 30 nouveaux blocs utilisent les états natifs de Minecraft :
|
||||
âge, partie haute, distance au tronc, persistance, eau et fructification.
|
||||
Aucun format de sauvegarde existant n'est réécrit ; aucun monde 26.2 n'est migré.
|
||||
|
||||
La **vanille grimpante** reste dans IA-03. Le chaudron, les plats ratés,
|
||||
le séchoir/saucisson, la poêle et la cuisinière restent dans IA-04 à IA-08.
|
||||
Leurs textures déjà importées ne signifient pas que leurs comportements
|
||||
sont activés par ce lot.
|
||||
|
||||
## Sources et reproductibilité
|
||||
|
||||
Le port adapte les classes agricoles de `26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later, en lecture seule.
|
||||
Les registres sont séparés des monstres, de Canaplia et des appareils culinaires.
|
||||
Les changements d'API 26.3 sont vérifiés dans le JAR exact de Minecraft utilisé
|
||||
par Loom : végétation, prédiction d'inventaire, compostage, butin, arbres et
|
||||
fournisseurs d'états. Aucun mod agricole tiers n'est ajouté.
|
||||
|
||||
`scripts/data/agriculture.json` décrit le catalogue et les formes des arbres.
|
||||
`scripts/agriculture_resources.py` produit modèles, objets, états de blocs,
|
||||
butins, recettes, tags et définitions des arbres dans le répertoire de build,
|
||||
par `generateAgricultureResources`. Les 343 PNG et leurs empreintes beta.299
|
||||
restent inchangés ; les 38 fichiers du créateur gardent la priorité.
|
||||
|
||||
## Validation
|
||||
|
||||
Le parcours graphique utilise **Vulkan / Apple M1 / Sodium 0.9.2+mc26.3**,
|
||||
un monde de développement neuf de graine **300** et un client de heap 4 Gio :
|
||||
|
||||
- plantation en survie par les vrais paquets client/serveur, consommation
|
||||
d'une semence, poudre d'os et casse de la partie haute ;
|
||||
- **313 états de blocs** avec géométrie et textures réellement chargées,
|
||||
**45 modèles d'objets** avec leurs sprites fournis ;
|
||||
- vérification des deux plans croisés de l'oignon et de l'ail et des quatre
|
||||
plans conservés pour le maïs et le riz ;
|
||||
- onglets vanilla Naturel et Nourriture et boissons : présence effective des
|
||||
ajouts, absence de nouvel onglet, captures **FR/EN et GUI 2/3/4** ;
|
||||
- croissance des deux arbres et fermeture/réouverture réelle du monde :
|
||||
**173 états agricoles** conservés, dont les âges et la fructification.
|
||||
|
||||
La construction finale `check build assemblePack` réussit en **3 min 6 s**,
|
||||
159 tâches, avec **34 GameTests serveur requis réussis** : 17 scénarios
|
||||
agricoles et 17 régressions des recettes, de la progression et de la
|
||||
connaissance alimentaire. Le parcours client final réussit en **53 s**.
|
||||
|
||||
Le JAR contient les modèles croisés attendus pour les huit âges des 15
|
||||
cultures et les classes agricoles identiques aux classes vérifiées. Les
|
||||
343 textures correspondent au reçu beta.299. Les JAR des profils packwiz
|
||||
client et serveur sont strictement identiques au binaire contrôlé ; le
|
||||
template personnel contient les mêmes PNG. Version et index des packs vérifiés.
|
||||
|
||||
SHA-256 de `sanctuary-beta.300.jar` :
|
||||
`d432015abbb52154af8ec2a2b9e31a73374133e6909b954b0fc54a15397661d7`.
|
||||
Reçu local complémentaire : `build/agriculture300-validation.json`.
|
||||
|
||||
Commandes de validation :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=agriculture300,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryAgriculture300ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=agriculture300 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Les journaux restent ignorés dans `build/agriculture300-*.log` et les captures
|
||||
dans `mods/sanctuary/build/run/clientGameTest/screenshots/`. Aucun essai
|
||||
OpenGL n'est lancé ou revendiqué. Les autres moteurs graphiques, un serveur
|
||||
multijoueur distant et une partie de survie depuis zéro sans commandes ne
|
||||
sont pas validés par ce lot ; la découverte naturelle des semences est différée.
|
||||
@@ -0,0 +1,140 @@
|
||||
# APT-297 — prix des aptitudes selon leur portée
|
||||
|
||||
Demande du créateur du 31 octobre 2026. Branche `codex/aptitude-prices`.
|
||||
Préparation locale **beta.297**, isolée depuis le commit beta.293
|
||||
`74dc1265`. Les travaux locaux beta.294–296 restent dans le dépôt initial. Le Catalogue des recettes devient un achat à 30 niveaux.
|
||||
|
||||
## Grille de prix
|
||||
|
||||
Les prix sont des **niveaux d’XP**, dépensés une seule fois. Les gestes et
|
||||
petites aides restent accessibles tôt ; les outils de connaissance et de
|
||||
fabrication avancée demandent davantage de progression.
|
||||
|
||||
| Aptitude | Niveaux | Intention |
|
||||
| --- | ---: | --- |
|
||||
| Noms des créatures | 2 | Petite aide d’identification |
|
||||
| Se reposer | 4 | Geste de survie simple |
|
||||
| Zoom | 5 | Aide d’observation ponctuelle |
|
||||
| Savoir alimentaire | 6 | Connaissance générale des aliments |
|
||||
| Nage | 8 | Déplacement utile à l’exploration |
|
||||
| Rangement | 10 | Confort permanent d’inventaire |
|
||||
| Grande carte | 12 | Lecture et exploration du territoire |
|
||||
| Étude des familiers | 15 | Déchiffrage de l’ensemble des familiers |
|
||||
| Lien actif | 20 | Accès aux pouvoirs de travail des familiers |
|
||||
| Forgerie | 20 | Enclumes et table de forge |
|
||||
| Alchimie | 25 | Accès personnel aux alambics |
|
||||
| Enchantement | 30 | Amélioration avancée de l’équipement |
|
||||
| Catalogue des recettes | 30 | Consultation complète des découvertes et recettes |
|
||||
|
||||
S’asseoir et s’allonger restent gratuits. Les six compétences, leurs paliers,
|
||||
la fabrication manuelle, les découvertes et les conditions des postes natifs
|
||||
conservent leurs règles. Acheter l’aptitude d’un métier ne paie pas les coûts
|
||||
vanilla de ses opérations. Le même tarif alimente l’interface FR/EN et le
|
||||
contrôle d’achat côté serveur.
|
||||
|
||||
L’achat du Catalogue synchronise immédiatement l’XP et l’écran de progression,
|
||||
comme les autres aptitudes. En solo, la pause traitait bien l’achat mais
|
||||
retardait auparavant le compteur d’XP natif jusqu’à la reprise du jeu.
|
||||
|
||||
## Contrat de transition
|
||||
|
||||
Aucun identifiant `sanctuary:*`, format de sauvegarde de joueur, attachement
|
||||
ou protocole de paquet n’est remplacé. Aucun monde personnel n’est ouvert.
|
||||
|
||||
Les reçus historiques à **4 niveaux** de Catalogue, Savoir alimentaire et
|
||||
Étude des familiers restent valides, avec leur prix, date et découvertes.
|
||||
Les nouveaux reçus portent respectivement 30, 6 et 15 niveaux, dans le même
|
||||
schéma 1. Les autres montants restent refusés. Les autres achats conservent
|
||||
leur historique ou leur booléen acquis. Aucun supplément, remboursement ou
|
||||
rachat n’est demandé aux anciens propriétaires ; mort et New Game+ gardent
|
||||
les acquisitions.
|
||||
|
||||
Les configurations serveur adoptent les nouveaux prix au prochain chargement :
|
||||
|
||||
- `progression.json`, schéma **5 → 6** : seules les valeurs historiques
|
||||
exactement égales à 4 de `namesCost`, `atlasCost`, `sortingCost` et
|
||||
`swimmingCost` deviennent 2, 12, 10 et 8. Les autres valeurs personnalisées,
|
||||
les prix des compétences et les réglages restent conservés. Les anciens
|
||||
schémas passent par leurs transitions existantes puis celle-ci.
|
||||
- `companion-powers.json`, schéma **1 → 2** : `activeCost` à 4 devient 20.
|
||||
Les autres tarifs, espèces et réglages sont conservés. Le marqueur `.v2`
|
||||
historique garde sa responsabilité sur les anciens délais des familiers ;
|
||||
la transition de prix fonctionne aussi lorsqu’il existe déjà.
|
||||
- Une configuration déjà au nouveau schéma n’est pas réécrite. Il reste
|
||||
possible d’y configurer explicitement un prix à 4. Une ancienne valeur
|
||||
personnalisée égale à 4 est indiscernable du défaut historique et suit la
|
||||
transition ci-dessus ; la redéfinir après transition si nécessaire.
|
||||
- Une configuration invalide reste refusée sans réécriture.
|
||||
|
||||
Client et serveur doivent être mis à jour ensemble. Une ancienne version ne
|
||||
sait pas lire les nouveaux schémas de configuration ni les nouveaux montants
|
||||
des trois reçus : un retour arrière exige une sauvegarde préalable des
|
||||
configurations et données de joueurs, sans modifier les nouveaux reçus à la
|
||||
main.
|
||||
|
||||
## Vérification
|
||||
|
||||
Commandes de référence :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=aptitudes236,forgerie238,progression,movement,sorting,recipes,foodknowledge,companions,familiar,starter,refonte \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryAptitudes236ClientTests=true -PsanctuaryClientGraphicsBackend=vulkan
|
||||
```
|
||||
|
||||
Les tests ciblent les paiements exacts des treize aptitudes, le refus à un
|
||||
niveau du tarif et le refus du rachat même avec assez d’XP ; ils couvrent
|
||||
également les reçus historiques, le rechargement natif, la mort, le New Game+,
|
||||
les transitions de configuration et les menus des métiers.
|
||||
|
||||
**103 tests serveur requis réussis**, puis de nouveau 103/103 après le
|
||||
correctif de synchronisation d’XP. Le dernier `check build assemblePack`
|
||||
réussit en **1 min 17 s**. Les **109 contrôles purs** ont été exécutés au cours
|
||||
des passages précédents : le premier a été interrompu lors du rattachement
|
||||
du dossier de travail, après 56 contrôles terminés. La reprise puis le dernier
|
||||
build excluent uniquement les contrôles purs déjà réussis, sans retirer les
|
||||
tests serveur. Les commandes exactes et listes sont conservées dans
|
||||
`build/aptitude-prices-beta297-resumed-checks.json` et
|
||||
`build/aptitude-prices-beta297-final-checks.json`. Les contrôles de version,
|
||||
d’index, de textures et de distribution restent actifs.
|
||||
|
||||
Journaux : `build/aptitude-prices-beta297-check-build-pack.log`,
|
||||
`build/aptitude-prices-beta297-check-build-pack-final.log` et
|
||||
`build/aptitude-prices-beta297-final-build-pack.log`.
|
||||
|
||||
Parcours client final réussi en **51 s**, Minecraft 26.3, **Vulkan / MoltenVK
|
||||
1.4.2 sur Apple M1**, marqueur `APTITUDE_PRICES297_PASS` dans
|
||||
`build/aptitude-prices-beta297-client-vulkan-verified.log` :
|
||||
|
||||
- Les trois achats des métiers depuis leurs widgets dépensent 75 niveaux
|
||||
au total ; leurs libellés correspondent aux prix contrôlés côté serveur.
|
||||
- Catalogue affiche 30, reste inaccessible à 29, puis s’achète à 30 ; l’XP
|
||||
affichée devient immédiatement zéro pendant la pause solo.
|
||||
- FR/EN, GUI 2/3/4 : treize aptitudes, achats permanents, douze paires de
|
||||
désactivation/réactivation gratuites de Carte et Noms, conservation des
|
||||
preuves et de l’XP, défilement, redimensionnement et retour à Pause.
|
||||
- Les assertions du menu Pause reprennent le contrôle beta.275 actuel,
|
||||
remplaçant l’attente historique beta.233 de six entrées. **25 captures**
|
||||
dans `build/forgerie238-screenshots/` ; inspection visuelle du prix Catalogue,
|
||||
des métiers FR GUI 4 et de Survie EN GUI 3.
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
Versions du mod et du pack alignées sur **beta.297**. L’export
|
||||
[`Sanctuary-beta.297.mrpack`](../build/Sanctuary-beta.297.mrpack) est vérifié :
|
||||
16 762 112 octets, intégrité ZIP, dépendances Minecraft 26.3 / Fabric Loader
|
||||
0.19.5, un seul JAR Sanctuary identique au build final, sans classe de test,
|
||||
monde ou module de laboratoire. Reçu
|
||||
`build/aptitude-prices-beta297-artifact.json`.
|
||||
|
||||
- SHA-256 JAR : `5e18d3de7b56b9682f17025f57788426c349a981c796b7dc505582417bf6dbf7`.
|
||||
- SHA-256 MRpack : `ca0acfe1b4b5c90c4a61d792666aa0d0a686dce96af370c7c5e9ea6422cc0113`.
|
||||
|
||||
Les essais utilisent uniquement les sauvegardes de développement. Windows
|
||||
et multijoueur distant ne sont pas testés ; le rythme de cette grille reste
|
||||
à apprécier sur des séances de jeu longues.
|
||||
|
||||
Cette préparation n’inclut ni publication, ni avancée du canal packwiz, ni
|
||||
synchronisation de Prism ou du serveur Beta.
|
||||
@@ -1,5 +1,60 @@
|
||||
# Backlog Sanctuary
|
||||
|
||||
## IA-01 à IA-10 — Refonte cuisine et agriculture d'It's Alive !
|
||||
|
||||
**IA-10, préparation locale beta.315 :** [saucisson séché posable et mangeable
|
||||
en quatre tranches](sausage-slices-beta315.md), huit points de nourriture au
|
||||
total, quatre orientations et sauvegarde native. Même branche locale,
|
||||
sans publication.
|
||||
|
||||
**IA-09, préparation locale beta.314 :** [fromage en sept parts posées et quatre
|
||||
qualités de vin, après 3 minutes de fermentation puis 1/3/7 jours réels
|
||||
au tonneau](cheese-wine-beta314.md). Le vieillissement continue jeu fermé.
|
||||
Même branche locale, sans publication.
|
||||
|
||||
**IA-06, préparation locale beta.313 :** [saucisson préparé puis séché cinq
|
||||
minutes sur quatre crochets indépendants, protection de la pluie et sauvegarde](drying-rack-beta313.md).
|
||||
Même branche locale, sans publication.
|
||||
|
||||
**CUI-305, préparation locale beta.305 :** [écrasement direct des fruits](crushing-beta305.md).
|
||||
La presse est retirée des recettes, du créatif et de JEI. Huit paliers à piétiner,
|
||||
neuf portions par bloc, écrasement au piston et course complète de 27 blocs
|
||||
pour le super piston. Les autres appareils restent en place.
|
||||
|
||||
**IA-04/05/07/08, préparation locale beta.304 :** [six appareils culinaires et
|
||||
80 procédés physiques](kitchen-beta304.md). Chaudron depuis l'eau vanilla,
|
||||
poêle native avec contenu visible, plats ratés, cuisinière 3 × 3, fermentation
|
||||
temporisée, moulin et pressoir à piston. À cette étape, les six appareils étaient portés ;
|
||||
la refonte de pose/orientation de la poêle, le séchoir et les nouveaux plats
|
||||
restaient ouverts. Même branche locale, sans publication.
|
||||
|
||||
**IA-05, préparation locale beta.303 :** [92 recettes alimentaires historiques,
|
||||
ingrédients et plats jouables](cuisine-beta303.md), avec table et four/fumoir.
|
||||
La suite beta.304 remplace la fermentation instantanée et porte les appareils
|
||||
et les plats ratés. Même branche locale, sans publication.
|
||||
|
||||
**Premier lot graphique importé en beta.299 locale**, branche
|
||||
`codex/itsalive-26-3`, à la demande du 28 octobre 2026 :
|
||||
343 textures, dont les 38 fichiers `food/` prioritaires, avec reçu de provenance
|
||||
et vérification des empreintes. Aucun bloc, objet ou système agricole ajouté
|
||||
au registre par ce lot. [Périmètre, catalogue et tickets](itsalive-26-3.md) :
|
||||
cultures/arbres/caféier, vanille grimpante, chaudron, plats ratés et recettes,
|
||||
saucisson au séchoir, poêle et cuisinière four + table de fabrication.
|
||||
Suite par incréments locaux ; aucune publication ou mise à jour d'installation.
|
||||
|
||||
**IA-02, préparation locale beta.300 :** [20 cultures, deux arbres fruitiers
|
||||
et caféier jouables](agriculture-beta300.md), 45 objets créatifs, modèles,
|
||||
butins et recettes natifs 26.3. Apparition naturelle, vanille grimpante et
|
||||
cuisine restent dans les prochains lots. Même branche `codex/itsalive-26-3`.
|
||||
|
||||
**IA-03, préparation locale beta.301 :** [vanille attachée aux bûches et
|
||||
croissance vers le haut](vanilla-beta301.md), sans propagation descendante,
|
||||
avec gousses et pose à plusieurs faces. Les appareils culinaires et le
|
||||
peuplement naturel restent à traiter. Même branche, sans publication.
|
||||
|
||||
**Correction locale beta.302 :** [les quatre textures de vanille sont
|
||||
reprises en 16 × 16 pixels](vanilla-16px-beta302.md), sur le même plan unique.
|
||||
|
||||
## HELLO-264 — Menu central et sol commun — livré localement
|
||||
|
||||
Sur `codex/hello-world-menu`, socle beta.263. Colonne centrale de 182 pixels,
|
||||
@@ -1958,6 +2013,12 @@ et le client graphique avec connexion réelle passent. Voir
|
||||
|
||||
## Réserve de thèmes futurs
|
||||
|
||||
Le cadrage du 26 octobre 2026 détaille les
|
||||
[tickets d'intégration du pack et des modules personnels](integrations-mods-next.md) :
|
||||
Simple Voice Chat, Bobby facultatif, Lithium, Entity Culling, Dozei Stream
|
||||
et Only Fun. Les quatre intégrations du pack sont préparées localement dans
|
||||
[beta.292](optional-mods-beta292.md) ; les deux modules personnels restent à cadrer.
|
||||
|
||||
Ces thèmes servent à retrouver la vision, pas à demander leur implémentation immédiate. On en extrait un ticket seulement lorsqu'il devient utile au prochain incrément jouable.
|
||||
|
||||
| Thème | Contenus à découper plus tard |
|
||||
|
||||
@@ -0,0 +1,120 @@
|
||||
# DIST-WEB — téléchargement direct d'une instance Prism prête
|
||||
|
||||
Branche `codex/beta-download`, serveur dédié CT 350 sur `gpu`. Cette livraison
|
||||
conserve les binaires immuables beta.280 et ne modifie ni monde ni format de
|
||||
sauvegarde. L'Alpha reste hors cible.
|
||||
|
||||
## Résultat pour le joueur
|
||||
|
||||
Le bouton **Télécharger** de [Sanctuary Web](https://sanctuary-minecraft.net)
|
||||
donne directement le fichier **Sanctuary-Beta.zip** :
|
||||
|
||||
```text
|
||||
https://sanctuary-minecraft.net/downloads/sanctuary-prism.zip
|
||||
```
|
||||
|
||||
Le joueur importe ce ZIP dans Prism (**Ajouter une instance → Importer depuis
|
||||
un ZIP**), puis lance **Sanctuary Beta**. Packwiz télécharge le pack complet au
|
||||
premier lancement et suit le même canal aux lancements suivants. La commande
|
||||
avant lancement et le bootstrap sont déjà inclus ; aucune configuration manuelle
|
||||
ou téléchargement séparé d'outil n'est demandé.
|
||||
|
||||
Le format ZIP d'instance Prism conserve ces réglages, contrairement à un MRpack
|
||||
standard. Le MRpack beta.280 reste accessible par son ancienne adresse pour
|
||||
compatibilité des liens, sans devenir un deuxième bouton du site. Le parcours
|
||||
manuel de configuration et son lien dans le pied de page sont retirés.
|
||||
|
||||
L'archive contient uniquement `instance.cfg`, `mmc-pack.json`, l'icône,
|
||||
`minecraft/packwiz-installer-bootstrap.jar` et, à partir de la préparation
|
||||
beta.291, `minecraft/packwiz-installer.jar` avec le
|
||||
[logo Sanctuary embarqué](packwiz-logo-beta291.md). Elle démarre avec zéro mod
|
||||
local. L'installateur est vérifié par SHA-256 et conservé par
|
||||
`--bootstrap-no-update` ; la mise à jour automatique des mods reste active.
|
||||
L'instance est nommée **Sanctuary Beta**, avec `ManagedPack=false`,
|
||||
`OverrideCommands=true`, la sélection automatique de Java et le canal stable :
|
||||
|
||||
```text
|
||||
https://git.botsu.net/koka/sanctuary-beta/raw/branch/packwiz/pack.toml
|
||||
```
|
||||
|
||||
Le nom du bouton et le téléchargement direct sont conservés. Le pied de page et
|
||||
le survol indiquent la version réellement publiée. Les réponses de téléchargement
|
||||
utilisent `Cache-Control: no-store` pour garder la même adresse à chaque livraison.
|
||||
|
||||
## Publication demandée via Codex
|
||||
|
||||
Aucune tâche périodique ne décide de publier une version. À la demande du créateur :
|
||||
|
||||
1. Vérifier et publier les nouveaux binaires immuables, puis le canal packwiz
|
||||
selon [le protocole de distribution](packwiz.md).
|
||||
2. Générer l'instance prête avec `python3 scripts/pack.py prism <url-du-canal>`.
|
||||
Joindre `build/Sanctuary-Prism-beta.xxx.zip` à la release, avec le MRpack et
|
||||
le kit serveur. L'export Prism est reproductible et conserve ses commandes.
|
||||
3. Mettre à jour la CT dédiée selon [le contrat serveur](server-pack.md), en
|
||||
conservant sauvegardes, réglages et secrets, puis vérifier son redémarrage.
|
||||
4. Publier le téléchargement Web après contrôle de cette CT et des deux archives :
|
||||
|
||||
```sh
|
||||
python3 scripts/publish_web_pack.py \
|
||||
--web-ct 320 --server-ct 350 --version beta.280 \
|
||||
--mrpack-url https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.280/Sanctuary-beta.280.mrpack \
|
||||
--prism-url https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.280/Sanctuary-Prism-beta.280.zip \
|
||||
--pack-url https://git.botsu.net/koka/sanctuary-beta/raw/branch/packwiz/pack.toml
|
||||
```
|
||||
|
||||
Cette dernière commande s'exécute sur `gpu`, où `pct` est disponible. `--dry-run`
|
||||
vérifie sans publier. Le script contrôle les index, les versions, les hashes des
|
||||
dépendances et le JAR Sanctuary de la CT, du canal et du MRpack. Il refuse une
|
||||
archive Prism sans commande active, visant un autre canal ou une autre plateforme,
|
||||
avec un bootstrap non vérifié ou des fichiers étrangers.
|
||||
|
||||
Les fichiers Web restent dans
|
||||
`/var/www/sanctuary/storage/app/distribution/releases/beta.xxx/prism/`.
|
||||
Chaque publication est immuable. Sous verrou, `current` bascule atomiquement après
|
||||
écriture complète. Les anciennes versions restent disponibles pour une reprise.
|
||||
Le script ne redémarre aucun serveur et ne change pas le canal lui-même.
|
||||
|
||||
## Vérifications
|
||||
|
||||
Huit tests Python couvrent l'alignement CT/canal/MRpack, le refus d'un serveur
|
||||
arrêté ou divergent, le contrat d'import Prism prêt, les fichiers interdits et la
|
||||
publication atomique avec conservation de la précédente en cas de conflit.
|
||||
Ils font partie de `./gradlew check`.
|
||||
|
||||
Les quatre tests de téléchargement et les trois tests des métriques Laravel
|
||||
passent, ainsi que Pint : le bouton sert un ZIP anonyme directement, le nom est
|
||||
`Sanctuary-Beta.zip`, les publications incomplètes restent indisponibles, et le
|
||||
changement de version ne demande pas de reconstruire le cache de configuration.
|
||||
Le MRpack reste téléchargeable par son ancien lien.
|
||||
|
||||
Les tests natifs utilisent une extraction de l'archive prête dans un chemin
|
||||
contenant des espaces, avec les variables de sa propre commande avant lancement.
|
||||
Ils exécutent packwiz sans interface ; aucun Minecraft ni monde personnel n'est
|
||||
ouvert. Les fichiers témoins de réglages, favoris et sauvegardes sont comparés
|
||||
avant et après synchronisation. Les journaux sont conservés sous
|
||||
`build/prism-ready-validation*/`, hors de Git.
|
||||
|
||||
`./gradlew check build assemblePack -PsanctuaryFocusedTests=recipes,progression
|
||||
-PsanctuaryAtlasOnly=true` réussit. L'archive prête mesure **92 417 octets**, SHA-256
|
||||
`30dd37f3a6e1d79f8b443f6312918258276c85d5b6a5e7fbdc9c3fea7562dbf2`.
|
||||
Une première tentative native reçoit des HTTP 502 de Gitea ; une nouvelle
|
||||
extraction entièrement vide réussit ensuite ses deux lancements de synchronisation.
|
||||
Le reçu est `build/prism-ready-validation-retry/validation.json`.
|
||||
|
||||
L'archive est ajoutée à la release beta.280 sans changer son tag ni ses artefacts
|
||||
existants. La CT Web publie ensuite le ZIP et le MRpack vérifiés dans la même
|
||||
bascule atomique. Le code Web est livré au commit
|
||||
`46d784ecbb8ba3d0f20199b85bcf486831ba3750` ; les changements préexistants sont
|
||||
conservés et les empreintes des comptes et permissions restent identiques.
|
||||
Sauvegarde privée :
|
||||
`/root/sanctuary-beta-maintenance/web-prism-ready-20261025-1792943502/`.
|
||||
|
||||
Le parcours navigateur **accueil → Télécharger → Sanctuary-Beta.zip reçu** est
|
||||
vérifié à 1280 × 900 et 390 × 844 : HTTP 200 direct, pas de changement de page,
|
||||
nom et SHA-256 identiques à l'archive testée, aucune erreur d'application ni
|
||||
débordement horizontal. Le lien de guide manuel est absent. Le MRpack historique
|
||||
répond toujours HTTP 200. Le navigateur utilisé est Playwright, le plugin
|
||||
Browser étant absent ; reçu et captures sous `/tmp/sanctuary-prism-ready-*`.
|
||||
Reçus opérationnels ignorés : `build/prism-ready-publication.json`,
|
||||
`build/prism-ready-web-publication.json`, `build/prism-ready-web-deployment.log`
|
||||
et `build/prism-ready-build.log`.
|
||||
@@ -0,0 +1,85 @@
|
||||
# ZOMBIES-284 — Boomer et bile
|
||||
|
||||
Branche `codex/boomer`, sur le socle local beta.283 conservé. État : implémenté et vérifié localement en beta.284.
|
||||
|
||||
## Contrat
|
||||
|
||||
Quatrième infecté : modèle adulte du zombie vanilla 26.3, t-shirt violet et
|
||||
pantalon sable recolorés pixel par pixel, visage/peau/UV/alpha conservés.
|
||||
Identifiants `sanctuary:boomer` et `sanctuary:boomer_spawn_egg`.
|
||||
Aucun bébé, y compris via œuf ou chargement ; pas de conversion en noyé.
|
||||
|
||||
- Sauvage : 10 PV, vitesse 0,20, mêlée 2, poursuite 32 blocs. À courte distance,
|
||||
prépare une gerbe pendant 20 ticks, puis vomit dans un cône de 5 blocs,
|
||||
orienté au début de la préparation. Recharge de 120 ticks. La bile révèle
|
||||
pendant 6 secondes et affaiblit pendant 3 secondes ; elle ne crée pas d'acide.
|
||||
- Une cible enduite attire jusqu'à six zombies déjà présents à 12 blocs, avec
|
||||
ligne de vue et chunks chargés, pendant six secondes au maximum. Pas de
|
||||
nouvelles créatures, de chargement distant ou d'horde générée. La diversion
|
||||
expire proprement et conserve la cible précédente si elle est encore valide.
|
||||
Retirer la révélation arrête aussi la diversion ; maximum 64 zombies détournés
|
||||
simultanément par serveur. Les projections touchent au plus 12 victimes.
|
||||
- À sa mort, éclaboussure unique de 3 blocs, 2 dégâts et bile, sans destruction
|
||||
de blocs ni feu. Une suppression administrative n'active pas l'éclaboussure.
|
||||
Les infectés de la famille et les joueurs créatifs/spectateurs sont protégés.
|
||||
Les murs et la différence de hauteur bloquent les projections.
|
||||
- Œuf créatif et apparition rare, poids 4 et groupe d'un dans les habitats
|
||||
de zombies de l'Overworld.
|
||||
- Familier rare, adulte miniature à taille variable persistante, 14 PV et
|
||||
vitesse 0,25. Gerbe automatique en cône et G d'éclaboussure à 3 blocs :
|
||||
dégâts, faiblesse et révélation passent par les règles communes des familiers,
|
||||
avec protection du propriétaire/alliés/duels. Le familier reste vivant et
|
||||
ne détourne pas de monstres contre des tiers.
|
||||
- Recharge du Boomer conservée au chargement ; préparation interrompue annulée.
|
||||
Les diversions sont transitoires ; aucun format existant ne change.
|
||||
|
||||
## Vérification
|
||||
|
||||
- Suite serveur ciblée : **68 tests réussis**, dont **14 nouveaux**. Fixtures
|
||||
plates explicites, graine de test `0`, aucun monde personnel ouvert.
|
||||
- Couverture Boomer : œuf/profil/spawn, règle adulte, préparation et vraie gerbe,
|
||||
esquive latérale, mur et étage, recharge après interruption et sur le tick
|
||||
exact du tir, sauvegarde/rechargement, mort native unique, suppression sans
|
||||
éclaboussure, famille protégée, six zombies maximum sans nouvelle entité,
|
||||
navigation/attaque native et restauration de la cible précédente après délai,
|
||||
absence de chargement distant, G et cône du familier avec protections communes,
|
||||
recharge partagée et tailles 120/500/1000/1500/3000/6000 conservant l'individu.
|
||||
- Parcours client natif **Vulkan / MoltenVK 1.4.2 / Apple M1**, Minecraft 26.3,
|
||||
Java 25, Loader 0.19.5, monde de test neuf de graine `284` : réussi avec arrêt
|
||||
normal du client. Appui réel sur G, dégâts/faiblesse/révélation, recharge et
|
||||
survie du familier ; gerbe sauvage, recrutement d'un zombie existant et
|
||||
éclaboussure après vrai dégât mortel. Trois tailles réelles 500/1000/1500,
|
||||
renderer adulte, œuf, infobulles et écran FR/EN aux échelles GUI 2/3/4 vérifiés.
|
||||
- La première vérification générale a rencontré le test préexistant
|
||||
`Companion019GameTests.creatureProfilesActuallyMove` (déplacement aérien).
|
||||
Les contrôles Boomer passaient ; la suite de 68 a ensuite repassé avec ce
|
||||
test inchangé. Journal conservé dans
|
||||
`build/boomer284-check-build-pack-attempt1.log`.
|
||||
|
||||
- `./gradlew check build assemblePack` réussi en **2 min 40 s**, avec
|
||||
`-PsanctuaryFocusedTests=boomer284,spitter283,charger282,infected280,familiar260,companions`
|
||||
et `-PsanctuaryAtlasOnly=true`. La suite complète ciblée repasse ses 68 tests.
|
||||
- PNG du Boomer comparé en RGBA à la recoloration attendue du zombie natif
|
||||
26.3 épinglé : **331 pixels de t-shirt et 239 de pantalon** modifiés,
|
||||
tête, peau, chaussures, alpha et coordonnées UV conservés. Les textures des
|
||||
trois infectés précédents restent identiques. L'œuf est une recoloration
|
||||
violette de la silhouette et des ombres de l'icône historique, sans changement
|
||||
d'alpha ; aucun outil de génération d'images utilisé.
|
||||
- JAR et export MRpack : ZIP intègres, version beta.284 et dépendances
|
||||
Minecraft 26.3 / Loader 0.19.5 contrôlées. Classes, œuf, texture, profil,
|
||||
loot, traductions et tags Boomer présents ; classes de tests exclues.
|
||||
Le JAR exporté est identique au JAR compilé. Pack beta.283 précédent conservé
|
||||
octet pour octet.
|
||||
|
||||
[Pack local beta.284](../build/Sanctuary-beta.284.mrpack), **16 650 758 octets**.
|
||||
SHA-256 : `4a27ce2b184c8797f0ed7891c6dc62d1db372e2fdabb4fd5de98389df16f25a3`.
|
||||
[Reçu et empreintes](../build/boomer284-validation.json).
|
||||
|
||||

|
||||
|
||||
La livraison reste locale : aucun tag/release, canal packwiz, serveur personnel
|
||||
ou instance Prism modifié. Les œufs restent créatifs ; leur acquisition en
|
||||
survie et les autres infectés demandent leurs propres tickets. Aucune génération
|
||||
de terrain ni sauvegarde personnelle modifiée.
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
{
|
||||
"version": "beta.311",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.311.jar",
|
||||
"sha256": "3fa69ebc452ad2bbc3e7d6992305e9349d2f34f04f666a3688453fbd2fe74409",
|
||||
"previous_verified_sha256": "4a2278d987b031b343a6d66694da50db0aeb408bb77785ce8c02ae0ed9174b26",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/CookingCauldronBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/CookingCauldronBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/CookingCauldronHud.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [],
|
||||
"removed_jar_entries": [],
|
||||
"generated_json_unchanged": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 195,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_compiled_classes_verified": 61,
|
||||
"cauldron_recipes_unchanged": 19,
|
||||
"manual_start": "stick",
|
||||
"failed_dish_from_cauldron": false,
|
||||
"milk_bucket_paid_at_completion": true,
|
||||
"unchanged_native_inventory_indices": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"preparation_storage_marker": 311,
|
||||
"unchanged_pngs": 1108,
|
||||
"server_required": 89,
|
||||
"cauldron_scenarios": 13,
|
||||
"client_vulkan": {
|
||||
"log": "build/cauldron311-client.log",
|
||||
"screenshots": "build/cauldron311-screenshots",
|
||||
"screenshot_count": 11,
|
||||
"world_seed": 311,
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"audio_engine_listener": true
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"build_log": "build/cauldron311-build.log"
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
# CUI-311 / IA-04 — chaudron préparé puis remué
|
||||
|
||||
Suite locale beta.312 : [la recette se répète après son premier geste et
|
||||
reste mémorisée après la collecte des plats](cauldron-repeat-beta312.md).
|
||||
Le comportement à lot unique décrit ci-dessous est celui de beta.311.
|
||||
|
||||
Choix du créateur le 29 octobre 2026 : préparer les ingrédients, puis **remuer
|
||||
avec un bâton** pour lancer la cuisson. Les mélanges incomplets ne deviennent
|
||||
plus des plats ratés. Le lait reste un ingrédient non payé jusqu'à la fin ;
|
||||
le seau vide est éjecté à la préparation terminée. Des sons Minecraft discrets
|
||||
accompagnent les gestes et la cuisson. Même branche `codex/itsalive-26-3`,
|
||||
préparation locale **beta.311**, sans publication ou installation.
|
||||
|
||||
## Contrat de continuité avant modification
|
||||
|
||||
L'identifiant `sanctuary:cooking_cauldron`, les six cases d'ingrédients 0–5,
|
||||
la sortie 6 et `WaterUnits` restent inchangés. Les objets natifs gardent leurs
|
||||
composants et tailles maximales ; les récipients non empilables sont stockés
|
||||
séparément. Une vue agrégée sert uniquement à reconnaître la recette et ses
|
||||
quantités, sans déplacer les objets stockés.
|
||||
|
||||
Le champ `AssemblyComplete` devient l'autorisation donnée par le geste de
|
||||
remuer. `CauldronPreparationVersion=311` distingue ce sens de l'ancien départ
|
||||
automatique. À la lecture d'une sauvegarde antérieure sans ce marqueur, seuls
|
||||
l'autorisation et l'avancement de cuisson non payé sont remis à zéro ; les
|
||||
six cases, la sortie déjà terminée et l'eau sont conservées. La préparation
|
||||
attend alors un nouveau geste. Les anciennes dates restent lisibles mais ne
|
||||
créent plus de délai d'échec. Une sauvegarde beta.311 conserve une cuisson
|
||||
explicitement lancée, qui reprend sur ses ticks restants avec de la chaleur.
|
||||
|
||||
Changer un ingrédient ou l'eau annule la cuisson non payée et demande de
|
||||
remuer à nouveau. Une cuisson produit un lot de la recette choisie ; elle ne
|
||||
relance pas automatiquement une recette depuis les restes. Le bâton n'est
|
||||
pas consommé. Le chaudron ordinaire vide ou rempli d'eau devient la variante
|
||||
culinaire seulement lorsqu'un véritable ingrédient tombe dans son ouverture.
|
||||
Les annulations rendent le lait plein, la casse rend les objets encore
|
||||
stockés et la collecte finale restaure le chaudron vanilla avec son eau exacte.
|
||||
|
||||
Revenir à beta.310 exige d'abord de récupérer les préparations non terminées :
|
||||
l'ancien code reprend son départ automatique. Aucun monde personnel n'est
|
||||
modifié ; les validations utilisent des fixtures et mondes neufs ignorés.
|
||||
|
||||
## Gestes et recettes
|
||||
|
||||
Jeter le premier ingrédient dans l'ouverture d'un chaudron vanilla vide ou
|
||||
rempli d'eau. Ajouter les autres ingrédients par clic, jet dans l'ouverture
|
||||
ou entonnoir. Un objet posé à côté ou sur l'extérieur du rebord n'est pas
|
||||
capturé. La recette reste modifiable sans compte à rebours d'échec.
|
||||
|
||||
Un clic avec un bâton démarre une recette complète, avec une source de
|
||||
chaleur dessous. Le bâton reste entier. Un mélange incomplet, un chaudron
|
||||
froid ou une préparation déjà en cours donnent une indication FR/EN, sans
|
||||
consommer d'ingrédient. Une modification annule l'avancement, sans paiement,
|
||||
et demande un nouveau geste. La perte de chaleur suspend simplement les ticks
|
||||
restants d'une recette déjà lancée.
|
||||
|
||||
Les **19 recettes historiques** et leurs durées restent inchangées. Les lots
|
||||
regroupent les ingrédients identiques à la reconnaissance, tout en conservant
|
||||
les vrais seaux non empilables dans les six cases natives. Trois seaux de lait
|
||||
produisent six crèmes et rendent trois seaux, après la durée entière. Une
|
||||
préparation ne poursuit pas une autre recette depuis ses restes. La sortie
|
||||
et les ingrédients peuvent se récupérer, et l'eau restante retrouve son
|
||||
niveau vanilla exact lorsque la variante culinaire se vide.
|
||||
|
||||
Les sons sont envoyés côté serveur, une fois par événement : ajout (volume
|
||||
0,18 ; 0,35 pour le lait, limité à un son tous les quatre ticks), geste (0,30),
|
||||
mijotage (0,12 tous les 60 ticks réellement cuits), fin (0,35), service (0,25).
|
||||
Événements Minecraft : `entity.generic.splash`, `item.bucket.empty`,
|
||||
`item.bottle.empty`, `block.bubble_column.bubble_pop`,
|
||||
`block.brewing_stand.brew`, `entity.item.pickup`. Aucun fichier audio n'est
|
||||
importé. Un chaudron froid ou non lancé ne joue pas le son de mijotage.
|
||||
|
||||
## Vérifications
|
||||
|
||||
Treize cas serveur natifs couvrent le jet de lait dans un chaudron vide,
|
||||
le vrai geste au bâton, l'absence d'échec et de paiement prématuré, les
|
||||
**19 recettes complètes**, les lots de seaux séparés, l'absence de recette
|
||||
suivante automatique, les changements de préparation/eau, le manque de chaleur,
|
||||
la pause, la sauvegarde et l'ancien avancement désarmé, les objets hors du
|
||||
bol, les récipients jamais réabsorbés, la casse et l'entonnoir natif.
|
||||
Les vérifications culinaires historiques ont été adaptées au geste manuel ;
|
||||
les fixtures successives éliminent leurs anciens objets avant de préparer
|
||||
la recette suivante, pour ne pas introduire d'ingrédients parasites.
|
||||
|
||||
Le parcours client réussi sous **Vulkan / Apple M1**, avec
|
||||
**Sodium 0.9.2+mc26.3**, dure **1 min 15 s** sur un monde plat neuf de graine
|
||||
**311**. Il couvre une vraie touche Q de jet de lait, la capture par les ticks
|
||||
natifs, **650 ticks d'attente sans recette ni échec**, les HUD FR/EN aux
|
||||
échelles 2, 3 et 4, les vrais paquets de geste et de service, la cuisson réelle,
|
||||
le seau éjecté après le paiement, la fermeture/réouverture du monde et un
|
||||
mélange invalide qui conserve le lait. Les 19 recettes sont visibles dans JEI.
|
||||
Le jet Q est replacé au-dessus de l'ouverture par la fixture ; la chute,
|
||||
la capture et la suite n'utilisent aucun raccourci de cuisson.
|
||||
|
||||
Un écouteur du moteur audio client a observé `item.bucket.empty`,
|
||||
`item.bottle.empty`, deux `block.bubble_column.bubble_pop`,
|
||||
`block.brewing_stand.brew` et `entity.item.pickup`. Ce contrôle vérifie l'envoi
|
||||
et la réception des événements ; les volumes restent réglables dans la
|
||||
catégorie native Blocs. Onze captures sont archivées dans
|
||||
`build/cauldron311-screenshots/`, avec les journaux ignorés
|
||||
`build/cauldron311-client.log` et `build/cauldron311-build.log`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCauldron311ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=cauldron311 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
`check build assemblePack` a réussi en **2 min 52 s**, avec **89 tests serveur
|
||||
obligatoires**. L’audit strict à beta.310 ne trouve aucun fichier ajouté ou
|
||||
retiré du JAR : seuls les trois fichiers de classes du chaudron, les cinq
|
||||
libellés FR/EN, la version et les crédits changent. Les 19 recettes, les
|
||||
432 JSON de cuisine, 195 d’appareils et 376 d’agriculture ainsi que les
|
||||
**1 108 PNG** restent identiques. Les classes compilées sont comparées au
|
||||
JAR et les copies client/serveur sont identiques. Le modèle de pack de
|
||||
ressources ne change que ses deux fichiers de langue et les crédits.
|
||||
|
||||
[Reçu de vérification](cauldron-beta311-verification.json). JAR local :
|
||||
`mods/sanctuary/build/libs/sanctuary-beta.311.jar`
|
||||
|
||||
SHA-256 :
|
||||
`3fa69ebc452ad2bbc3e7d6992305e9349d2f34f04f666a3688453fbd2fe74409`
|
||||
|
||||
Aucun push, tag, publication, avancement du canal packwiz, installation
|
||||
Prism ou déploiement sur un serveur personnel n’a été effectué.
|
||||
@@ -0,0 +1,67 @@
|
||||
{
|
||||
"version": "beta.312",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.312.jar",
|
||||
"sha256": "90349a998970030ec0bfd880b307b9162e76fd0f460d70f1c9ac8ad2c115c8bd",
|
||||
"previous_verified_sha256": "3fa69ebc452ad2bbc3e7d6992305e9349d2f34f04f666a3688453fbd2fe74409",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/CookingCauldronBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/AbstractTimedCulinaryBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/CookingCauldronBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/CookingCauldronHud.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [],
|
||||
"removed_jar_entries": [],
|
||||
"generated_json_unchanged": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 195,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_compiled_classes_verified": 61,
|
||||
"cauldron_recipes_unchanged": 19,
|
||||
"manual_start": "stick",
|
||||
"failed_dish_from_cauldron": false,
|
||||
"milk_bucket_paid_at_completion": true,
|
||||
"unchanged_native_inventory_indices": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6
|
||||
],
|
||||
"preparation_storage_marker": 311,
|
||||
"optional_storage_fields": [
|
||||
"CauldronRepeatRecipe",
|
||||
"CauldronCycleBatches"
|
||||
],
|
||||
"unchanged_pngs": 1108,
|
||||
"server_required": 100,
|
||||
"cauldron_scenarios": 11,
|
||||
"repeat_recipe": true,
|
||||
"cycle_quantity_fixed": true,
|
||||
"completed_client_batches": 4,
|
||||
"client_paid_milk_buckets": 5,
|
||||
"client_returned_buckets": 5,
|
||||
"client_total_cream": 10,
|
||||
"client_vulkan": {
|
||||
"log": "build/cauldron312-client.log",
|
||||
"screenshots": "build/cauldron312-screenshots",
|
||||
"screenshot_count": 10,
|
||||
"world_seed": 312,
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"audio_engine_listener": true
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"build_log": "build/cauldron312-build.log"
|
||||
}
|
||||
@@ -0,0 +1,129 @@
|
||||
# CUI-312 / IA-04 — répéter une recette dans le même chaudron
|
||||
|
||||
Demande du créateur du 29 octobre 2026 : refaire la même recette plusieurs
|
||||
fois sans recommencer toute la préparation. Après le premier geste au bâton,
|
||||
le chaudron garde la recette choisie et peut reprendre ses lots avec les mêmes
|
||||
ingrédients, y compris après avoir servi les plats. Préparation locale
|
||||
**beta.312**, même branche `codex/itsalive-26-3`, sans publication ni installation.
|
||||
|
||||
## Contrat de continuité avant modification
|
||||
|
||||
Les identifiants, les six entrées 0–5, la sortie 6, l'eau, les composants
|
||||
natifs et les quantités maximales restent inchangés. La cuisson garde ses
|
||||
lots historiques et ne paie les ingrédients et récipients qu'en fin de lot.
|
||||
|
||||
Le champ optionnel `CauldronCycleBatches` conserve la quantité fixée au début
|
||||
du lot non payé. Les ajouts en cours de cuisson restent pour le lot suivant ;
|
||||
ils ne terminent pas leur cuisson sur le dernier tick d’un lot déjà lancé.
|
||||
Une ancienne cuisson sans ce champ garde sa quantité disponible à la reprise.
|
||||
|
||||
Le champ optionnel `CauldronRepeatRecipe` enregistre l'identifiant exact de la
|
||||
recette autorisée au bâton. `AssemblyComplete` garde l'autorisation manuelle,
|
||||
y compris en attente d'ingrédients ou de place. Le marqueur de préparation
|
||||
manuelle **311** reste valide ; il ne désigne pas la version du mod.
|
||||
|
||||
Une ancienne préparation beta.311 lancée sans ce nouveau champ retrouve sa
|
||||
recette au premier tick chargé. Une préparation ancienne non lancée ne
|
||||
s'autorise pas toute seule. Les sauvegardes antérieures au démarrage manuel
|
||||
restent désarmées, avec ingrédients, eau et sortie conservés. Une recette
|
||||
mémorisée disparue du datapack arrête l'autorisation sans perte d'objets.
|
||||
Une sauvegarde beta.312 garde la recette exacte, les ticks non payés et les
|
||||
objets ; le rechargement ne termine pas de cuisson hors ligne.
|
||||
|
||||
Ajouter un ingrédient de la recette mémorisée ou remettre son eau alimente
|
||||
la même série sans annuler le travail en cours. Retirer un ingrédient,
|
||||
diminuer l'eau ou ajouter un ingrédient d'une autre recette annule le travail
|
||||
non payé et demande un nouveau geste. Servir la sortie laisse la série en
|
||||
place ; le chaudron attend la même recette et ne transforme pas ses restes
|
||||
en un autre produit. Une sortie pleine ou la perte de chaleur suspendent la
|
||||
série ; récupérer les plats ou remettre de la chaleur permet de reprendre.
|
||||
|
||||
Maj-clic à main vide arrête explicitement la série en conservant les objets.
|
||||
Un chaudron vide retrouve alors sa variante vanilla et son eau exacte.
|
||||
Le retour à beta.311 conserve les sept cases et les plats, mais perd la
|
||||
répétition : récupérer les préparations en cours avant un tel retour.
|
||||
Aucun monde personnel n'est ouvert ou modifié par cette préparation locale.
|
||||
|
||||
## Utilisation
|
||||
|
||||
1. Préparer les ingrédients et remuer une première fois avec un bâton.
|
||||
2. Ajouter les mêmes ingrédients quand nécessaire, par clic, jet dans
|
||||
l'ouverture ou entonnoir. Les quantités ajoutées pendant un lot attendent
|
||||
le lot suivant, avec toute sa durée de cuisson.
|
||||
3. Prendre les plats à main vide laisse la série en place, même si un lot
|
||||
suivant est déjà en train de cuire. Une sortie pleine conserve ses objets
|
||||
et attend leur collecte ; un manque d'ingrédients attend le réassort.
|
||||
4. Maj-clic à main vide arrête la série. Les objets restent récupérables et
|
||||
le chaudron vide retrouve sa variante vanilla. Un nouveau plat différent
|
||||
demande de préparer ses ingrédients et de remuer à nouveau.
|
||||
|
||||
Les quantités historiques par lot sont conservées : plusieurs recettes
|
||||
complètes déjà présentes au début d'un lot peuvent cuire ensemble. Un apport
|
||||
pendant ce lot n'augmente pas rétroactivement sa quantité. Un lot paie toujours
|
||||
ses vrais ingrédients en fin de cuisson, avec ses récipients. Les sons de fin
|
||||
restent limités à un par lot terminé, même lorsqu'une ancienne sortie est
|
||||
encore stockée. Les 19 recettes et leurs durées restent inchangées.
|
||||
|
||||
Le HUD FR/EN montre les plats stockés avec l'état de la série : cuisson,
|
||||
ingrédients manquants, chaleur manquante ou sortie pleine.
|
||||
|
||||
## Vérifications locales
|
||||
|
||||
Onze nouveaux cas serveur vérifient : lots qui s'accumulent, service natif en
|
||||
cours de cuisson, réapprovisionnement compatible sans annulation, ingrédients
|
||||
nouveaux conservés pour leur cycle entier, changement de préparation,
|
||||
sortie pleine puis reprise, recette exacte conservée malgré l'eau restante,
|
||||
réassort d'eau et pause sans chaleur, entonnoir natif, sauvegarde d'un lot avec
|
||||
sa quantité fixée et un autre lot en attente, reprise beta.311 autorisée,
|
||||
recette supprimée sans remplacement implicite et arrêt explicite.
|
||||
|
||||
Le parcours client **Vulkan / Apple M1**, avec **Sodium 0.9.2+mc26.3**, a
|
||||
réussi en **1 min 58 s**, monde plat neuf de graine **312** :
|
||||
|
||||
- une vraie touche Q pour jeter le premier lait, puis un seul coup de bâton ;
|
||||
- des ajouts natifs pendant le premier lot, avec leur propre lot suivant ;
|
||||
- quatre lots réels donnant **dix crèmes pour cinq seaux de lait**, avec
|
||||
**cinq seaux vides** rendus et un seul son de fin par lot ;
|
||||
- ajout d'un lait alors que la sortie contient encore les plats précédents ;
|
||||
- service natif de six crèmes pendant la cuisson suivante, sans annulation ;
|
||||
- sauvegarde/réouverture conservant recette, lot non payé et plats servis,
|
||||
puis reprise avec la chaleur remise, sans nouveau geste ;
|
||||
- HUD FR/EN aux échelles 2, 3 et 4, avec contrôle de largeur et captures ;
|
||||
- vrai Maj-clic à main vide pour arrêter, puis collecte des quatre crèmes
|
||||
restantes et retour au chaudron vanilla.
|
||||
|
||||
La fixture replace le jet Q au-dessus de l'ouverture et retire la chaleur
|
||||
avant la fermeture du monde pour observer le lot non payé au rechargement.
|
||||
Les ingrédients, chutes, paiements, ticks de cuisson, interactions et quatre
|
||||
sons de fin sont réels. Dix captures sont archivées dans
|
||||
`build/cauldron312-screenshots/` ; les journaux de contrôle restent ignorés.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCauldron312ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=cauldron312 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
`check build assemblePack` a réussi en **2 min 51 s**, avec **100 tests serveur
|
||||
obligatoires**. L’audit strict à beta.311 ne trouve aucun fichier ajouté ou
|
||||
retiré du JAR : seuls les quatre fichiers de classes prévus (chaudron, HUD et
|
||||
point de sélection de recette partagé), les quatre libellés FR/EN, la version
|
||||
et les crédits changent. Les 19 recettes, les 432 JSON de cuisine, 195
|
||||
d’appareils et 376 d’agriculture, ainsi que les **1 108 PNG**, sont identiques.
|
||||
Les classes culinaires compilées sont comparées au JAR ; les copies
|
||||
client/serveur sont identiques. Le modèle de pack de ressources ne change
|
||||
que ses deux fichiers de langue et les crédits.
|
||||
|
||||
[Reçu de vérification](cauldron-repeat-beta312-verification.json). JAR local :
|
||||
`mods/sanctuary/build/libs/sanctuary-beta.312.jar`
|
||||
|
||||
SHA-256 :
|
||||
`90349a998970030ec0bfd880b307b9162e76fd0f460d70f1c9ac8ad2c115c8bd`
|
||||
|
||||
Aucun push, tag, publication, canal packwiz public, installation Prism ou
|
||||
serveur personnel n’a été modifié.
|
||||
@@ -0,0 +1,112 @@
|
||||
# ZOMBIES-282 — Chargeur
|
||||
|
||||
Branche `codex/charger`, sur le socle local beta.281 conservé. État : livré et vérifié localement.
|
||||
|
||||
## Contrat
|
||||
|
||||
- `sanctuary:charger`, œuf `sanctuary:charger_spawn_egg`, noms FR/EN. Modèle
|
||||
zombie adulte uniquement, tenue verte et pantalon anthracite ; texture native
|
||||
26.3 recolorée par script, visage, peau, chaussures et UV conservés.
|
||||
- Attributs de base : 10 PV, vitesse 0,27, mêlée 3, poursuite 36 blocs.
|
||||
Charge depuis 4 à 15 blocs avec ligne de vue et sol sous les pieds :
|
||||
préparation visible de 22 ticks, direction figée au départ, course de
|
||||
24 ticks au maximum, choc de 4 dégâts avec recul, récupération de 48 ticks,
|
||||
puis recharge de 100 ticks. Mêlée suspendue pendant ces trois phases.
|
||||
- La collision est celle du déplacement réel : pas de frappe à distance ou
|
||||
à travers un mur. Un joueur peut esquiver en sortant de la trajectoire.
|
||||
Obstacles, cible invalide ou bord d'une zone chargée terminent la charge.
|
||||
Aucune destruction de bloc, aucune téléportation ou génération forcée.
|
||||
- Spawn peu fréquent dans les habitats de zombies de l'Overworld, poids 4,
|
||||
un seul individu. Soleil, statut mort-vivant et absence de conversion en
|
||||
noyé comme l'Infecté. Les autres variantes restent à réaliser.
|
||||
- Familier adulte miniature, taille persistante variable, profil rare dédié :
|
||||
16 PV, vitesse 0,28, mêlée ; technique G de charge droite jusqu'à 8 blocs,
|
||||
préparation 22 ticks, récupération 24 ticks, recharge 12 secondes, dégâts 4.
|
||||
Variante apprise : ruée droite courte de 5 blocs. Droits, alliés, limites de
|
||||
dégâts et de contrôle restent ceux des familiers existants. Une charge
|
||||
déclenchée consomme sa recharge même si elle manque sa cible.
|
||||
- Œuf disponible en créatif ; pas de nouvelle acquisition en survie.
|
||||
|
||||
## Référence et sauvegardes
|
||||
|
||||
Référence en lecture seule : `../26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, variante `CHARGER` et
|
||||
`tickCharger`. Les phases de l'ancien comportement servent de référence ; le
|
||||
contrôle des coups repose ici sur la trajectoire réellement parcourue.
|
||||
|
||||
Le nouveau type a sa propre persistance native. Pour la charge, seule la recharge est sauvée ;
|
||||
une phase interrompue reprend au repos avec une recharge à la relecture.
|
||||
Les identifiants, formats, individus, œufs et textures déjà livrés restent
|
||||
stables. Aucun monde personnel ouvert ; aucun chunk ou terrain réécrit.
|
||||
|
||||
## Validation
|
||||
|
||||
Les essais serveur ciblés ont validé les phases du mob avec déplacement natif,
|
||||
le choc et son recul, la récupération sans double mêlée, l'esquive latérale,
|
||||
un mur ajouté après le départ, la persistance d'une charge interrompue, le
|
||||
profil et l'œuf, les dégâts du familier, sa trajectoire et sa recharge sur
|
||||
échec. Deux contrôles couvrent aussi une téléportation interrompant la course
|
||||
et les commandes d'une monture pendant la préparation. La sonde du corridor
|
||||
complet vérifie les chunks avant toute collision ; elle ne les charge pas.
|
||||
La construction finale **`check build assemblePack` passe en 2 min 59 s**,
|
||||
avec les **45 cas ciblés**, dont onze nouveaux pour le Chargeur, et les contrôles
|
||||
purs du dépôt. Log : `build/charger282-check-build-pack.log`.
|
||||
|
||||
Le parcours client **Vulkan / MoltenVK 1.4.2 / Apple M1** passe en **1 min 03 s** :
|
||||
vrai appui sur G, déplacement et choc du familier, recharge et récupération,
|
||||
phases préparation/course/choc d'un Chargeur sauvage, géométrie adulte,
|
||||
tailles 500/1 000/1 500 ‰, rareté, infobulles et menus **FR/EN GUI 2/3/4**.
|
||||
Douze captures sont conservées sous `build/charger282-screenshots/` ; vues de
|
||||
la miniature ordinaire, de la préparation et du menu FR GUI 2 inspectées.
|
||||
Log : `build/charger282-client-vulkan.log`, marqueur `CHARGER282_CLIENT_PASS`.
|
||||
|
||||
La comparaison des PNG confirme **570 pixels de vêtements recolorés**, avec
|
||||
558 pixels de peau/visage et tous les alpha intacts. La texture de l'Infecté
|
||||
rouge conserve exactement son empreinte beta.281. Génération reproductible :
|
||||
|
||||
```sh
|
||||
python3 scripts/generate_infected_texture.py /chemin/minecraft-26.3-client.jar --variant charger
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=charger282,infected280,familiar260,companions \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCharger282ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Un contrôle historique de déplacement du dragon a échoué sur un passage
|
||||
intermédiaire, puis passé sans changement sur le suivant ; sa stabilité n'est
|
||||
pas démontrée par ce ticket. Un premier parcours client a passé ses étapes
|
||||
avant une erreur fastutil dans `ChunkMap` à la fermeture du serveur de test.
|
||||
La fixture nettoie désormais ses acteurs et attend leur retrait ; le parcours
|
||||
final se termine normalement.
|
||||
|
||||
## Essai local
|
||||
|
||||
```mcfunction
|
||||
/give @s sanctuary:charger_spawn_egg
|
||||
/summon sanctuary:charger
|
||||
```
|
||||
|
||||
L'œuf équipé invoque le familier miniature. G lance la charge ; les ordres et
|
||||
la sélection d'aptitudes suivent les contrôles habituels. Pendant une charge
|
||||
montée, préparation et récupération comprises, le pilote ne peut pas détourner
|
||||
la trajectoire avec les commandes de déplacement. Les autres profils utilisant
|
||||
`CHARGE` gardent leur comportement ; seul l'effet de profil `straight` utilise
|
||||
ce nouveau contrôleur.
|
||||
|
||||
La fréquence des rencontres naturelles en partie longue et le comportement
|
||||
sur toutes les formes de relief ne sont pas mesurés. Aucun monde personnel,
|
||||
serveur, canal packwiz ou instance Prism modifié.
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
- Mod : `mods/sanctuary/build/libs/sanctuary-beta.282.jar`.
|
||||
- Pack : `build/Sanctuary-beta.282.mrpack`.
|
||||
- Captures : `build/charger282-screenshots/`.
|
||||
- Reçu : `build/charger282-validation.json`.
|
||||
|
||||
JAR et MRpack vérifiés : version exacte, intégrité ZIP, Minecraft 26.3, Fabric
|
||||
Loader 0.19.5, un seul JAR Sanctuary identique au build, profils et contrôleurs
|
||||
de charge présents, deux textures identiques aux sources et fixtures exclues.
|
||||
@@ -0,0 +1,113 @@
|
||||
{
|
||||
"version": "beta.314",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.314.jar",
|
||||
"sha256": "82a2a6d8d4e2ad9d0aab754037995609722bbebac28db89a6e641c851ccb3ceb",
|
||||
"previous_verified_sha256": "54ea931d2f54eec8dac2d03e5ad1df8fd5b389db235a536bdd98d90a531fbe55",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"data/sanctuary/recipe/ferment_vinegar.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/Cuisine.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenAppliances.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenClient$1.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenClient.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenJei$Category.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenJei.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/FermentationBarrelBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/FermentationBarrelBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/FermentationBarrelHud.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [
|
||||
"assets/sanctuary/blockstates/cheese.json",
|
||||
"assets/sanctuary/items/grand_cru_wine.json",
|
||||
"assets/sanctuary/items/reserve_wine.json",
|
||||
"assets/sanctuary/items/table_wine.json",
|
||||
"assets/sanctuary/models/block/cheese.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_1.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_2.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_3.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_4.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_5.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_6.json",
|
||||
"assets/sanctuary/models/item/grand_cru_wine.json",
|
||||
"assets/sanctuary/models/item/reserve_wine.json",
|
||||
"assets/sanctuary/models/item/table_wine.json",
|
||||
"data/sanctuary/loot_table/blocks/cheese.json",
|
||||
"data/sanctuary/recipe/age_grand_cru_wine.json",
|
||||
"data/sanctuary/recipe/age_reserve_wine.json",
|
||||
"data/sanctuary/recipe/age_table_wine.json",
|
||||
"data/sanctuary/sanctuary_recipe_collections/wine_maturation.json",
|
||||
"data/sanctuary/tags/item/wines.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/CheeseBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/recipe/WineMaturationRecipe$1.class",
|
||||
"fr/koka/sanctuary/cuisine/recipe/WineMaturationRecipe.class"
|
||||
],
|
||||
"removed_jar_entries": [],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 228,
|
||||
"agriculture": 376
|
||||
},
|
||||
"additive_cheese_wine_json": 20,
|
||||
"culinary_source_classes": 52,
|
||||
"culinary_compiled_classes_verified": 72,
|
||||
"cheese_slices": 7,
|
||||
"cheese_top_rind_yellow": true,
|
||||
"cheese_eaten_cut_holes_only": true,
|
||||
"young_wine_game_ticks": 3600,
|
||||
"wine_age_clock": "server UTC epoch milliseconds, including server shutdown",
|
||||
"wine_quality_threshold_real_days": [
|
||||
1,
|
||||
3,
|
||||
7
|
||||
],
|
||||
"wine_quality_ids": [
|
||||
"sanctuary:wine",
|
||||
"sanctuary:table_wine",
|
||||
"sanctuary:reserve_wine",
|
||||
"sanctuary:grand_cru_wine"
|
||||
],
|
||||
"old_pngs_unchanged": 1108,
|
||||
"new_pngs": 0,
|
||||
"server_required": 126,
|
||||
"cheese_wine_scenarios": 14,
|
||||
"client_vulkan": {
|
||||
"log": "build/cheese-wine314-client.log",
|
||||
"screenshots": "build/cheese-wine314-screenshots",
|
||||
"screenshot_count": 15,
|
||||
"world_seed": 314,
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"native_paid_fermentation": true,
|
||||
"native_paid_cheese_placement": true,
|
||||
"native_seven_slices": true,
|
||||
"actual_disk_partial_cheese_and_wine_reopen": true,
|
||||
"native_grand_cru_collection_and_drinking": true,
|
||||
"fixture_simulates_fermentation_and_real_age": true
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"template_added_entries": [
|
||||
"assets/sanctuary/blockstates/cheese.json",
|
||||
"assets/sanctuary/items/grand_cru_wine.json",
|
||||
"assets/sanctuary/items/reserve_wine.json",
|
||||
"assets/sanctuary/items/table_wine.json",
|
||||
"assets/sanctuary/models/block/cheese.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_1.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_2.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_3.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_4.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_5.json",
|
||||
"assets/sanctuary/models/block/cheese_slice_6.json",
|
||||
"assets/sanctuary/models/item/grand_cru_wine.json",
|
||||
"assets/sanctuary/models/item/reserve_wine.json",
|
||||
"assets/sanctuary/models/item/table_wine.json"
|
||||
],
|
||||
"build_log": "build/cheese-wine314-build.log"
|
||||
}
|
||||
@@ -0,0 +1,131 @@
|
||||
# IA-09 — fromage à partager et quatre qualités de vin — beta.314 locale
|
||||
|
||||
Demande du créateur : poser le fromage comme un gâteau, en manger les parts,
|
||||
et distinguer quatre qualités de vin. Choix confirmé le 29 octobre 2026 :
|
||||
vin jeune après les trois minutes de fermentation existantes, puis vin de table
|
||||
après un jour réel, réserve après trois jours et grand cru après sept jours.
|
||||
Un jour réel vaut 24 heures ; le serveur arrêté compte dans ce vieillissement.
|
||||
Même branche `codex/itsalive-26-3`, sans publication ni installation.
|
||||
|
||||
## Contrat de continuité avant modification
|
||||
|
||||
L'objet `sanctuary:cheese`, ses recettes et son icône conservent leur identifiant.
|
||||
Il devient un BlockItem du nouveau bloc `sanctuary:cheese`, avec la propriété
|
||||
native de gâteau `bites=0..6`. Les objets des inventaires existants deviennent
|
||||
posables sans conversion. Le fromage posé n'a pas de block entity. Les mondes
|
||||
et la génération ne sont pas modifiés. Comme le gâteau, casser une meule ne
|
||||
rend pas une meule neuve et perdre son support la détruit. Aucune part mangée
|
||||
ne peut être récupérée par le minage. Les gâteaux et bougies vanilla restent
|
||||
inchangés ; une bougie ne transforme pas le fromage en gâteau.
|
||||
|
||||
Le tonneau garde son identifiant, ses cinq cases, ses entrées, sa sortie et
|
||||
les champs historiques de fermentation. Vin jeune, bière, fromage, vinaigre
|
||||
et les autres procédés gardent leurs durées de fermentation en temps de jeu.
|
||||
Les nouveaux objets sont `sanctuary:table_wine`, `sanctuary:reserve_wine` et
|
||||
`sanctuary:grand_cru_wine` ; `sanctuary:wine` reste le vin jeune.
|
||||
|
||||
Seule une bouteille terminée qui reste dans la sortie du tonneau vieillit.
|
||||
L'horodatage UTC côté serveur commence à sa transformation effective en vin
|
||||
jeune. De nouveaux champs optionnels de version 1 mémorisent cet instant ;
|
||||
un ancien vin déjà en sortie commence son vieillissement lors du premier
|
||||
tick sous beta.314, sans âge inventé. Une fermentation ancienne en cours
|
||||
continue avec ses champs historiques, puis commence son vieillissement.
|
||||
Retirer le produit libère la sortie et efface uniquement son horodatage.
|
||||
Le vin dans un inventaire garde la qualité obtenue, sans vieillissement caché.
|
||||
|
||||
Le vieillissement se calcule avec l'heure réelle du serveur, même après une
|
||||
fermeture ou un déchargement. Dormir ou modifier l'heure Minecraft ne l'accélère
|
||||
pas. Un recul de l'horloge ne dégrade jamais un vin déjà amélioré. La qualité
|
||||
est matérialisée par l'objet lui-même, ce qui empêche les lots de qualités
|
||||
différentes de fusionner. La collecte et la casse rendent seulement ce produit.
|
||||
Un entonnoir actif récupère le jeune vin dès qu'il est prêt ; pour le laisser
|
||||
vieillir, verrouiller cet entonnoir avec de la redstone ou le retirer.
|
||||
|
||||
Avant un éventuel retour à beta.313, consommer les nouvelles bouteilles ou les
|
||||
transformer en vinaigre et manger les meules posées ; les identifiants ajoutés
|
||||
n'existent pas dans l'ancienne version.
|
||||
Aucun monde personnel n'est ouvert ou migré pour les essais.
|
||||
|
||||
## Aspect du fromage
|
||||
|
||||
Ajustement demandé pendant cette préparation : le dessus et la croûte extérieure
|
||||
restent jaunes. Dès la première part, seule la face de coupe expose la texture
|
||||
claire à trous, auparavant visible sur le dessus. La forme continue de diminuer
|
||||
sur les sept états natifs du gâteau. Les icônes historiques de fromage et de vin
|
||||
restent intactes ; les trois vins ajoutés reprennent le modèle de la bouteille
|
||||
avec des noms, raretés et saturation croissants. Les quatre vins restent
|
||||
compatibles avec la recette de vinaigre.
|
||||
|
||||
## Vérifications locales
|
||||
|
||||
Quatorze cas serveur natifs couvrent :
|
||||
|
||||
- paiement de la pose depuis l'objet historique, sept vraies prises de parts,
|
||||
forme qui diminue, faim pleine, absence de conversion par bougie, casse et
|
||||
perte de support sans restitution d'une meule neuve ;
|
||||
- recette de moût toujours prête à 3 600 ticks, origine UTC créée seulement
|
||||
lors de la production effective du vin jeune ;
|
||||
- frontière à une milliseconde près pour 1, 3 et 7 jours, une bouteille unique,
|
||||
qualité maximale stable, rechargement NBT, rattrapage d'un arrêt et recul de
|
||||
l'horloge sans déclassement ;
|
||||
- ancien vin sans date initialisé sans âge inventé, temps Minecraft indépendant,
|
||||
retrait puis nouveau lot sans âge hérité, casse avec la bouteille réellement
|
||||
obtenue, quatre qualités buvables et utilisables pour le vinaigre ;
|
||||
- trois recettes en secondes réelles, découverte depuis le moût et extraction
|
||||
par un vrai entonnoir qui libère correctement l'horodatage.
|
||||
|
||||
Le parcours graphique **Vulkan / Apple M1 / Sodium 0.9.2+mc26.3** utilise un
|
||||
monde plat neuf de graine **314**. Il vérifie les vrais paquets de dépôt de
|
||||
crème et sel, l'obtention du fromage, sa pose payée puis les sept prises de
|
||||
parts nourrissantes. Une fermeture/réouverture du monde conserve la meule avec
|
||||
trois parts déjà mangées et le vin de table avec son horodatage exact.
|
||||
Les quatre prises restantes épuisent cette même meule après rechargement.
|
||||
Les sept modèles vérifient leurs six faces : dessus et croûte jaunes,
|
||||
face ouest de coupe trouée seulement après la première part. Une capture est
|
||||
prise depuis cette face. Les cinq objets fromage/vins sont dans Nourriture et
|
||||
boissons, avec des modèles valides et les libellés FR/EN aux échelles GUI 2/3/4.
|
||||
Le HUD affiche les jours réels. Le grand cru issu du même moût se récupère et
|
||||
se boit par les interactions natives, et trois étapes de garde sont synchronisées
|
||||
dans leur catégorie JEI. Quinze captures sont conservées dans
|
||||
`build/cheese-wine314-screenshots/` (ignoré).
|
||||
|
||||
Les tests **n'attendent pas réellement sept jours** et ne changent pas l'horloge
|
||||
du poste : les cas serveur fournissent explicitement des instants de référence,
|
||||
et la fixture graphique antidate seulement le champ UTC des bouteilles dans
|
||||
son monde jetable. La fermentation initiale est rapprochée de son échéance
|
||||
historique, puis se termine par les ticks natifs. Le retrait, la pose,
|
||||
la sauvegarde/relecture, les sept parts et la consommation du vin restent réels.
|
||||
Le parcours graphique final a réussi en **1 min 28 s**.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=cheesewine314,drying313,cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCheeseWine314ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=cheesewine314 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
`check build assemblePack` a réussi en **3 min 24 s**, avec **126 tests serveur
|
||||
obligatoires**. L'audit strict à beta.313 autorise seulement les deux nouvelles
|
||||
classes de production, les 20 JSON ajoutés, la compatibilité vinaigre et les
|
||||
modifications de catalogue d'objets, registre, interaction du tonneau,
|
||||
horodatage, HUD, JEI, langues et crédits prévues pour ce ticket. Les
|
||||
**1 108 PNG** historiques sont identiques et aucun PNG n'est ajouté.
|
||||
Les 432 JSON de cuisine et 376 JSON d'agriculture restent identiques ; les
|
||||
228 JSON d'appareils sont comparés aux générateurs. Les modèles de coupe
|
||||
sont vérifiés sur les sept états. Les 52 classes sources culinaires et leurs
|
||||
72 classes compilées sont contrôlées dans le JAR. Les copies de ce JAR dans
|
||||
les assemblages client et serveur sont identiques. Le modèle du pack de
|
||||
ressources contient les quatorze nouveaux JSON visuels.
|
||||
|
||||
[Reçu d'audit](cheese-wine-beta314-verification.json).
|
||||
JAR local : `mods/sanctuary/build/libs/sanctuary-beta.314.jar`.
|
||||
|
||||
SHA-256 :
|
||||
`82a2a6d8d4e2ad9d0aab754037995609722bbebac28db89a6e641c851ccb3ceb`
|
||||
|
||||
Aucun push, tag, publication, canal packwiz public, installation Prism ou
|
||||
serveur personnel n'a été modifié.
|
||||
@@ -0,0 +1,101 @@
|
||||
# CLAIM-03 — Chunks et protection temporaire, beta.272
|
||||
|
||||
Branche `codex/inhabitant-property`. Contrat du 24 octobre 2026, avant changement des données.
|
||||
|
||||
Un claim est un chunk entier de 16 × 16 blocs du monde principal, sur toute
|
||||
sa hauteur. L'admission Hello World donne accès au menu, sans terrain attribué.
|
||||
Les cinq premiers chunks sont gratuits ; le sixième coûte 100 points d'XP,
|
||||
le septième 200, puis +100 par chunk. Limite technique : 256 chunks par joueur,
|
||||
10 000 par monde. Les chunks peuvent être séparés. Aucun abandon ni transfert
|
||||
n'est proposé dans ce lot.
|
||||
|
||||
Chaque chunk peut recevoir sept jours de protection contre **64 saphirs**.
|
||||
Le propriétaire mine alors à ×2 et les autres à ×0,5. Sans protection : ×1.
|
||||
L'effet suit le bloc effectivement miné, même dans une sélection groupée.
|
||||
La pose, l'utilisation, les explosions, fluides et autres mécanismes gardent
|
||||
leurs règles normales. Le claim demeure après expiration. Le renouvellement
|
||||
est manuel et ajoute sept jours à la durée restante, sans prélèvement automatique.
|
||||
|
||||
Le temps compte en millisecondes monotones de serveur démarré, y compris sans
|
||||
propriétaire connecté. Il ne dépend ni du calendrier ni du nombre de ticks.
|
||||
L'arrêt normal sauvegarde l'horloge ; la relance reprend sa valeur sans compter
|
||||
l'arrêt. Sauvegarde toutes les 60 secondes et à chaque achat : un arrêt brutal
|
||||
peut restituer au plus le temps depuis le dernier point de sauvegarde (environ
|
||||
60 secondes, ou davantage si la boucle serveur est bloquée).
|
||||
|
||||
## Contrat de sauvegarde et migration
|
||||
|
||||
Nouveau registre séparé `<monde>/sanctuary/chunk-claims-v1.json`, schéma 1,
|
||||
lié à la graine. Il contient l'horloge serveur, une révision, les chunks, les
|
||||
transactions en attente et les UUID ayant volontairement quitté l'ancien modèle.
|
||||
Écritures atomiques vérifiées ; format invalide conservé et mutations suspendues.
|
||||
Un reçu persistant natif joueur `sanctuary:chunk_purchase_receipt_v1` relie le
|
||||
débit XP/saphirs ou le remboursement à la validation du registre. Une transaction
|
||||
réservée sans reçu sauvegardé est annulée ; un reçu durable la valide une seule fois.
|
||||
|
||||
L'ancien `properties-v1.json` reste dans son format exact. Ses volumes et leurs
|
||||
droits restent actifs tant que le propriétaire ne confirme pas la migration.
|
||||
La migration retire volontairement les droits de son volume et rembourse les
|
||||
extensions : 100, 300, 600 ou 1 000 XP selon le palier. Aucun chunk n'est créé
|
||||
à partir du volume : le joueur choisit ensuite ses chunks, dont cinq gratuits.
|
||||
Les achats anciens en attente sont résolus avant cette migration. Un nouveau
|
||||
chunk ne peut recouvrir l'emprise horizontale d'un volume ancien encore actif.
|
||||
Aucun bloc, terrain, génération, seed ou sauvegarde personnelle n'est modifié.
|
||||
|
||||
Un **clic droit directement sur la carte** ouvre un petit panneau sur le chunk :
|
||||
propriétaire, tarif, durée et bouton Revendiquer ou Protéger. Le prix apparaît
|
||||
avant l'action ; le clic sur ce bouton réalise l'achat sans quitter la carte.
|
||||
Échap ou un clic ailleurs ferme ce panneau. Aucun menu de grille séparé et aucun
|
||||
mode à activer pour le clic droit de l'Atlas ordinaire.
|
||||
|
||||
Habitant → Propriété et `/sanctuary property` ouvrent cette carte directement.
|
||||
Avant l'aptitude Atlas, elle montre uniquement le terrain déjà chargé et envoyé
|
||||
au joueur, à huit chunks au plus, sans conserver un historique supplémentaire.
|
||||
Les échantillons sont bornés à quatre tuiles par joueur et par tick, dans un
|
||||
budget global de 2 ms, sans charger de chunks. L'Atlas complet garde ses
|
||||
prérequis ; une fois débloqué, les tuiles découvertes peuvent aussi être choisies.
|
||||
Le serveur contrôle la portée, la frontière, la réserve de départ de 32 blocs,
|
||||
les fonds et la révision. La migration de l'ancien volume requiert une seconde
|
||||
confirmation explicite dans le panneau, avec le remboursement indiqué.
|
||||
|
||||
## Validation
|
||||
|
||||
Les **58 vérifications indépendantes** du registre passent : cinq claims gratuits,
|
||||
prix suivants, conflits, révision périmée, reprise avec ou sans reçu, horloge,
|
||||
trente jours d’arrêt simulés, renouvellement, expiration, migration et refus de
|
||||
JSON invalide ou d’une graine différente.
|
||||
|
||||
Le parcours client **Vulkan**, en **FR/EN GUI 2/3/4**, réussit en **54 s** :
|
||||
admission réelle, carte proche avant aptitude Atlas, recentrages rapides,
|
||||
clic sur un chunk voisin (9, 8 alors que le joueur est en 8, 8), premier claim,
|
||||
débit d’un stack de saphirs, puis clic droit dans l’Atlas ordinaire, panneau
|
||||
compact et Échap conservant la carte. Les huit captures finales sont dans
|
||||
`build/claims272-screenshots/` ; les formats FR GUI 2/4 et EN GUI 4 ont été
|
||||
inspectés. La fermeture ne reproduit plus l’exception de parcours des sessions
|
||||
Blocodex : le flush parcourt désormais un instantané stable.
|
||||
|
||||
Les tests natifs ciblent les paiements XP et saphirs, les reçus sauvegardés dans
|
||||
le joueur, les vrais `getDestroyProgress`, la frontière du chunk, la hauteur,
|
||||
les interactions libres, la migration remboursée et les refus terrain inconnu / spawn.
|
||||
Le lot couvre aussi les anciens volumes, le minage, les menus et l’overview.
|
||||
`check build assemblePack` réussit : **25 tests natifs ciblés**, en 2 min 44 s
|
||||
pour la commande complète. Le MRpack beta.272 est exporté et vérifié : ZIP,
|
||||
Minecraft 26.3, Loader 0.19.5 et octets des deux JAR locaux identiques aux builds.
|
||||
Les archives beta.270 et beta.271 gardent leurs hashes antérieurs.
|
||||
La validation finale et le MRpack sont consignés dans
|
||||
`build/claims272-validation.json`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=claims272,property270,mining,overview271,menus \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryClaims272ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le multiplicateur s’applique à la progression native ; les blocs instantanés,
|
||||
le Créatif et la granularité des ticks conservent leur fonctionnement Minecraft.
|
||||
Abandon, transfert, partage de droits et protection contre les mécanismes
|
||||
indirects restent hors de ce lot. Aucun serveur ou instance personnelle déployé.
|
||||
@@ -0,0 +1,120 @@
|
||||
# CLAIM-278 — Duel Battle consenti pour une propriété
|
||||
|
||||
Branche `codex/claim-battle-duels`, demande du 25 octobre 2026.
|
||||
Le créateur confirme que cette étape vise les propriétés déjà revendiquées.
|
||||
|
||||
## Contrat du duel
|
||||
|
||||
Depuis le clic droit sur un claim, un autre habitant peut proposer de le disputer.
|
||||
Le challenger doit avoir atteint le seuil d’habitation Demeure sur ce chunk ;
|
||||
la priorité d’influence ne lui est pas nécessaire pour une proposition consentie.
|
||||
Le propriétaire garde ses droits acquis, même sans preuve Demeure rétroactive.
|
||||
Les deux joueurs doivent avoir Carte active et être disponibles pour Battle.
|
||||
|
||||
Le challenger valide une proposition explicite ; le propriétaire accepte ou
|
||||
refuse celle-ci. Le chunk, les deux participants, le temps de protection restant
|
||||
et les règles sont affichés. Une acceptation ne vaut que pour cette proposition.
|
||||
Une modification du claim avant acceptation invalide la proposition.
|
||||
|
||||
L’acceptation crée un Battle privé à deux joueurs : joueurs seuls, rayon de
|
||||
48 blocs autour du lieu annoncé par le challenger, cinq minutes, nourriture,
|
||||
potions et perles autorisées, mise d’entrée nulle. Les deux joueurs doivent
|
||||
être dans ce périmètre. Chacun valide ensuite Prêt dans Battle ; le challenger
|
||||
lance la préparation native de dix secondes. Aucun troisième participant ne
|
||||
peut rejoindre ce duel. Les morts, tombes, abandons et déconnexions pendant
|
||||
le combat suivent les règles Battle existantes. Elles sont rappelées avant
|
||||
l’accord. Pas de téléportation ni terrain créé automatiquement.
|
||||
|
||||
Le vainqueur devient propriétaire du seul chunk annoncé. Le défenseur gagnant
|
||||
conserve son claim. L’échéance absolue de protection est conservée : aucun temps
|
||||
n’est ajouté, retiré ou remboursé. Couleur, nom et multiplicateurs de minage
|
||||
suivent le nouveau propriétaire. Aucun coût XP ou saphir supplémentaire n’est
|
||||
prélevé pour transférer un claim déjà acheté.
|
||||
|
||||
Refus, annulation avant lancement, expiration d’invitation, égalité ou interruption
|
||||
du serveur sans résultat enregistré : aucune mutation de propriété. Un abandon
|
||||
ou une déconnexion après lancement vaut défaite selon Battle. Les autres claims
|
||||
et les duels ordinaires restent indépendants.
|
||||
|
||||
## Contrat de persistance et reprise
|
||||
|
||||
Aucune modification des schémas de Demeure, des claims, des mises Arena ou des
|
||||
reçus joueurs. Aucun monde personnel, chunk ou génération n’est modifié par les
|
||||
essais. Le transfert met à jour uniquement le propriétaire d’un claim existant,
|
||||
dans le schéma 1 de `sanctuary/chunk-claims-v1.json`, par écriture atomique.
|
||||
|
||||
Nouveau journal indépendant `sanctuary/claim-duels-v1.json`, schéma 1, lié à la
|
||||
graine. Il enregistre les deux accords sur le chunk et son état initial avant
|
||||
la création du Battle, puis le vainqueur avant toute mutation de propriétaire.
|
||||
Le résultat est appliqué par comparaison de l’état attendu, puis clôturé. Une
|
||||
reprise après interruption entre l’écriture du résultat et sa clôture applique
|
||||
ce transfert une seule fois. Les accords sans résultat durable sont annulés
|
||||
au redémarrage ; les mises Battle suivent leur propre journal de remboursement.
|
||||
|
||||
Les mutations du claim sont bloquées pendant un accord actif ou un résultat à
|
||||
régler. Les limites de propriété sont vérifiées avant accord ; les participants
|
||||
inscrits à Battle ne peuvent acheter d’autres claims pendant celui-ci. Les
|
||||
fichiers invalides ou modifiés extérieurement sont conservés et les nouveaux
|
||||
duels sont refusés. Une erreur avant écriture durable du vainqueur ne transfère
|
||||
pas la propriété ; une erreur après cette écriture garde le résultat à reprendre.
|
||||
Terminer les duels et solder le journal avant retour à une version antérieure.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack` réussit en **2 min 55 s**, avec **40 tests serveur
|
||||
ciblés**. Les six nouveaux scénarios vérifient l’absence de transfert ou de
|
||||
combat sans le deuxième accord, les refus du challenger et des tiers tentant
|
||||
d’accepter à la place du propriétaire, le refus du propriétaire, la relecture
|
||||
de la proposition la plus récente, les validations Prêt natives, la mort réelle
|
||||
résolvant Battle et transférant le chunk exact, la conservation de son échéance,
|
||||
l’abandon après lancement, l’annulation avant lancement, l’égalité native au
|
||||
délai écoulé et l’invalidation d’un enjeu modifié ou expiré. Une arène publique
|
||||
ordinaire accepte toujours un troisième inscrit ; y gagner ne donne aucun claim.
|
||||
|
||||
Les **26 vérifications pures** du journal couvrent le consentement durable,
|
||||
les identités et chunks réservés, le refus d’un gagnant tiers, le redémarrage
|
||||
sans résultat, le résultat enregistré avant transfert, la reprise après mutation
|
||||
avant clôture, l’idempotence, la victoire du défenseur, les conflits de propriétaire
|
||||
ou de protection, la limite de 256 claims, la graine, les nombres JSON stricts
|
||||
et les fichiers corrompus ou modifiés extérieurement. Les **63 contrôles du
|
||||
registre de claims**, Demeure et les scénarios historiques ciblés passent aussi.
|
||||
|
||||
Le parcours **Vulkan FR/EN GUI 2/3/4** réussit en **53 s**, avec **18 captures**.
|
||||
Il ouvre le dossier depuis le clic droit de l’Atlas, lit les conséquences et
|
||||
les boutons d’acceptation/refus dans les deux langues aux trois tailles, refuse
|
||||
par le vrai paquet client, puis accepte une nouvelle proposition. L’enjeu est
|
||||
présent dans Battle avant Prêt. Une victoire native du propriétaire conserve
|
||||
son terrain. Après le délai de sortie de combat existant, le client devient
|
||||
challenger d’une autre propriété ; son propriétaire accepte indépendamment,
|
||||
les deux valident Prêt et le client lance réellement Battle. La mort native du
|
||||
défenseur transfère le claim et son échéance exacte. La carte déjà ouverte
|
||||
reçoit le nouveau propriétaire/couleur et raccorde le CTM au claim voisin sans
|
||||
réouverture. Captures : `build/claims278-screenshots/` ; inspections des écrans
|
||||
FR GUI 4 d’accord, FR GUI 2 de Battle et de la carte après transfert.
|
||||
|
||||
La réouverture d’un dossier n’est pas limitée par le délai anti-double-action :
|
||||
les lectures peuvent changer immédiatement de proposition, tandis que les
|
||||
mutations restent temporisées. Le panneau d’accord dispose d’un fond lisible
|
||||
et son compteur n’oblige pas à revenir en haut du défilement chaque seconde.
|
||||
Les combattants de ce parcours sont à l’air libre dans un monde plat ignoré.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=claims278,claims277,menu275,claims273,claims272,property270,mining,overview271,menus,map,demeure \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryClaims278ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
MRpack beta.278 exporté et vérifié : intégrité ZIP, Minecraft 26.3, Loader 0.19.5,
|
||||
versions/libellés, nouveaux contrôleurs présents et deux JAR identiques aux
|
||||
builds locaux. Les huit archives beta.270 à beta.277 gardent leurs empreintes.
|
||||
Reçu : `build/claims278-validation.json`. Aucun déploiement de serveur, monde
|
||||
personnel ou instance Prism, ni publication de canal.
|
||||
|
||||
Le lot porte sur un seul chunk déjà revendiqué et un Battle entre joueurs.
|
||||
Les familiers/modes mixtes, ensembles de claims, transferts sans combat ou
|
||||
attributions de terrains encore libres ne sont pas ajoutés. Les reprises sont
|
||||
éprouvées aux étapes du journal, sans simulation d’une panne physique du disque.
|
||||
@@ -0,0 +1,80 @@
|
||||
# CLAIM-276 — Contours CTM et protection à huit saphirs
|
||||
|
||||
Branche `codex/inhabitant-property`, demande du 25 octobre 2026.
|
||||
|
||||
## Résultat demandé
|
||||
|
||||
Toutes les propriétés doivent apparaître sur l’Atlas et son aperçu de Pause.
|
||||
Les claims d’un même propriétaire forment un contour continu, sans traits
|
||||
internes entre chunks adjacents. Une propriété sans protection garde uniquement
|
||||
son contour ; un chunk protégé ajoute un fond à la couleur du propriétaire.
|
||||
La protection coûte désormais **8 saphirs par chunk pour trois jours de serveur
|
||||
en marche**. Un arrêt du serveur suspend toujours le compteur ; une déconnexion
|
||||
ne le suspend pas. Les multiplicateurs de minage ×2 / ×0,5 restent identiques.
|
||||
|
||||
## Rendu et accès
|
||||
|
||||
- Contour d’un pixel de carte, directement dans les textures de terrain et de
|
||||
calque, avec les mêmes coordonnées et le même échantillonnage que la carte.
|
||||
- Raccords par propriétaire sur les quatre côtés et les angles rentrants ;
|
||||
la protection d’un voisin ne crée pas de frontière intérieure de propriété.
|
||||
- Fond uniquement sur les chunks encore protégés. À expiration, le contour
|
||||
reste visible et la propriété demeure attribuée.
|
||||
- Toute arrivée, suppression ou modification de claim recalcule aussi ses
|
||||
voisins, y compris les diagonales. Les achats actualisent la carte ouverte.
|
||||
- Couleur persistante du personnage, même hors ligne ; légende compacte pour
|
||||
tous les propriétaires visibles, survol et masquage conservés.
|
||||
- Aucun pixel de brouillard ou de vide n’est coloré. Seules les métadonnées des
|
||||
tuiles effectivement transmises sont acceptées. L’aptitude Carte achetée et
|
||||
active reste obligatoire pour ouvrir et gérer les propriétés.
|
||||
- Demeure et la disposition Habitant / Pause de beta.275 sont conservés.
|
||||
|
||||
## Contrat de conservation
|
||||
|
||||
Le schéma 1 de `sanctuary/chunk-claims-v1.json` et les reçus natifs restent
|
||||
identiques. Aucune réécriture automatique d’échéance, conversion de terrain,
|
||||
remise à zéro, attribution depuis Demeure ou régénération n’est effectuée.
|
||||
Les protections de sept jours déjà payées gardent leur échéance exacte.
|
||||
Une transaction de sept jours préparée par beta.272–275 reste récupérable :
|
||||
son reçu de paiement natif valide sa durée d’origine ; sans reçu, elle est
|
||||
annulée comme avant, sans retirer la couverture antérieure. Le lecteur accepte
|
||||
les deux périodes préparées, trois et sept jours ; les nouvelles réservations
|
||||
créées par beta.276 utilisent uniquement trois jours. Chaque renouvellement
|
||||
ajoute trois jours à l’échéance en cours si elle est encore active, sinon au
|
||||
temps serveur courant, contre huit saphirs. Aucun remboursement rétroactif
|
||||
n’est appliqué aux achats antérieurs.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack` réussit en **2 min 38 s**, avec **30 tests serveur
|
||||
ciblés** et **63 vérifications du registre**. Les achats natifs refusent sept
|
||||
saphirs sans mutation, consomment exactement huit saphirs répartis sur plusieurs
|
||||
piles, couvrent un seul chunk pour trois jours et ajoutent exactement trois
|
||||
jours lors d’un renouvellement. La reprise avec/sans reçu d’une ancienne période
|
||||
de sept jours et le renouvellement de cette couverture après redémarrage sont
|
||||
vérifiés. Les protections et multiplicateurs restent applicables sans Carte.
|
||||
|
||||
Le parcours **Vulkan FR/EN GUI 2/3/4** réussit en **50 s**, avec **19 captures**.
|
||||
Il achète réellement Carte et une protection, contrôle les pixels du contour et
|
||||
du fond, le raccord en L et carré, les frontières entre propriétaires, le nom et
|
||||
la couleur du propriétaire hors ligne, l’arrivée d’un voisin sans réouverture,
|
||||
l’expiration dans le modèle, les paquets périmés et la borne du monde, le
|
||||
masquage/réaffichage et les pixels de l’aperçu de Pause. Les libellés montrent
|
||||
huit saphirs et trois jours. Captures dans `build/claims276-screenshots/` ;
|
||||
inspection des vues carte FR GUI 2, contexte FR GUI 4 / EN GUI 2 et Pause GUI 4.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=menu275,claims273,claims272,property270,mining,overview271,menus,map,demeure \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryClaims276ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
MRpack beta.276 exporté et vérifié : intégrité ZIP, Minecraft 26.3, Loader 0.19.5,
|
||||
versions et libellés FR/EN, deux JAR embarqués identiques aux builds locaux.
|
||||
Les six archives beta.270 à beta.275 gardent leurs empreintes. Reçu :
|
||||
`build/claims276-validation.json`. Aucun déploiement personnel ni publication
|
||||
de canal n’est effectué.
|
||||
@@ -0,0 +1,98 @@
|
||||
# CLAIM-277 — Habitation et influence avant revendication
|
||||
|
||||
Branche `codex/claims-demeure`, demande du 25 octobre 2026.
|
||||
Le créateur confirme le seuil existant de Demeure et précise qu’un autre joueur
|
||||
peut revendiquer le terrain s’il prend plus d’influence avant le premier claim.
|
||||
|
||||
## Règles
|
||||
|
||||
Une simple visite ne permet plus de revendiquer un chunk. Demeure doit y
|
||||
reconnaître un habitant : influence totale d’au moins 0,8, dont au moins 20 %
|
||||
pour un joueur, selon les seuils déjà utilisés par sa lecture du territoire.
|
||||
Aucun compteur de minutes, nuits ou délai supplémentaire n’est introduit.
|
||||
|
||||
Sur un chunk libre, l’habitant avec le plus d’influence effective actuelle peut
|
||||
revendiquer. À égalité (tolérance numérique 10⁻⁹ pour les arrondis), l’ordre
|
||||
persisté des premières contributions acceptées départage les habitants.
|
||||
Ainsi, le premier garde la priorité jusqu’à ce qu’un autre le dépasse. Les
|
||||
contributions peuvent précéder l’achat de Carte. Une identité hors ligne peut
|
||||
rester prioritaire ; les autres joueurs peuvent la dépasser par leur activité.
|
||||
La décroissance native de Demeure continue de s’appliquer aux terrains libres.
|
||||
|
||||
Le clic droit sur la carte explique la condition manquante ou nomme l’habitant
|
||||
prioritaire ; l’action est désactivée si la condition n’est pas remplie. Le
|
||||
panneau d’un terrain libre s’actualise. Commande et paquets d’action vérifient
|
||||
la même priorité côté serveur, au moment de l’achat, avant toute réservation
|
||||
ou dépense. Aucun duel ou transfert automatique n’est ajouté.
|
||||
|
||||
Une fois revendiqué, le claim reste attribué malgré les variations d’influence.
|
||||
Tous les claims antérieurs et leurs durées de protection sont conservés, sans
|
||||
exiger de preuve rétroactive. Leur protection reste renouvelable même si Demeure
|
||||
est indisponible. Cinq claims gratuits puis XP, huit saphirs pour trois jours de
|
||||
serveur, contours CTM et accès par Carte achetée et active restent inchangés.
|
||||
|
||||
## Contrat de conservation
|
||||
|
||||
Aucun nouveau fichier ni changement de schéma. `data/demeure/footprints-v1.json`
|
||||
et `sanctuary/chunk-claims-v1.json` restent identiques. L’ordre des premières
|
||||
traces est déjà conservé par la liste des influences et son rechargement ; on
|
||||
ne prétend pas reconstituer une date de franchissement du seuil absente des
|
||||
anciennes données. La requête de priorité est une lecture des empreintes,
|
||||
indépendante de leur tri visuel par influence et de l’UUID des joueurs.
|
||||
|
||||
Demeure conserve la responsabilité des traces, des budgets, des seuils, de la
|
||||
décroissance et de leur persistance. Sanctuary applique ses conditions de
|
||||
revendication. Les empreintes sont sauvegardées atomiquement avant de réserver
|
||||
ou débiter un nouveau claim. Une lecture ou écriture refusée empêche cet achat
|
||||
sans effacer le fichier ; les propriétés déjà acquises restent valables.
|
||||
|
||||
Un paquet de lecture `sanctuary:claim_residency_v1` fournit l’état et le nom/couleur
|
||||
prioritaire pour le seul chunk sélectionné et accessible. Les anciens codecs
|
||||
et identifiants restent inchangés. Aucun état d’habitation n’est transmis pour
|
||||
un terrain inaccessible ou avant Carte. Aucun monde personnel ni génération
|
||||
n’est modifié par les essais.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack` réussit en **2 min 52 s**, avec **34 tests serveur
|
||||
ciblés**. Les quatre nouveaux tests couvrent les activités natives nécessaires,
|
||||
le refus d’un passage ou d’un achat sans habitation, cinq claims gratuits puis
|
||||
le coût du sixième, l’égalité et le dépassement avant revendication, l’acquisition
|
||||
par le nouvel habitant prioritaire, l’absence de transfert après achat et le
|
||||
renouvellement sans domination Demeure. Les propriétés anciennes sans preuve
|
||||
rétroactive restent protégées ; le paquet de lecture est testé, ainsi que le
|
||||
refus de divulguer les habitants d’un chunk inaccessible ou avant Carte.
|
||||
|
||||
Les tests purs Demeure ajoutent **14 scénarios d’habitation, priorité et point
|
||||
de sauvegarde**, dont l’ordre conservé après rechargement, indépendamment du tri
|
||||
visuel et des UUID, la décroissance, les dimensions et l’intégrité du fichier
|
||||
même quand le modèle en mémoire n’a pas changé. Les **63 vérifications du registre
|
||||
de claims** et les scénarios historiques ciblés passent aussi. Les montages de
|
||||
paiement et de migration préparent leurs traces d’habitation indépendamment des
|
||||
tentatives de claim : un clic refusé ne crée aucune influence.
|
||||
|
||||
Le parcours **Vulkan FR/EN GUI 2/3/4** final réussit en **51 s**, avec **28 captures**.
|
||||
Il passe par Hello World et l’achat de Carte, constate le bouton désactivé avant
|
||||
habitation, le refus d’un simple passage, le changement de priorité quand Nora
|
||||
prend plus d’influence et son retour au joueur lorsque celui-ci la dépasse.
|
||||
Un autre spot libre est réellement revendiqué par Nora après dépassement.
|
||||
Le nom/couleur prioritaire et le bouton désactivé sont vérifiés dans les deux
|
||||
langues aux trois tailles ; les contextes d’achat et de protection, les contours
|
||||
CTM, le masquage et l’aperçu de Pause restent valides. Captures dans
|
||||
`build/claims277-screenshots/`, avec inspection des panneaux FR GUI 4 et EN.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=claims277,menu275,claims273,claims272,property270,mining,overview271,menus,map,demeure \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryClaims277ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
MRpack beta.277 exporté et vérifié : ZIP, Minecraft 26.3, Loader 0.19.5,
|
||||
versions et libellés FR/EN, octets des deux JAR embarqués identiques aux builds
|
||||
locaux. Les archives beta.270 à beta.276 restent identiques. Reçu :
|
||||
`build/claims277-validation.json`. Aucune publication de canal ni synchronisation
|
||||
d’installation personnelle n’est effectuée.
|
||||
@@ -0,0 +1,71 @@
|
||||
# CLAIM-04 — Couleurs et état des claims sur la carte, beta.273
|
||||
|
||||
Branche `codex/inhabitant-property`, demande du 24 octobre 2026.
|
||||
|
||||
Chaque chunk revendiqué porte la couleur persistante de son propriétaire,
|
||||
choisie dans Hello World. Le nom et la couleur restent disponibles hors ligne.
|
||||
Un claim protégé a une teinte plus présente, une bordure pleine et un bouclier ;
|
||||
un claim sans protection a une teinte légère et une bordure en pointillés.
|
||||
Le survol donne le propriétaire, l’état et la durée restante ; une légende
|
||||
rappelle les deux styles. Le clic droit continue à ouvrir le panneau existant.
|
||||
|
||||
Un bouton **Propriétés : oui/non** masque ou réaffiche la teinte, les bordures,
|
||||
les boucliers, la légende et les infobulles de claims. Le choix est partagé
|
||||
avec l’aperçu de Pause et conservé tant que le client reste ouvert, y compris
|
||||
après fermeture de la carte. Le clic droit et les protections restent actifs ;
|
||||
les données continuent de se mettre à jour pour un réaffichage immédiat.
|
||||
Ce choix de session n’ajoute aucun fichier ni format de sauvegarde.
|
||||
|
||||
Les apparences sont envoyées automatiquement avec les tuiles de la carte,
|
||||
pour la vue proche comme pour l’Atlas. Aucun clic préalable n’est nécessaire.
|
||||
Seules les tuiles déjà transmises au joueur reçoivent leurs claims ; aucun
|
||||
terrain inconnu n’est révélé. Une acquisition ou un renouvellement actualise
|
||||
la tuile affichée. L’expiration change le style depuis la durée serveur restante,
|
||||
sans retirer la propriété. Les réponses d’une ancienne requête sont ignorées. Les achats diffusent aussi
|
||||
une mise à jour ponctuelle des cellules déjà observées, indépendante d’un
|
||||
rafraîchissement en cours ; aucune cellule inconnue n’est acceptée côté client.
|
||||
|
||||
Ce lot ajoute un paquet de présentation borné. Les identifiants existants,
|
||||
registres, reçus, règles, prix, durées et formats de sauvegarde restent identiques
|
||||
à beta.272. Aucune migration ni modification de terrain.
|
||||
|
||||
## Validation
|
||||
|
||||
Le parcours **Vulkan FR/EN, GUI 2/3/4**, passe en **62 s** sur un nouveau monde
|
||||
plat de graine 273. Il conserve l’admission et les achats réels de beta.272,
|
||||
puis compare quatre chunks contigus appartenant à deux propriétaires : chacun
|
||||
a un chunk protégé et un chunk sans protection. L’un des propriétaires n’est pas
|
||||
connecté. Les couleurs distinctes, le nom hors ligne, les deux styles, les
|
||||
mises à jour après achat, les requêtes rapides, le clic droit, Échap et l’aperçu
|
||||
de Pause sont vérifiés. Le masquage, sa conservation après fermeture, le clic
|
||||
droit sous masquage et le réaffichage sont contrôlés, avec captures de la carte
|
||||
et de l’aperçu de Pause sans propriétés. **19 captures** sont conservées dans
|
||||
`build/claims273-screenshots/`, avec inspection FR GUI 2/4, EN GUI 4 et Pause.
|
||||
|
||||
Le cache est également vérifié avec une horloge contrôlée : expiration sans
|
||||
perte de propriété, réponse périmée ignorée, mise à jour d’achat pendant un
|
||||
rafraîchissement, cellule inconnue refusée et remplacement par une tuile vide.
|
||||
Le test serveur ajouté couvre le nom et le RGB persistants d’un propriétaire
|
||||
hors ligne, la durée et le codec du paquet, avec refus hors des cellules
|
||||
transmises et au-delà de 64 cellules. Les registres conservent leurs 58
|
||||
vérifications indépendantes de beta.272.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=claims273,claims272,property270,mining,overview271,menus \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryClaims273ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
`check build assemblePack` réussit en **2 min 41 s**, avec **26 tests serveur
|
||||
ciblés** et les 58 vérifications indépendantes du registre. Le MRpack beta.273
|
||||
est exporté et vérifié : ZIP, Minecraft 26.3, Loader 0.19.5 et octets des deux
|
||||
JAR locaux identiques aux builds. Les archives beta.270 à beta.272 restent
|
||||
inchangées.
|
||||
|
||||
Le reçu final de build et de distribution est dans
|
||||
`build/claims273-validation.json`. Aucun serveur, canal packwiz, monde ou
|
||||
instance personnelle déployé. Aucun changement du comportement de protection.
|
||||
@@ -0,0 +1,19 @@
|
||||
{
|
||||
"version": "beta.305",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.305.jar",
|
||||
"sha256": "8c9b358c5c3caac3b9aa9a94230c7f6c6761d32f26002522bd8eba59c7f1cc2b",
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 192,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_classes": 44,
|
||||
"server_required": 78,
|
||||
"crushing_scenarios": 8,
|
||||
"physical_recipes": 80,
|
||||
"device_blueprints": 90,
|
||||
"client_vulkan": {
|
||||
"crushing": "build/crushing305-client.log",
|
||||
"super_piston_regression": "build/crushing305-piston-client.log"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,149 @@
|
||||
# CUI-305 — écraser les fruits sans presse
|
||||
|
||||
Demande du créateur du 28 octobre 2026, précisée pour le super piston et
|
||||
confirmée : **huit paliers et neuf portions**. Préparation **beta.305** sur
|
||||
`codex/itsalive-26-3`, après beta.304. Travail local, sans publication,
|
||||
installation dans Prism ou déploiement serveur.
|
||||
|
||||
## Comportement retenu
|
||||
|
||||
La presse alimentaire quitte les recettes, les onglets créatifs et JEI.
|
||||
Les blocs de tomates, raisins et olives s'écrasent directement dans le monde.
|
||||
Leurs identifiants restent `sanctuary:tomato_block`, `grape_block` et `olive_block`.
|
||||
Les textures fournies restent intactes.
|
||||
|
||||
Chaque bloc possède **huit hauteurs**, de 16 à 2 pixels. Un véritable saut
|
||||
suivi d'un atterrissage retire un palier et fait apparaître les résidus en
|
||||
objets dans le monde : pulpe de tomate, moût de raisin ou huile d'olive.
|
||||
Les sept premiers sauts libèrent une portion chacun ; le huitième libère les
|
||||
deux dernières et supprime le bloc. Le joueur descend sur la nouvelle surface.
|
||||
Marcher, rester immobile et faire tomber un objet ne déclenchent rien.
|
||||
La petite chute de deux pixels provoquée par l'écrasement n'est pas un
|
||||
nouveau saut. Seuls les joueurs piétinent ces blocs.
|
||||
|
||||
Un **piston normal ou collant**, dans les six directions, écrase immédiatement
|
||||
le bloc rencontré lors de sa sortie. Il libère uniquement le rendement restant.
|
||||
Aucune presse, aucun réservoir ou récipient n'est requis : les portions sont
|
||||
libres et peuvent être ramassées ou collectées par les moyens vanilla.
|
||||
Aucune bouteille ou aucun bol n'est créé comme retour d'une portion libre.
|
||||
Les portions déjà conditionnées de beta.304 gardent leurs composants de retour.
|
||||
|
||||
Le **super piston** conserve sa face 3 × 3, sa course de trois blocs et sa
|
||||
capacité habituelle de déplacement. Une activation complète peut écraser les
|
||||
**27 blocs** situés sur ses trois profondeurs, soit **243 portions** pour un
|
||||
lot intact. Les neuf blocs rencontrés à chaque étape sont traités par le plan
|
||||
commun du super piston ; un obstacle qui empêche une étape ne consomme aucun
|
||||
fruit de cette étape. Les matériaux ordinaires conservent leurs règles.
|
||||
|
||||
Les blocs de fruits gardent leur gravité historique. Leur palier est porté par
|
||||
l'état de bloc, y compris pendant une chute et après sauvegarde.
|
||||
|
||||
## Rendement, casse et recettes
|
||||
|
||||
Un bloc intact coûte neuf fruits et peut encore se décompacter en neuf fruits.
|
||||
Après un ou plusieurs sauts, le casser rend **uniquement les fruits restants**,
|
||||
sans redonner un bloc entier. Cela empêche de récupérer neuf fruits en plus
|
||||
des résidus déjà obtenus. Par exemple :
|
||||
|
||||
| Situation | Déjà obtenu | Ce qui reste dans le bloc |
|
||||
| --- | ---: | ---: |
|
||||
| Bloc intact, 8 paliers | 0 | 9 |
|
||||
| Après trois sauts, 5 paliers | 3 | 6 |
|
||||
| Après six sauts, 2 paliers | 6 | 3 |
|
||||
| Dernier palier | 7 | 2 |
|
||||
|
||||
Un piston appliqué à un bloc de deux paliers donne donc trois portions,
|
||||
y compris après fermeture et réouverture du monde. La casse ordinaire utilise
|
||||
les tables de butin natives 26.3 avec leurs conditions d'état et quantités ;
|
||||
la destruction par piston remplace seulement ces butins par le produit écrasé.
|
||||
|
||||
Les trois identifiants de recettes `sanctuary:press_*` et le sérialiseur
|
||||
`sanctuary:food_pressing` sont conservés pour les données et la progression.
|
||||
Dans JEI, leur catégorie devient **Écrasement des fruits / Fruit Crushing**,
|
||||
avec les deux gestes expliqués en FR/EN. Le total des recettes physiques reste
|
||||
80 ; la recette de la presse disparaît, laissant dix fabrications d'équipement
|
||||
et de stockage. Les recettes des autres appareils restent en place.
|
||||
|
||||
## Contrat de continuité locale
|
||||
|
||||
Aucun monde existant n'est modifié ou converti par ce lot. Un ancien état de
|
||||
fruit sans propriété `layers` se charge comme un bloc plein de huit paliers.
|
||||
Les nouveaux paliers utilisent le format natif des états de blocs ; les
|
||||
identifiants et les recettes de compactage restent stables.
|
||||
|
||||
L'identifiant de presse introduit dans la préparation locale beta.304 reste
|
||||
**inactif**, uniquement pour lire ses anciens inventaires : aucun traitement,
|
||||
aucune recette, aucun catalogue créatif ou JEI. Un inventaire d'essai peut être
|
||||
récupéré à main vide ou à la casse. Ses quatre anciennes cases utilisent le
|
||||
même encodage natif. Il n'y a pas de conversion automatique en appareil ou en
|
||||
fruits, ni de suppression silencieuse d'une sauvegarde. Aucun nouveau monde,
|
||||
serveur ou chargement d'instance personnelle n'est engagé pour cette continuité.
|
||||
|
||||
## Implémentation et validation
|
||||
|
||||
`CrushableProduceBlock` gère la hauteur, les atterrissages et le rendement.
|
||||
Le dernier palier de deux pixels nécessite de prendre le support réel du
|
||||
joueur : le repère historique de chute de Minecraft regarde 0,2 bloc plus bas
|
||||
et désigne sinon le sol sous le fruit. L'adaptation reste limitée aux
|
||||
atterrissages des joueurs sur ces blocs.
|
||||
|
||||
Les pistons vanilla gardent leur résolution native des mouvements, avec la
|
||||
réaction `POPPED` et un remplacement ciblé du butin lors de l'écrasement.
|
||||
Le super piston utilise ce même rendement dans son plan commun déjà validé,
|
||||
avant la création des têtes mobiles. Les 21 modèles de hauteur partielle sont
|
||||
générés à partir des trois textures existantes, sans nouveaux PNG.
|
||||
|
||||
`check build assemblePack` passe en **2 min 20 s**, avec **78 tests serveur
|
||||
requis réussis**, dont huit nouveaux scénarios pour l'écrasement. Ils couvrent
|
||||
les trois fruits, les huit paliers, le rendement, la casse, la lecture d'anciens
|
||||
états sans `layers`, les six directions du piston normal, la disparition de la
|
||||
presse active, la course de 27 blocs du super piston et le refus atomique d'une
|
||||
face bloquée. Le scénario vertical du super piston est isolé des autres tests
|
||||
et compte aussi les résidus projetés en hauteur.
|
||||
|
||||
Le parcours **Vulkan avec Sodium 0.9.2** passe en **55 s** : huit vrais sauts
|
||||
au clavier, neuf portions obtenues, disparition du dernier palier, 24 modèles
|
||||
avec hauteur et collisions correspondantes, 27 blocs / 243 portions sur une
|
||||
activation réelle du super piston. La presse est absente du créatif et des
|
||||
ingrédients JEI, y compris du catalogue opérateur. La catégorie d'écrasement
|
||||
et ses trois recettes s'affichent en FR/EN aux échelles GUI 2/3/4. Une
|
||||
fermeture/réouverture réelle conserve les 24 états partiels ; le piston
|
||||
récupère ensuite exactement les trois portions d'un bloc resté à deux paliers.
|
||||
|
||||
La régression **Piston087 sous Vulkan avec Sodium** passe en **1 min 8 s** :
|
||||
six directions × deux variantes, charges ordinaires de 108/109 blocs, obstacles,
|
||||
inventaires, adhérence, collisions, interruption, sérialisation, rechargement
|
||||
de chunks et démontage. Son ancien appel de clé hors de portée est corrigé
|
||||
dans la fixture de test, sans modifier les règles de portée du jeu.
|
||||
|
||||
Le JAR contient les **192 JSON d'appareils/écrasement**, 432 JSON culinaires et
|
||||
376 JSON agricoles générés, identiques aux sources, les 44 classes culinaires
|
||||
et les deux adaptations de pistons/atterrissages. La recette de presse est
|
||||
absente de l'archive. Les 343 PNG importés restent identiques aux originaux,
|
||||
dont les 38 fournis, et les 13 PNG de vanille sont toujours en 16 × 16.
|
||||
Les copies packwiz client/serveur sont identiques au binaire contrôlé ; le
|
||||
template conserve les mêmes textures culinaires, agricoles et de vanille.
|
||||
|
||||
SHA-256 de `sanctuary-beta.305.jar` :
|
||||
|
||||
```text
|
||||
8c9b358c5c3caac3b9aa9a94230c7f6c6761d32f26002522bd8eba59c7f1cc2b
|
||||
```
|
||||
|
||||
[Reçu de validation](crushing-beta305-verification.json). Journaux dans
|
||||
`build/crushing305-*`, captures archivées dans
|
||||
`build/crushing305-crushing-screenshots/`, monde client neuf de graine **305**.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=crushing305,kitchen304,cuisine303,vanilla301,agriculture300,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCrushing305ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=crushing305 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Minecraft 26.3, Fabric API 0.160.5+26.3, Java 25. Les parcours graphiques
|
||||
ciblent exclusivement Vulkan et leurs mondes sont neufs et ignorés par Git.
|
||||
@@ -0,0 +1,241 @@
|
||||
# IA-05 — Recettes de la 26.2 jouables, beta.303 locale
|
||||
|
||||
> Cette page décrit l'étape beta.303. [La préparation beta.304](kitchen-beta304.md)
|
||||
> porte ensuite les six appareils : fermentation temporisée et pressage physique
|
||||
> remplacent leurs adaptations manuelles. Les préparations crues restent valides.
|
||||
|
||||
|
||||
Préparation du 28 octobre 2026 sur **la même branche `codex/itsalive-26-3`**,
|
||||
à partir de beta.302 (`930719d7`). Minecraft 26.3, Java 25 et dépendances
|
||||
inchangés. Aucun push, tag, publication, site, serveur ou Prism modifié.
|
||||
Les essais utilisent seulement des mondes de développement neufs.
|
||||
|
||||
## Catalogue importé et accès
|
||||
|
||||
Les **92 recettes alimentaires de la 26.2** sont reprises : 12 fabrications
|
||||
à froid, 19 préparations de chaudron, 26 de poêle, 13 de four, 10 recettes
|
||||
de fermentation, 9 de moulin et 3 de presse. Les ingrédients intermédiaires
|
||||
complètent les récoltes : farines, huile, pulpe, beurre, crème, fromage,+bouillon, sauces, tofu, riz cuit, nori, café moulu et vanille en poudre.
|
||||
Le catalogue apporte **83 ingrédients et plats**, dont 70 comestibles, et
|
||||
**46 préparations à cuire**, soit **129 objets**, tous dans l'onglet natif
|
||||
**Nourriture et boissons**. Les semences gardent l'onglet Naturel ; aucune
|
||||
nouvelle page créative n'est créée.
|
||||
|
||||
Les recettes utilisent la table de fabrication, le four et le fumoir
|
||||
existants. Une salade se fabrique directement ; les plats chauds composés
|
||||
passent par une préparation non comestible, puis une cuisson avec combustible.
|
||||
Les préparations ont le dessin du plat, teinté, un nom distinct et une aide
|
||||
FR/EN. Les recettes à un ingrédient sans récipient passent directement en
|
||||
cuisson, notamment le maïs grillé et l'ananas grillé.
|
||||
|
||||
Le parcours utilise **196 recettes natives** : **180 recettes ajoutées**
|
||||
(fabrications des préparations et variantes four/fumoir) et **16 recettes
|
||||
vanilla réutilisées** pour les viandes, poissons et pommes de terre.
|
||||
La découverte d'une récolte enseigne
|
||||
la collection Cuisine au catalogue existant ; sa consultation conserve les
|
||||
règles Sanctuary. La fabrication manuelle reste disponible sans cet achat.
|
||||
JEI utilise les catégories natives de fabrication et de cuisson.
|
||||
|
||||
## Adaptations explicites
|
||||
|
||||
Ce lot porte le catalogue alimentaire sur les outils déjà jouables. Il
|
||||
n'implémente pas les appareils historiques, leurs inventaires ou leurs gestes.
|
||||
Les 10 transformations issues de la fermentation sont **des recettes manuelles
|
||||
immédiates**, sans maturation en tonneau ni reprise du délai historique.
|
||||
Le travail du chaudron, de la poêle, de la cuisinière et du séchoir reste
|
||||
dans ses tickets ; aucun séchage ni mécanisme de plat raté n'est ajouté.
|
||||
|
||||
- Le pressage devient une fabrication avec **neuf fruits pour neuf portions**
|
||||
d'huile, de pulpe ou de moût, conservant le bilan de l'ancien bloc pressé.
|
||||
Les cinq recettes d'appareils et six recettes de compression/décompression
|
||||
ne sont pas importées ; elles ne sont pas nécessaires à cette chaîne.
|
||||
- Le moulin est adapté en fabrication manuelle. **Deux maïs donnent quatre
|
||||
semoules**, pour conserver le rendement sans entrer en conflit avec la
|
||||
récupération des grains depuis un maïs.
|
||||
Deux fèves de cacao donnent quatre poudres, pour éviter le conflit avec
|
||||
la teinture marron vanilla obtenue depuis une seule fève.
|
||||
- L'ancien curry et le ragoût de pois chiches avaient les mêmes ingrédients
|
||||
et se distinguaient par l'appareil. Le ragoût demande désormais une fiole
|
||||
d'eau supplémentaire ; le curry garde ses ingrédients. La table donne un
|
||||
résultat unique, sans dépendre de l'ordre de chargement des recettes.
|
||||
- `minecraft:potion` signifie exclusivement **une fiole d'eau sans effet**.
|
||||
Les potions de soin, poison, maladroites et eaux avec effets personnalisés
|
||||
ne sont pas des ingrédients. La cuisson ne consomme jamais une bouteille
|
||||
ou un seau : le récipient est récupéré dès la préparation à la table.
|
||||
- La fabrication rend exactement les bouteilles d'eau/miel, les seaux de
|
||||
lait et les couronnes d'ananas concernés. Les portions finies conservent
|
||||
le modèle d'objet historique, sans ajout de bols ou bouteilles gratuits.
|
||||
- Le tag historique manquant `herbs` est défini avec basilic, menthe et
|
||||
coriandre. Les tags de baies, poissons, champignons et viandes cuites sont
|
||||
repris. Les quantités finales et les profils alimentaires historiques
|
||||
sont conservés, y compris les effets des plats et du café ; les boissons
|
||||
utilisent l'animation native de boisson.
|
||||
- Les huit cuissons simples déjà disponibles dans le jeu réutilisent leurs
|
||||
recettes four/fumoir exactes de Minecraft 26.3, afin de conserver leurs
|
||||
durées, combustible et expérience, sans ajouter de recettes concurrentes.
|
||||
|
||||
## Provenance et limites
|
||||
|
||||
`scripts/data/cuisine.json` conserve les 92 recettes sources et leurs
|
||||
empreintes SHA-256, le catalogue alimentaire, les tags et les 11 exclusions.
|
||||
Source historique en lecture seule : `26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later.
|
||||
`scripts/cuisine_resources.py` produit les données, modèles et collection.
|
||||
Les identifiants de destination utilisent `sanctuary:*` ; aucun ancien
|
||||
identifiant agricole n'est renommé. Les 343 PNG importés, les images fournies
|
||||
et les textures 16 × 16 de vanille sont conservés sans retouche.
|
||||
|
||||
`CulinaryCraftingRecipe` reste une recette sans forme native, avec contrôle
|
||||
de l'eau et retours de récipients. Ses codecs 26.3 conservent les templates
|
||||
sans matérialiser d'objets avant la liaison des composants du registre.
|
||||
Les inventaires et sauvegardes utilisent les formats natifs ; aucune
|
||||
migration, génération naturelle ou conversion d'appareil 26.2 n'est effectuée.
|
||||
|
||||
## Validation
|
||||
|
||||
`check build assemblePack` passe en **2 min 49 s**, avec **55 tests serveur
|
||||
requis réussis**, dont neuf scénarios culinaires. Ils couvrent les 92 recettes
|
||||
et leurs rendements, les chemins de production des 83 ingrédients/plats,
|
||||
l'absence de résultats concurrents, l'eau et les potions refusées, les
|
||||
récipients/couronnes, la fabrication en série, une vraie cuisson au fumoir,
|
||||
les propriétés alimentaires, les effets du café et la découverte des recettes.
|
||||
|
||||
Le parcours **Vulkan avec Sodium 0.9.2** passe en **53 s** : paquets natifs
|
||||
de fabrication d'une salade et d'une préparation de café, consommation exacte,
|
||||
bouteille récupérée et cuisson par les ticks du fumoir. Les **196 étapes sont
|
||||
présentes dans JEI** ; les ingrédients d'eau s'y affichent comme de l'eau.
|
||||
Les 129 modèles d'objets, le seul onglet natif Nourriture et boissons, les
|
||||
noms FR/EN et les échelles GUI 2/3/4 sont contrôlés. Un plat, une préparation
|
||||
et un ingrédient gardent leurs quantités après fermeture/réouverture du monde.
|
||||
|
||||
La régression agricole Vulkan passe en **36 s** : 313 états de cultures,
|
||||
48 objets, arbres/caféier, croix de l'oignon et de l'ail, onglets natifs FR/EN
|
||||
GUI 2/3/4 et rechargement des 173 états agricoles. Les ajouts culinaires
|
||||
n'empêchent pas l'accès aux récoltes dans le même onglet.
|
||||
|
||||
Les **445 ressources culinaires générées** et 376 JSON agricoles sont
|
||||
vérifiés dans le JAR, avec les classes compilées et notices. Les 92 sources
|
||||
de recette correspondent aux SHA-256 du reçu ; les 343 PNG importés restent
|
||||
identiques, dont les 38 fournis. Les 13 textures de vanille sont toujours en
|
||||
16 × 16. Les copies JAR packwiz client/serveur sont identiques au binaire
|
||||
contrôlé ; le template contient les mêmes textures culinaires et notices.
|
||||
|
||||
SHA-256 de `sanctuary-beta.303.jar` :
|
||||
|
||||
```text
|
||||
91809157a1f720192d5558682219840e6f70d13007a384973fa526ec4e9b2f66
|
||||
```
|
||||
|
||||
Profils de vérification :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=cuisine303,vanilla301,agriculture300,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryCuisine303ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=cuisine303 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Journaux et reçu dans `build/cuisine303-*`, captures et monde neuf de graine
|
||||
**303** dans le dossier de tests client ignoré. Validation graphique Vulkan
|
||||
exclusivement.
|
||||
|
||||
## Catalogue vérifiable
|
||||
|
||||
| Recette historique | Ingrédients à la table ou en cuisson directe | Résultat | Usage 26.3 |
|
||||
| --- | --- | --- | --- |
|
||||
| `cauldron_bean_chili` | Haricots secs + Sauce tomate + Piment | Chili de haricots | Préparation → four/fumoir |
|
||||
| `cauldron_broth` | Fiole d'eau + Carotte + Pomme de terre | 2 × Bouillon | Préparation → four/fumoir |
|
||||
| `cauldron_cabbage_soup` | Chou + Carotte + Bouillon | Soupe au chou | Préparation → four/fumoir |
|
||||
| `cauldron_chicken_rice_soup` | Poulet cru + Bouillon + Riz | Soupe poulet-riz | Préparation → four/fumoir |
|
||||
| `cauldron_chickpea_stew` | Pois chiches + Sauce tomate + Coriandre + Piment + Fiole d'eau | Ragoût de pois chiches | Préparation → four/fumoir |
|
||||
| `cauldron_coffee` | Café moulu + Fiole d'eau | Café | Préparation → four/fumoir |
|
||||
| `cauldron_cooked_rice` | Riz + Fiole d'eau | 2 × Riz cuit | Préparation → four/fumoir |
|
||||
| `cauldron_corn_chowder` | Maïs + Crème + Pomme de terre | Soupe de maïs | Préparation → four/fumoir |
|
||||
| `cauldron_cream` | Seau de lait | 2 × Crème | Préparation → four/fumoir |
|
||||
| `cauldron_lemon_honey_tea` | Citron + Fiole d'eau + Fiole de miel | Infusion citron-miel | Préparation → four/fumoir |
|
||||
| `cauldron_mint_tea` | Menthe + Fiole d'eau | Infusion de menthe | Préparation → four/fumoir |
|
||||
| `cauldron_mushroom_veloute` | Champignons de cuisine + Bouillon + Crème | Velouté de champignons | Préparation → four/fumoir |
|
||||
| `cauldron_potato_soup` | Pomme de terre + Crème + Oignon | Soupe de pommes de terre | Préparation → four/fumoir |
|
||||
| `cauldron_pumpkin_veloute` | Citrouille + Crème + Sel | Velouté de citrouille | Préparation → four/fumoir |
|
||||
| `cauldron_salt` | Fiole d'eau | 2 × Sel | Préparation → four/fumoir |
|
||||
| `cauldron_soy_milk` | Graines de soja + Fiole d'eau | 2 × Lait de soja | Préparation → four/fumoir |
|
||||
| `cauldron_tofu` | Lait de soja + Sel | 2 × Tofu | Préparation → four/fumoir |
|
||||
| `cauldron_tomato_sauce` | Pulpe de tomate + Sel + Basilic | 2 × Sauce tomate | Préparation → four/fumoir |
|
||||
| `cauldron_vegetable_soup` | Carotte + Bouillon + Oignon | Soupe de légumes | Préparation → four/fumoir |
|
||||
| `cold_burger` | Pain + Bœuf cuit + Fromage + Laitue + Tomate | Burger | Table |
|
||||
| `cold_cucumber_maki` | Riz cuit + Nori + Concombre | Maki concombre | Table |
|
||||
| `cold_fruit_salad` | Ananas + Fraise + Raisin + Pomme | Salade de fruits | Table |
|
||||
| `cold_green_salad` | Laitue + Concombre + Tomate | Salade verte | Table |
|
||||
| `cold_hummus` | Pois chiches + Huile d'olive + Citron + Ail | Houmous | Table |
|
||||
| `cold_kebab` | Pain + Mouton cuit + Oignon + Tomate | Kebab | Table |
|
||||
| `cold_mediterranean_salad` | Laitue + Concombre + Tomate + Olives | Salade méditerranéenne | Table |
|
||||
| `cold_sandwich` | Pain + Viandes cuites + Laitue + Tomate | Sandwich | Table |
|
||||
| `cold_sushi` | Riz cuit + Nori + Poissons de cuisine | Sushi | Table |
|
||||
| `cold_tofu_maki` | Riz cuit + Nori + Tofu | Maki tofu | Table |
|
||||
| `cold_vegetarian_sandwich` | Pain + Fromage + Tomate + Laitue | Sandwich végétarien | Table |
|
||||
| `ferment_beer` | Blé + Fiole d'eau + Levure | Bière | Table |
|
||||
| `ferment_cheese` | Crème + Sel | Fromage | Table |
|
||||
| `ferment_hot_sauce` | Pulpe de tomate + Piment + Vinaigre | Sauce piquante | Table |
|
||||
| `ferment_kimchi` | Chou + Sel + Piment | Kimchi | Table |
|
||||
| `ferment_pickles` | Concombre + Sel + Vinaigre | Cornichons | Table |
|
||||
| `ferment_soy_sauce` | Graines de soja + Sel | Sauce soja | Table |
|
||||
| `ferment_vinegar` | Vin | Vinaigre | Table |
|
||||
| `ferment_wine` | Moût de raisin | Vin | Table |
|
||||
| `ferment_yeast` | Blé + Sucre | 2 × Levure | Table |
|
||||
| `ferment_yogurt` | Seau de lait + Sucre | Yaourt | Table |
|
||||
| `mill_chickpeas` | Pois chiches | 2 × Farine de pois chiche | Table |
|
||||
| `mill_cocoa_powder` | 2 × Fèves de cacao | 4 × Poudre de cacao | Table |
|
||||
| `mill_cornmeal` | 2 × Maïs | 4 × Semoule de maïs | Table |
|
||||
| `mill_cream` | Crème | Beurre | Table |
|
||||
| `mill_dried_kelp` | Algue séchée | Nori | Table |
|
||||
| `mill_ground_coffee` | Grains de café torréfiés | 2 × Café moulu | Table |
|
||||
| `mill_rice` | Riz | 2 × Farine de riz | Table |
|
||||
| `mill_vanilla_powder` | Gousse de vanille séchée | 2 × Poudre de vanille | Table |
|
||||
| `mill_wheat` | Blé | 2 × Farine de blé | Table |
|
||||
| `oven_apple_pie` | Pâte crue + Pomme + Sucre + Beurre | Tarte aux pommes | Préparation → four/fumoir |
|
||||
| `oven_berry_pie` | Pâte crue + Baies de cuisine + Sucre + Beurre | Tarte aux baies | Préparation → four/fumoir |
|
||||
| `oven_bread` | Pâte crue | Pain | Four/fumoir |
|
||||
| `oven_carrot_cake` | Pâte crue + Carotte + Sucre + Œuf | Gâteau aux carottes | Préparation → four/fumoir |
|
||||
| `oven_chickpea_flatbread` | Farine de pois chiche + Fiole d'eau + Huile d'olive | Galette de pois chiche | Préparation → four/fumoir |
|
||||
| `oven_chocolate_cake` | Pâte crue + Poudre de cacao + Sucre + Œuf | Gâteau au chocolat | Préparation → four/fumoir |
|
||||
| `oven_cornbread` | Semoule de maïs + Levure + Seau de lait | Pain de maïs | Préparation → four/fumoir |
|
||||
| `oven_flatbread` | Farine de blé + Fiole d'eau + Sel | Pain plat | Préparation → four/fumoir |
|
||||
| `oven_margherita_pizza` | Pâte crue + Sauce tomate + Fromage + Basilic | Pizza margherita | Préparation → four/fumoir |
|
||||
| `oven_pumpkin_pie` | Pâte crue + Citrouille + Sucre + Œuf | Tarte à la citrouille | Préparation → four/fumoir |
|
||||
| `oven_rice_bread` | Farine de riz + Levure + Fiole d'eau | Pain de riz | Préparation → four/fumoir |
|
||||
| `oven_stuffed_pepper` | Poivron + Riz cuit + Sauce tomate + Fromage | Poivron farci | Préparation → four/fumoir |
|
||||
| `oven_vanilla_cake` | Pâte crue + Œuf + Sucre + Poudre de vanille | Gâteau à la vanille | Préparation → four/fumoir |
|
||||
| `pan_beef` | Bœuf cru | Bœuf cuit | Four/fumoir |
|
||||
| `pan_beef_stir_fry` | Bœuf cru + Poivron + Oignon + Sauce soja | Bœuf sauté | Préparation → four/fumoir |
|
||||
| `pan_chicken` | Poulet cru | cooked_chicken | Four/fumoir |
|
||||
| `pan_chickpea_curry` | Pois chiches + Sauce tomate + Piment + Coriandre | Curry de pois chiches | Préparation → four/fumoir |
|
||||
| `pan_cod` | Morue crue | cooked_cod | Four/fumoir |
|
||||
| `pan_fish_meuniere` | Poissons de cuisine + Citron + Beurre | Poisson meunière | Préparation → four/fumoir |
|
||||
| `pan_fried_cabbage` | Chou + Beurre + Oignon | Chou poêlé | Préparation → four/fumoir |
|
||||
| `pan_fried_egg` | Œuf | Œuf au plat | Four/fumoir |
|
||||
| `pan_fried_rice` | Riz cuit + Œuf + Graines de soja + Sauce soja | Riz sauté | Préparation → four/fumoir |
|
||||
| `pan_garlic_green_beans` | Haricots verts + Ail + Beurre | Haricots verts sautés | Préparation → four/fumoir |
|
||||
| `pan_grilled_corn` | Maïs | Maïs grillé | Four/fumoir |
|
||||
| `pan_grilled_eggplant` | Aubergine + Huile d'olive | Aubergine grillée | Préparation → four/fumoir |
|
||||
| `pan_grilled_pineapple` | Ananas | Ananas grillé | Four/fumoir |
|
||||
| `pan_herb_omelette` | Œuf + Seau de lait + Herbes aromatiques | Omelette aux herbes | Préparation → four/fumoir |
|
||||
| `pan_mushroom_saute` | Champignons de cuisine + Beurre + Ail | Poêlée de champignons | Préparation → four/fumoir |
|
||||
| `pan_mutton` | Mouton cru | Mouton cuit | Four/fumoir |
|
||||
| `pan_omelette` | Œuf + Seau de lait | Omelette | Préparation → four/fumoir |
|
||||
| `pan_porkchop` | Porc cru | cooked_porkchop | Four/fumoir |
|
||||
| `pan_potato` | Pomme de terre | baked_potato | Four/fumoir |
|
||||
| `pan_rabbit` | Lapin cru | cooked_rabbit | Four/fumoir |
|
||||
| `pan_ratatouille` | Aubergine + Tomate + Poivron + Oignon | Ratatouille | Préparation → four/fumoir |
|
||||
| `pan_salmon` | Saumon cru | cooked_salmon | Four/fumoir |
|
||||
| `pan_sauteed_potatoes` | Pomme de terre + Oignon + Beurre | Pommes de terre sautées | Préparation → four/fumoir |
|
||||
| `pan_spiced_mutton` | Mouton cru + Oignon + Piment + Coriandre | Émincé de mouton épicé | Préparation → four/fumoir |
|
||||
| `pan_tofu_stir_fry` | Tofu + Poivron + Graines de soja + Sauce soja | Wok de tofu | Préparation → four/fumoir |
|
||||
| `pan_tomato_basil_chicken` | Poulet cru + Tomate + Basilic | Poulet tomate-basilic | Préparation → four/fumoir |
|
||||
| `press_grape_block` | 9 × Raisin | 9 × Moût de raisin | Table |
|
||||
| `press_olive_block` | 9 × Olives | 9 × Huile d'olive | Table |
|
||||
| `press_tomato_block` | 9 × Tomate | 9 × Pulpe de tomate | Table |
|
||||
| `raw_dough` | Farine de blé + Levure + Fiole d'eau | 2 × Pâte crue | Table |
|
||||
@@ -0,0 +1,76 @@
|
||||
# IA-12 — Cuisine directe, chaudron Minecraft et baratte
|
||||
|
||||
Préparation initiale **beta.319** du 30 octobre 2026, réunie au
|
||||
[lot beta.320](integration-beta320.md) sur `codex/itsalive-26-3` avec la carte
|
||||
et l’activité saisonnière, à la demande du créateur. Les sources sont destinées
|
||||
au push Git après validation ; aucun déploiement n’est demandé par ce lot.
|
||||
La dernière livraison publique reste beta.318.
|
||||
|
||||
## Résultat
|
||||
|
||||
Les **46 préparations artificielles** `raw_cauldron_*`, `raw_pan_*` et
|
||||
`raw_oven_*` disparaissent du créatif, des fabrications accessibles et de JEI.
|
||||
Les recettes découvertes enseignent les appareils et leurs vrais ingrédients.
|
||||
Le riz cuit, les infusions, les légumes grillés et les plats ne nécessitent
|
||||
plus d’objet intermédiaire nommé « Uncooked ».
|
||||
|
||||
La pâte crue et les saucissons crus restent de vraies préparations.
|
||||
Les plats chauds se font directement à la poêle, au chaudron ou à la cuisinière.
|
||||
Les recettes froides déjà cohérentes restent à l’établi.
|
||||
|
||||
Le seul chaudron proposé au joueur est le chaudron **Minecraft** : plus de
|
||||
« Cooking Pot » distinct dans le créatif ou JEI. Un ancien exemplaire pose
|
||||
désormais le chaudron Minecraft ; copie créative et casse de la variante
|
||||
pleine donnent aussi le chaudron Minecraft. Ajouter les ingrédients et remuer
|
||||
avec un bâton conserve le fonctionnement précédent, dont les lots répétés.
|
||||
|
||||
[La nouvelle baratte](wiki/alimentation/laitages.md) remplace la crème instantanée
|
||||
et le beurre au moulin : repos du lait cinq minutes sans combustible, beurre
|
||||
et crème fouettée en huit gestes, beurre aux herbes en quatre gestes. Elle
|
||||
utilise des modèles cubiques et des textures vanilla, un HUD FR/EN et la page
|
||||
JEI des transformations. Aucun nouvel onglet créatif ni menu d’appareil.
|
||||
Le seau reste rempli pendant le repos et revient vide au paiement final.
|
||||
Le fromage continue de fermenter dans son tonneau.
|
||||
|
||||
Les petites herbes et fougères donnent directement des **semences** selon leur
|
||||
climat : graines, grains et légumineuses à planter, bouture de menthe, grain
|
||||
de café. Les légumes et fruits récoltés ne tombent plus de l’herbe. Carottes,
|
||||
pommes de terre, oignons, ail et couronnes d’ananas se récupèrent sur les plantes
|
||||
sauvages ou se multiplient à partir des cultures existantes.
|
||||
[Le guide et la planche](wiki/alimentation/README.md) décrivent ces chemins.
|
||||
|
||||
## Continuité
|
||||
|
||||
Tous les identifiants d’objets, blocs et entités existants restent enregistrés.
|
||||
Les anciens objets de préparation restent cuisinables au four/fumoir avec
|
||||
leurs types, identifiants de recettes et XP d’origine. Les recettes de fabrication
|
||||
de ces objets sont conservées sous leur type historique, avec un tag vide
|
||||
qui rend leur placement impossible. Les anciens libellés indiquent leur statut.
|
||||
Les anciennes recettes de beurre sont désactivées, leurs entrées restent récupérables.
|
||||
L’ancienne crème au chaudron reste une voie de compatibilité cachée pour les lots engagés.
|
||||
|
||||
La variante pleine `sanctuary:cooking_cauldron` conserve son entité et ses
|
||||
données ; elle sert au contenu du chaudron ordinaire et ne constitue plus un
|
||||
appareil à obtenir séparément. Aucun format de sauvegarde existant n’est modifié.
|
||||
La baratte possède un nouvel identifiant `sanctuary:dairy_churn` et son propre
|
||||
inventaire sauvegardé, ses quatre entrées manuelles et sa sortie unique.
|
||||
Le champ de recette `manual_strokes` est optionnel ; les anciennes recettes
|
||||
gardent zéro geste et leurs comportements actuels.
|
||||
|
||||
La modification des butins ne change ni les habitats, ni les placements, ni
|
||||
la graine et la révision de génération IA-09/beta.316. Aucun chunk sauvegardé
|
||||
n’est modifié, régénéré ou repeuplé. Les racines, bulbes et ananas qui ne sont
|
||||
pas déjà cultivés doivent être trouvés sur une vraie plante sauvage.
|
||||
|
||||
## Vérification
|
||||
|
||||
Les tests serveur ciblent les recettes réelles, les récipients rendus une fois,
|
||||
le repos sauvegardé, les gestes manuels, l’annulation, les mélanges refusés,
|
||||
la sortie pleine, la casse et les six climats de semences. Les parcours client
|
||||
ciblent Vulkan avec Sodium, les interactions natives, les modèles, le créatif,
|
||||
JEI, les textes FR/EN aux échelles 2/3/4 et la réouverture des sauvegardes.
|
||||
|
||||
Le [lot beta.320](integration-beta320.md) est vérifié : **241 tests serveur**,
|
||||
parcours regroupé **Vulkan/Sodium** et packs assemblés. Les 2 770 classes de
|
||||
production distribuées sont identiques à celles de ce parcours.
|
||||
[Reçu et empreintes](integration-beta320-verification.json).
|
||||
@@ -0,0 +1,53 @@
|
||||
# PACK-03 — Serveur Sanctuary préenregistré et icône
|
||||
|
||||
Ticket du **26 octobre 2026**, branche `codex/default-server`, version `beta.295`.
|
||||
|
||||
Le premier démarrage du client ajoute **Sanctuary Beta**, adresse publique
|
||||
`beta.sanctuary-minecraft.net`, dans la liste multijoueur vanilla. Le mécanisme
|
||||
est livré dans le JAR : il fonctionne après import du ZIP Prism du site,
|
||||
installation MRpack et mise à jour d'une instance packwiz existante.
|
||||
|
||||
`servers.dat` reste un fichier personnel, jamais géré par packwiz. L'ajout
|
||||
conserve l'ordre, les noms, réglages et champs inconnus des autres favoris.
|
||||
Un favori Sanctuary existant est conservé sans doublon, y compris avec le nom
|
||||
DNS en majuscules, un point final ou les ports 25565/25567. Une entrée cachée
|
||||
issue de connexion directe devient visible sans être renommée. Avant la
|
||||
première écriture, une copie exacte est conservée dans
|
||||
`servers.dat.before-sanctuary-beta`. Un fichier illisible reste intact.
|
||||
|
||||
Le marqueur local `.sanctuary/default-server-beta` indique que l'ajout initial
|
||||
est terminé : le joueur peut ensuite renommer, déplacer ou supprimer le favori.
|
||||
Il n'est pas recréé à chaque lancement. Aucun téléchargement ni connexion de
|
||||
jeu automatique n'est ajouté.
|
||||
|
||||
Le logo 160 × 160 du pack est redimensionné en PNG 64 × 64, sans nouvelle
|
||||
illustration. Cette même image sert d'icône initiale du favori et de
|
||||
`server-icon.png` dans le profil serveur packwiz. Le serveur annonce ainsi
|
||||
l'icône aux clients lors du ping de la liste multijoueur. Le profil client ne
|
||||
possède jamais `servers.dat` ; le profil serveur possède explicitement cette
|
||||
icône. Les mondes et réglages de jeu ne changent pas.
|
||||
|
||||
La livraison commune intègre le ticket terminé
|
||||
[CLAIM-03](property-command-beta294.md) : seule la commande anglaise
|
||||
`/sanctuary property` et ses sous-commandes sont conservées. Les deux fichiers
|
||||
de production, les deux fichiers de GameTests et le contrat sont repris
|
||||
exactement depuis sa préparation locale beta.294, après ses 18 tests serveur
|
||||
réussis, sans modifier son checkout de travail.
|
||||
|
||||
## Vérifications
|
||||
|
||||
- `defaultServerListSmoke` : 15 contrôles, dont lecture par `ServerData`
|
||||
vanilla, icône 64 × 64, favoris existants, sauvegarde exacte, suppression,
|
||||
absence de doublon et fichier corrompu suivi d'une réparation.
|
||||
- Parcours client **Vulkan FR/EN**, GUI 3 en 1280 × 800 : réussi en 38 s,
|
||||
hook réel de démarrage, liste vanilla, nom et icône, ping public 0/20.
|
||||
Deux captures inspectées ; aucun monde ouvert. Journal et captures sous
|
||||
`build/release295/` et `mods/sanctuary/build/run/clientGameTest/screenshots/`.
|
||||
- `./gradlew check build assemblePack assembleServerPack` : réussi en
|
||||
**3 min 22 s**, avec les contrôles purs et **18 tests serveur ciblés**
|
||||
`property270,claims272,claims277,claims278`, `sanctuaryAtlasOnly=true`.
|
||||
Les tests vérifient à nouveau la commande unifiée sur la base commune.
|
||||
Journal : `build/release295/check-build.log`.
|
||||
- **Publication effectuée** : Gitea, canal client/serveur, CT 350, téléchargement
|
||||
Web et instance Prism historique en beta.295. [Reçu complet](release-beta295.md),
|
||||
sauvegardes et limite de l’instance importée encore ouverte.
|
||||
@@ -0,0 +1,75 @@
|
||||
# MAP-CTM — Calque Demeure continu, beta.274
|
||||
|
||||
Branche `codex/inhabitant-property`. Demande du 24 octobre 2026, après beta.273.
|
||||
La [refonte des propriétés](property-demeure-refonte.md) reste un cadrage en
|
||||
attente ; la fiche Habitant est conservée. Le créateur a confirmé que les claims
|
||||
actuels doivent rester accessibles.
|
||||
|
||||
Le calque Demeure garde sa texture de 1 024 × 1 024 pixels alignée sur celle du
|
||||
terrain, mais retire les cadres de chunks. Deux cellules adjacentes ayant la
|
||||
même couleur et la même influence se raccordent sans couture interne, y compris
|
||||
aux coins. Il ne s’agit pas d’ajouter des textures CTM de blocs dans le monde.
|
||||
|
||||
La teinte est uniforme dans chaque cellule connue. Sa présence suit la **part
|
||||
relative d’influence** déjà calculée par Demeure, avec un alpha de 16 + 96 × part / 100
|
||||
(0 si la part est nulle). Ce pourcentage n’est pas un compteur de jours habités
|
||||
ou une preuve d’ancienneté. Le terrain, le brouillard et le vide gardent leurs
|
||||
pixels ; seuls les chunks modifiés sont repeints. Un changement de pourcentage
|
||||
actualise maintenant la teinte même si la couleur du personnage reste identique.
|
||||
|
||||
## Protections, dans le même calque pixel
|
||||
|
||||
Une protection active prend une couleur uniforme (alpha 64/255) dans la même
|
||||
texture que Demeure : plus de rectangles GUI par chunk, de cadres, de pointillés
|
||||
ou de boucliers. Les cellules voisines de même propriétaire se rejoignent sans
|
||||
trait intérieur. Un claim sans protection reste déclaré et accessible au clic
|
||||
droit, sans aplat de protection. Si les deux affichages sont activés, la couleur
|
||||
de protection est prioritaire sur l’influence Demeure.
|
||||
|
||||
La légende associe les couleurs aux personnages ayant une protection visible,
|
||||
avec trois noms au maximum puis un compteur. Le bouton de masquage reste partagé
|
||||
avec Pause. Le calque est invalidé par les achats, les données de Demeure, les
|
||||
changements d’affichage et l’expiration ; les cellules expirées sont repeintes
|
||||
une fois. L’aperçu de Pause compose la même teinte dans ses propres pixels de
|
||||
terrain, en conservant le masque du vide et du brouillard. Aucun dessin de
|
||||
bordure ne dépend de l’adjacence : le raccord résulte des pixels uniformes.
|
||||
|
||||
L’infobulle du bouton décrit la présence et l’influence d’habitation, sans
|
||||
« aucun claim ni protection ». Les règles, scores et formats de Demeure,
|
||||
les droits et données de propriété, la génération et les mondes personnels
|
||||
ne sont pas modifiés par cette correction d’affichage.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack` réussit en **2 min 50 s** : **29 tests serveur ciblés**
|
||||
(claims, ancien modèle, minage, overview, menus, Atlas et Demeure). Les contrôles
|
||||
indépendants du registre restent réussis. Les deux parcours **Vulkan FR/EN,
|
||||
GUI 2/3/4** passent : **58 s / 19 captures** pour les propriétés et **29 s /
|
||||
8 captures** pour Demeure.
|
||||
|
||||
Les tests de pixels vérifient les bords, coins et corps identiques sur des
|
||||
cellules adjacentes, la teinte seule des protections actives, les propriétaires
|
||||
hors ligne, le changement de pourcentage sans changement de couleur, le vide,
|
||||
le brouillard et le retrait d’une empreinte. Le masquage, le réaffichage,
|
||||
l’expiration, le clic droit, la composition dans Pause et l’accès Habitant sont
|
||||
couverts. Captures dans `build/map274-screenshots/` et
|
||||
`build/demeure274-screenshots/` ; inspections FR GUI 4, EN GUI 3, Pause et Habitant.
|
||||
|
||||
Le MRpack beta.274 est exporté et vérifié : ZIP, Minecraft 26.3, Loader 0.19.5
|
||||
et octets des deux JAR locaux identiques aux builds. Les archives beta.270 à
|
||||
beta.273 gardent leur empreinte. Reçu : `build/map274-validation.json`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=claims273,claims272,property270,mining,overview271,menus,map,demeure \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryMap274ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
# Pour le second parcours, remplacer sanctuaryMap274ClientTests par sanctuaryDemeure274ClientTests.
|
||||
```
|
||||
|
||||
Export local uniquement. La proposition de claim issue de l’habitation, le
|
||||
premier occupant, les duels, l’accord de partage et un tarif moins élevé restent
|
||||
à définir dans le cadrage de reprise ; aucun n’est annoncé comme implémenté.
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"version": "beta.318",
|
||||
"date": "2026-10-30",
|
||||
"branch": "codex/itsalive-26-3",
|
||||
"base_commit": "7ef4d51a",
|
||||
"local_only": true,
|
||||
"published_or_installed": false,
|
||||
"new_results": 18,
|
||||
"new_items_including_preparation": 19,
|
||||
"new_recipes": 19,
|
||||
"active_drying_recipes": 16,
|
||||
"active_oven_recipes": 17,
|
||||
"active_cauldron_recipes": 24,
|
||||
"active_milling_recipes": 10,
|
||||
"generated_json_verified": 1268,
|
||||
"unchanged_original_pngs": 1108,
|
||||
"jar_sha256": "5b8d6fff72c3128ceac085a9d71b493bbda13a0dbbe42ffdd3e8dc2fda3a632b",
|
||||
"client_server_staged_jar_sha256_match": true,
|
||||
"template_zip_sha256": "a5b6199779c818e5134d6b9eef10f257dc4412f1bcd0dc53589121eff793ada3",
|
||||
"server": {
|
||||
"command": "./gradlew check build assemblePack -PsanctuaryFocusedTests=driedcuisine318,drying317,drying313,foraging316,agriculture300,vanilla301,sausage315,cheesewine314,cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge -PsanctuaryAtlasOnly=true",
|
||||
"required_tests_passed": 189,
|
||||
"duration": "2m 48s",
|
||||
"log": "build/dried-cuisine318-check-build-pack.log"
|
||||
},
|
||||
"client": {
|
||||
"command": "./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryDriedCuisine318ClientTests=true -PsanctuarySodiumClientTests=true -PsanctuaryFocusedTests=driedcuisine318,drying317 -PsanctuaryQuickTests=true -PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 -PsanctuaryClientNoVsync=true",
|
||||
"backend": "Vulkan / Apple M1",
|
||||
"sodium": true,
|
||||
"duration": "1m 10s",
|
||||
"result": "pass",
|
||||
"models": 19,
|
||||
"screenshots": 16,
|
||||
"screenshots_directory": "build/dried-cuisine318-screenshots",
|
||||
"log": "build/dried-cuisine318-client.log",
|
||||
"spicy_visual_pulses_and_unchanged_health_verified": true,
|
||||
"only_graphical_drying_fixture_accelerates_after_actual_save": true,
|
||||
"final_low_impact_change": "Raw spicy sausage tooltip points to the drying rack; compiled with the full final build."
|
||||
},
|
||||
"spicy_effect": {
|
||||
"visual_packet": "ClientboundHurtAnimationPacket",
|
||||
"pulses": 2,
|
||||
"delay_ticks": 8,
|
||||
"damage_event_sent": false,
|
||||
"health_absorption_velocity_and_server_hurt_state_unchanged": true,
|
||||
"saved_state_added": false
|
||||
},
|
||||
"graphics_limit": "Existing sprites with native tint and reused cuboid sausage geometry."
|
||||
}
|
||||
@@ -0,0 +1,121 @@
|
||||
# IA-11 — Les 18 nouvelles recettes aux produits séchés
|
||||
|
||||
Préparation locale **beta.318**, 30 octobre 2026, branche `codex/itsalive-26-3`,
|
||||
socle `7ef4d51a` / beta.317. Demande : rendre jouables les dix-huit combinaisons
|
||||
du guide, puis ajouter de petits coups sans dégâts lorsqu'on mange épicé.
|
||||
Aucune publication, installation Prism, mise à jour de site ou de serveur.
|
||||
|
||||
## Résultat jouable
|
||||
|
||||
[Liste complète : ingrédients, appareils, quantités et durées](wiki/alimentation/sechoir.md) ·
|
||||
[Fiche autonome HTML](wiki/alimentation/sechoir.html).
|
||||
|
||||
- Cuisinière : pain aux raisins, brioche vanillée aux raisins, biscuits aux fruits
|
||||
secs et pain aux tomates et basilic. Cuisson de 12 à 16 secondes, ingrédients
|
||||
payés en fin de cycle, combustible et sortie unique habituels. Quatre biscuits
|
||||
par lot ; un pain ou une brioche pour les autres préparations.
|
||||
- Établi : les deux sandwichs, salade de pois chiches aux tomates séchées,
|
||||
tomates marinées, mélange de fruits secs, dessert ananas-vanille et
|
||||
assaisonnement aux herbes. Un résultat par lot, ou deux portions d'assaisonnement.
|
||||
- Chaudron : riz au saumon séché, ragoût du voyageur, soupe de poisson séché,
|
||||
haricots à la viande séchée et infusion pomme-menthe. Une dose d'eau par portion,
|
||||
chaleur et geste au bâton ; cuisson de 11 à 18 secondes. Le réassort et la recette
|
||||
mémorisée gardent le fonctionnement existant. Ajouter le bol, ou une fiole vide
|
||||
pour l'infusion, avec les ingrédients. Le récipient revient une fois à la consommation.
|
||||
- Moulin manuel : un piment séché donne deux portions de poudre, sans combustible.
|
||||
La poudre remplace aussi le piment dans les anciennes recettes. L'assaisonnement
|
||||
aux herbes fonctionne dans l'omelette existante.
|
||||
- Saucisson pimenté : à l'établi, une préparation de saucisson, un piment séché
|
||||
ou une poudre de piment et une coriandre séchée donnent une préparation pimentée.
|
||||
Elle sèche cinq minutes puis se pose pour manger quatre tranches de deux points
|
||||
de nourriture chacune. Les modèles montrent la coupe et la longueur restante.
|
||||
|
||||
Cela ajoute **18 résultats, 19 objets en comptant la préparation de saucisson,
|
||||
et 19 transformations** : le saucisson possède deux étapes. Le séchoir passe de
|
||||
15 à **16 recettes**. Aucun nouvel onglet créatif ; tout rejoint Nourriture et boissons.
|
||||
Libellés FR/EN, recettes natives synchronisées dans JEI et découverte par les
|
||||
ingrédients séchés ou les préparations correspondantes.
|
||||
|
||||
Les bols et fioles sont des composants natifs `USE_REMAINDER`, après paiement
|
||||
effectif de leur récipient d'origine. L'infusion consomme aussi une fiole de miel :
|
||||
sa bouteille est éjectée à la cuisson, tandis que la fiole de service revient
|
||||
quand on boit. L'eau peut venir de la réserve du chaudron ou d'une vraie fiole
|
||||
d'eau ; les potions à effets sont refusées. L'ananas séché ne rend aucune seconde
|
||||
couronne et les nouveaux plats ne créent aucune semence.
|
||||
|
||||
## Réaction épicée
|
||||
|
||||
Après la consommation effective d'un aliment du tag `sanctuary:spicy_foods`,
|
||||
un paquet natif `ClientboundHurtAnimationPacket` et un petit son de coup reçu
|
||||
produisent la réaction ; un second coup suit huit ticks plus tard, soit 0,4 seconde.
|
||||
Une nouvelle bouchée remplace l'attente précédente, sans empiler une file sans limite.
|
||||
|
||||
Le piment cru et les anciens chilis, ragoût de pois chiches, curry, mouton épicé
|
||||
et kimchi sont concernés, ainsi que les nouveaux haricots à la viande séchée et
|
||||
le saucisson pimenté posé. Les ingrédients non comestibles, dont la sauce piquante,
|
||||
ne déclenchent aucune consommation artificielle. Les plats doux ne réagissent pas.
|
||||
|
||||
Il n'y a aucun appel de dégâts, aucune modification de santé, absorption, armure,
|
||||
invulnérabilité ou vitesse. Aucun événement de dégâts n'est envoyé. La réaction
|
||||
reste transitoire, ne crée ni effet de statut ni donnée de sauvegarde, et s'arrête
|
||||
à la mort, à la déconnexion ou à l'arrêt du serveur. Une tranche refusée parce
|
||||
que le joueur est rassasié ne déclenche pas la réaction.
|
||||
|
||||
## Compatibilité et graphismes
|
||||
|
||||
Ajouts uniquement pour les objets, bloc de saucisson pimenté et recettes. Les
|
||||
identifiants existants et le stockage des appareils, dont `DryingVersion=1`,
|
||||
restent inchangés. Aucun changement de génération, aucun monde personnel ouvert,
|
||||
aucune conversion de sauvegarde. Les anciennes préparations et le séchage nature
|
||||
gardent leurs recettes et leurs durées.
|
||||
|
||||
Les nouvelles recettes réutilisent les types natifs de fabrication culinaire,
|
||||
cuisson, moulin et séchoir déjà synchronisés. Le catalogue historique 26.2
|
||||
n'est pas modifié. Le nouveau catalogue `scripts/data/dried-cuisine.json` contient
|
||||
les valeurs alimentaires, quantités, récipients, durées et sources des icônes.
|
||||
Les propositions du catalogue précédent sont marquées comme implémentées en beta.318.
|
||||
|
||||
Les icônes utilisent des sprites existants avec des teintes natives. Le saucisson
|
||||
pimenté réutilise les géométries cubiques du saucisson avec une teinte orange,
|
||||
y compris les seize orientations et découpes. Les PNG d'origine restent intacts ;
|
||||
il ne s'agit pas de dix-neuf nouvelles textures peintes sur mesure.
|
||||
|
||||
## Vérification
|
||||
|
||||
`./gradlew check build assemblePack` a réussi en **2 min 48 s**. Les **189 tests
|
||||
serveur natifs** passent : dix nouveaux cas couvrent les dix-huit résultats et
|
||||
leurs dix-neuf transformations, les fabrications payées, toutes les échéances
|
||||
complètes, la cuisson répétée, les bols/fioles, la découverte, le saucisson
|
||||
sauvegardé puis partagé et les paquets épicés sans dégâts. Les régressions couvrent
|
||||
les 24 recettes du chaudron, les autres appareils, l'agriculture, les récoltes,
|
||||
la vanille, les recettes et la progression.
|
||||
|
||||
Le parcours **Vulkan / Apple M1 avec Sodium** a réussi en **1 min 10 s** :
|
||||
les dix-neuf modèles et leurs noms FR/EN, nom du bloc placé, onglet Nourriture et
|
||||
boissons, menus aux échelles 2/3/4, vrais paquets de fabrication d'un sandwich,
|
||||
cuisson du pain aux raisins, riz au saumon au chaudron après remuage, mouture de
|
||||
quatre piments en huit poudres puis paiement d'une poudre pour le saucisson,
|
||||
accrochage et récupération, sauvegarde réelle, quatre tranches, deux animations
|
||||
épicées par tranche avec santé inchangée, retour d'un bol et recettes JEI.
|
||||
Seuls les derniers ticks du séchage graphique sont rapprochés de leur échéance,
|
||||
après la sauvegarde ; les 6 000 ticks complets passent côté serveur. Seize
|
||||
captures sont conservées dans `build/dried-cuisine318-screenshots/`.
|
||||
|
||||
L'infobulle finale de la préparation pimentée indique le séchoir et ses 300 secondes,
|
||||
puis est compilée avec le build complet. Les contrôles du JAR confirment
|
||||
**1 268 ressources JSON**, les **19 recettes ajoutées** sans suppression d'ancien
|
||||
identifiant et **1 108 PNG strictement identiques à beta.317**. Les JAR du mod et
|
||||
des packs client/serveur préparés ont le même SHA-256 ; le ZIP du template est valide.
|
||||
Aucun monde personnel ni installation de jeu n'a été touché.
|
||||
[Commandes, empreintes et reçu](dried-cuisine-beta318-verification.json).
|
||||
|
||||
## Installation locale ultérieure
|
||||
|
||||
Le 30 octobre 2026, ce binaire vérifié est installé dans la même instance Prism
|
||||
pour les essais, sans publication ni lancement d’un monde personnel.
|
||||
[Profil local, conservation et reçu](local-beta318.md).
|
||||
|
||||
## Livraison publique ultérieure
|
||||
|
||||
La beta.318 est publiée le 30 octobre 2026. Le serveur et le site sont à jour,
|
||||
et Prism a retrouvé le canal public. [Reçu de livraison](release-beta318.md).
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"version": "beta.317",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.317.jar",
|
||||
"jar_sha256": "a1ddd0b1701d2144a93f1368a4e1f862869e2170ee03c7c842908578c81a60a6",
|
||||
"generated_json_verified": 1182,
|
||||
"unchanged_original_pngs": 1108,
|
||||
"new_items": 12,
|
||||
"active_drying_recipes": 15,
|
||||
"new_drying_recipes": 14,
|
||||
"future_combinations_proposed": 18,
|
||||
"legacy_smoking_xp_recipe_preserved": true,
|
||||
"date": "2026-10-30",
|
||||
"branch": "codex/itsalive-26-3",
|
||||
"base_commit": "7b56c3cd",
|
||||
"local_only": true,
|
||||
"published_or_installed": false,
|
||||
"world_generation_changed": false,
|
||||
"drying_storage_version": 1,
|
||||
"server": {
|
||||
"command": "./gradlew check build assemblePack -PsanctuaryFocusedTests=drying317,drying313,foraging316,agriculture300,vanilla301,sausage315,cheesewine314,cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge -PsanctuaryAtlasOnly=true",
|
||||
"required_tests_passed": 179,
|
||||
"build_duration": "2m 40s",
|
||||
"log": "build/drying317-check-build-pack.log"
|
||||
},
|
||||
"client": {
|
||||
"command": "./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true -PsanctuaryDrying317ClientTests=true -PsanctuarySodiumClientTests=true -PsanctuaryFocusedTests=drying317,drying313 -PsanctuaryQuickTests=true -PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 -PsanctuaryClientNoVsync=true",
|
||||
"backend": "Vulkan",
|
||||
"renderer": "Apple M1",
|
||||
"sodium": true,
|
||||
"duration": "51s",
|
||||
"result": "pass",
|
||||
"screenshots": "build/drying317-final-screenshots",
|
||||
"screenshots_count": 9,
|
||||
"log": "build/drying317-client.log",
|
||||
"accelerated_near_completion_only_in_graphical_fixture": true
|
||||
},
|
||||
"template_zip_sha256": "bd8f959ce3d835c1ffff7f7d769cf125700c599bee2f049ed9b04cb1e9412b94",
|
||||
"staged_client_and_server_jar_sha256_match": true,
|
||||
"graphics_limit": "Existing sprites with native constant tint; no twelve separately painted PNGs."
|
||||
}
|
||||
@@ -0,0 +1,114 @@
|
||||
# IA-10 — Viandes, poissons, fruits et herbes au séchoir
|
||||
|
||||
Préparation locale **beta.317**, 30 octobre 2026, même branche
|
||||
`codex/itsalive-26-3`, socle `7b56c3cd` / beta.316 locale. Demande : ajouter les
|
||||
produits séchés et proposer des combinaisons culinaires. Aucune publication,
|
||||
installation Prism, modification du site ou du serveur personnel.
|
||||
|
||||
## Résultat jouable
|
||||
|
||||
[Recettes détaillées, usages et 18 propositions de plats](wiki/alimentation/sechoir.md) ·
|
||||
[Copie autonome sous forme de tableaux](wiki/alimentation/sechoir.html).
|
||||
|
||||
Le séchoir possède **15 recettes**, dont le saucisson de beta.313 inchangé :
|
||||
|
||||
| Durée de jeu | Produits |
|
||||
| --- | --- |
|
||||
| 1 minute | Basilic, menthe, coriandre et fraises séchés |
|
||||
| 1 min 30 s | Raisins secs, piment séché, pomme séchée |
|
||||
| 2 minutes | Cabillaud séché, saumon séché, tomates et ananas séchés |
|
||||
| 3 minutes | Gousse de vanille séchée |
|
||||
| 4 minutes | Viande séchée depuis du bœuf cru ou du porc cru |
|
||||
| 5 minutes | Saucisson séché depuis sa préparation |
|
||||
|
||||
**Douze nouveaux objets** dans l'onglet vanilla Nourriture et boissons,
|
||||
avec libellés FR/EN, modèles et recettes JEI. Cabillaud et saumon crus utilisent
|
||||
les objets Minecraft existants. Bœuf et porc donnent le même produit séché ;
|
||||
les deux poissons gardent des produits distincts. Les fruits ajoutés sont
|
||||
pomme, fraise et ananas, plus les raisins secs.
|
||||
|
||||
Les nouvelles provisions sont comestibles. Viande : 6 points et coefficient
|
||||
de saturation 0,8 ; cabillaud : 5/0,6 ; saumon : 6/0,7 ; raisins et fraises :
|
||||
3/0,5 ; tomate : 2/0,6 ; pomme : 4/0,5 ; ananas : 4/0,7. Piment et herbes
|
||||
séchés restent des ingrédients. La couronne d'ananas est rendue exactement
|
||||
une fois **à la fin du séchage**, par le mécanisme de restes déjà présent.
|
||||
Le produit séché n'en rend pas à sa consommation.
|
||||
|
||||
Les quatre crochets restent indépendants : aliments différents, départs
|
||||
différents et durées différentes sur un même cadre. Aucun combustible.
|
||||
Ticks chargés à 20 ticks/s ; pluie et immersion suspendent le travail,
|
||||
un toit protège. Alimentation par entonnoir et extraction des produits prêts
|
||||
seulement conservées. Le retrait d'un aliment annule uniquement son propre
|
||||
travail. Les ingrédients prêts ne sont pas séchés à nouveau.
|
||||
|
||||
## Recettes existantes et pistes futures
|
||||
|
||||
Le piment et chaque herbe séchée remplacent leur équivalent frais, un pour
|
||||
un, dans les recettes de cuisine portées, aussi bien à la préparation manuelle
|
||||
que dans les appareils. Les tags sont additifs : `cooking_chilies`,
|
||||
`cooking_basil`, `cooking_mint`, `cooking_coriander`, et le tag `herbs` inclut
|
||||
aussi les trois herbes sèches. Cela rend immédiatement utilisables les
|
||||
omelettes, infusions de menthe, sauces tomate, pizzas, chilis, currys, mouton
|
||||
épicé, kimchi et sauce piquante concernés. Les récoltes sèches ne donnent
|
||||
pas de nouvelles graines via les recettes agricoles.
|
||||
|
||||
Les tags `dried_fish` et `dried_fruits` décrivent les produits disponibles.
|
||||
Les **18 autres combinaisons du guide sont des propositions**, avec des
|
||||
ingrédients présents dans le jeu ; aucun nouveau pain, sandwich, ragoût,
|
||||
mélange de fruits ou assaisonnement n'est annoncé comme implémenté.
|
||||
Les quantités, eau, récipients et valeurs nutritionnelles de ces futurs plats
|
||||
restent à décider lors d'un prochain lot.
|
||||
|
||||
## Contrat de compatibilité et graphismes
|
||||
|
||||
Les identifiants existants, le format `DryingVersion=1`, les quatre cases
|
||||
et leurs compteurs sont conservés. Aucun changement de génération ni de
|
||||
sauvegarde n'est ajouté. Pas de repeuplement ou de conversion d'un monde.
|
||||
Les préparations de saucisson gardent leur recette et leurs 6 000 ticks.
|
||||
|
||||
La production active de vanille utilise désormais `sanctuary:dry_vanilla_pod`,
|
||||
`sanctuary:food_drying`, 3 600 ticks, et garde le résultat `sanctuary:vanilla_pod`.
|
||||
L'ancien identifiant `sanctuary:dried_vanilla_pod` reste enregistré comme recette
|
||||
native de fumoir avec sa valeur d'XP historique, mais son tag d'ingrédients de
|
||||
compatibilité `legacy_vanilla_smoking` est vide : aucune gousse ne s'y traite.
|
||||
Cette conservation évite le cast natif vers `AbstractCookingRecipe` lors du
|
||||
paiement d'une ancienne réserve d'XP de fumoir. Le test recharge cette histoire
|
||||
native, récupère les recettes/XP et vérifie que gousses vertes et charbon restent
|
||||
intacts. Aucun inventaire ou format de sauvegarde n'est réécrit.
|
||||
La poudre de vanille au moulin et les recettes utilisant la gousse restent
|
||||
compatibles. Aucune modification de monde existant n'est réalisée pour tester
|
||||
ce changement.
|
||||
|
||||
Les nouvelles icônes utilisent le modèle natif `item/generated`, les sprites
|
||||
existants et une teinte constante, comme les préparations déjà portées.
|
||||
Tous les PNG d'origine restent intacts. Ce sont des icônes réutilisant les
|
||||
dessins actuels, pas douze nouvelles textures peintes sur mesure.
|
||||
|
||||
## Sources et vérifications
|
||||
|
||||
`scripts/data/drying-foods.json` pilote les objets, 14 nouvelles transformations,
|
||||
durées et 18 propositions. `scripts/dried_food_resources.py` génère les
|
||||
modèles, recettes, tags et fiches de découverte ; `DriedFoods` enregistre les
|
||||
objets. `scripts/build_drying_guide.py` régénère le guide Markdown et sa copie
|
||||
autonome HTML. Le catalogue historique 26.2 n'est pas réécrit.
|
||||
|
||||
`./gradlew check build assemblePack` a réussi en **2 min 40 s**, avec
|
||||
**179 tests serveur natifs réussis** : nouvelles transformations, séchoir historique,
|
||||
récoltes, agriculture et vanille, fromage/vin/saucisson, appareils, cuisine,
|
||||
recettes et progression. Les 14 nouvelles transformations exécutent chaque
|
||||
échéance complète, avec contrôle au tick précédent puis au tick exact.
|
||||
|
||||
Le parcours **Vulkan / Apple M1 avec Sodium** a réussi en **51 s** : pose et
|
||||
accrochage payés de quatre aliments différents, douze modèles sans texture
|
||||
manquante, onglet Nourriture et boissons, FR/EN aux échelles 2/3/4, immersion
|
||||
et vidage avec de vrais seaux, fermeture/réouverture du monde de test, reprise
|
||||
des compteurs, quatre récupérations, consommation native et **15 recettes JEI**.
|
||||
Les compteurs sont rapprochés de leur fin uniquement dans la fixture graphique,
|
||||
après sauvegarde et vidage ; les durées complètes sont testées côté serveur.
|
||||
Neuf captures sont conservées dans `build/drying317-final-screenshots/`.
|
||||
|
||||
L'audit du JAR vérifie **1 182 ressources JSON** contre les générateurs,
|
||||
**1 108 PNG strictement identiques à beta.316**, et les modèles/libellés FR/EN.
|
||||
Les JAR du mod et des packs client/serveur préparés ont le même SHA-256 ;
|
||||
le ZIP du template beta.317 est valide. Aucune installation ni publication.
|
||||
[Commandes, empreintes et reçu](drying-foods-beta317-verification.json).
|
||||
@@ -0,0 +1,87 @@
|
||||
{
|
||||
"version": "beta.313",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.313.jar",
|
||||
"sha256": "54ea931d2f54eec8dac2d03e5ad1df8fd5b389db235a536bdd98d90a531fbe55",
|
||||
"previous_verified_sha256": "90349a998970030ec0bfd880b307b9162e76fd0f460d70f1c9ac8ad2c115c8bd",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"data/minecraft/tags/block/mineable/axe.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/KitchenAppliances.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenClient$1.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenClient.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenJei$Category.class",
|
||||
"fr/koka/sanctuary/cuisine/KitchenJei.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [
|
||||
"assets/sanctuary/blockstates/drying_rack.json",
|
||||
"assets/sanctuary/items/cured_sausage.json",
|
||||
"assets/sanctuary/items/drying_rack.json",
|
||||
"assets/sanctuary/items/raw_sausage.json",
|
||||
"assets/sanctuary/models/block/drying_rack.json",
|
||||
"assets/sanctuary/models/item/cured_sausage.json",
|
||||
"assets/sanctuary/models/item/drying_rack.json",
|
||||
"assets/sanctuary/models/item/raw_sausage.json",
|
||||
"data/sanctuary/loot_table/blocks/drying_rack.json",
|
||||
"data/sanctuary/recipe/dry_sausage.json",
|
||||
"data/sanctuary/recipe/drying_rack.json",
|
||||
"data/sanctuary/recipe/prepare_sausage.json",
|
||||
"data/sanctuary/sanctuary_recipe_collections/drying.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/DryingRackBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/DryingRackBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/DryingRackHud.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/renderer/DryingRackBlockEntityRenderer$1.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/renderer/DryingRackBlockEntityRenderer.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/renderer/state/DryingRackRenderState.class",
|
||||
"fr/koka/sanctuary/cuisine/recipe/FoodDryingRecipe$1.class",
|
||||
"fr/koka/sanctuary/cuisine/recipe/FoodDryingRecipe.class"
|
||||
],
|
||||
"removed_jar_entries": [],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 208,
|
||||
"agriculture": 376
|
||||
},
|
||||
"additive_drying_json": 13,
|
||||
"culinary_source_classes": 50,
|
||||
"culinary_compiled_classes_verified": 69,
|
||||
"drying_slots": 4,
|
||||
"items_per_slot": 1,
|
||||
"drying_ticks": 6000,
|
||||
"native_minecraft_textures_only": true,
|
||||
"old_pngs_unchanged": 1108,
|
||||
"new_pngs": 0,
|
||||
"server_required": 112,
|
||||
"drying_scenarios": 12,
|
||||
"client_vulkan": {
|
||||
"log": "build/drying313-client.log",
|
||||
"screenshots": "build/drying313-screenshots",
|
||||
"screenshot_count": 11,
|
||||
"world_seed": 313,
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"native_crafting": true,
|
||||
"native_eating": true,
|
||||
"actual_disk_reopen": true,
|
||||
"actual_bucket_pause_drain": true
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"template_added_entries": [
|
||||
"assets/sanctuary/blockstates/drying_rack.json",
|
||||
"assets/sanctuary/items/cured_sausage.json",
|
||||
"assets/sanctuary/items/drying_rack.json",
|
||||
"assets/sanctuary/items/raw_sausage.json",
|
||||
"assets/sanctuary/models/block/drying_rack.json",
|
||||
"assets/sanctuary/models/item/cured_sausage.json",
|
||||
"assets/sanctuary/models/item/drying_rack.json",
|
||||
"assets/sanctuary/models/item/raw_sausage.json"
|
||||
],
|
||||
"build_log": "build/drying313-build.log"
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
# IA-06 — préparation de saucisson et séchoir, beta.313 locale
|
||||
|
||||
Demande du créateur du 29 octobre 2026 : préparer le saucisson puis le sécher
|
||||
avec des gestes vanilla. Durée confirmée : **5 minutes de jeu**. Un séchoir
|
||||
en bois porte quatre préparations visibles, sans combustible ni menu. La
|
||||
pluie suspend le séchage exposé ; un toit le protège. Même branche locale
|
||||
`codex/itsalive-26-3`, sans publication, installation ou déploiement.
|
||||
|
||||
## Contrat de stockage avant développement
|
||||
|
||||
Ajouts uniquement : bloc/objet/bloc entité `sanctuary:drying_rack`, objets
|
||||
`sanctuary:raw_sausage` et `sanctuary:cured_sausage`, type et sérialiseur de
|
||||
recette `sanctuary:food_drying`. Aucun identifiant existant ni format des
|
||||
anciens appareils ne change. Aucune génération de monde n'est ajoutée.
|
||||
|
||||
Le séchoir possède quatre cases natives 0–3, **un objet par crochet**. La
|
||||
préparation et le produit séché utilisent la même case : une conversion
|
||||
remplace exactement un objet par un autre. Chaque crochet conserve ses
|
||||
propres ticks, durée, identifiant de recette et état terminé, sous marqueur
|
||||
`DryingVersion=1`. Les composants des objets restent natifs.
|
||||
|
||||
La progression est autoritaire côté serveur, uniquement sur les ticks du
|
||||
bloc chargé et sec. Pluie et immersion suspendent sans payer ni perdre le
|
||||
travail ; un toit protège de la pluie. Le rechargement reprend les ticks
|
||||
stockés, sans rattrapage hors ligne. Remplacer/retirer une préparation annule
|
||||
son avancement ; les autres crochets continuent. La casse rend le séchoir et
|
||||
chaque objet présent une seule fois, cru ou séché selon son état réel.
|
||||
Les pistons ne déplacent pas le bloc entité.
|
||||
|
||||
Une ancienne version ne connaît pas ces nouveaux identifiants : récupérer
|
||||
les objets et retirer les séchoirs avant un retour à une version antérieure.
|
||||
Aucun monde personnel n'est converti ; les tests ciblent des mondes neufs
|
||||
et des fixtures de développement ignorés.
|
||||
|
||||
## Préparation et gestes retenus
|
||||
|
||||
À l'établi : deux côtelettes de porc crues, du sel, une gousse d'ail et une
|
||||
ficelle donnent **deux préparations de saucisson**. La préparation crue ne se
|
||||
mange pas. Le séchoir se fabrique avec trois bâtons, deux ficelles et deux
|
||||
planches ; son modèle et ceux des saucissons utilisent des cuboïdes et des
|
||||
textures vanilla référencées, sans nouveaux PNG.
|
||||
|
||||
Un clic place une préparation sur un crochet libre. À main vide, récupérer
|
||||
un saucisson prêt ; sinon reprendre une préparation en cours. L'eau se gère
|
||||
avec le comportement vanilla des blocs pouvant contenir de l'eau. L'orientation
|
||||
est horizontale et les contenus tournent avec le cadre. Les entonnoirs peuvent
|
||||
alimenter les crochets libres et ne retirer que les produits prêts dessous.
|
||||
Les trois nouveaux objets rejoignent Nourriture et boissons, sans nouvelle
|
||||
page créative. Les recettes sont intégrées au système de découverte et à JEI.
|
||||
|
||||
## Vérifications locales
|
||||
|
||||
Douze cas serveur natifs vérifient le vrai paiement à l'établi, l'absence de
|
||||
recette concurrente, les **6 000 ticks complets** sur quatre crochets, les
|
||||
interruptions indépendantes, la pluie et le toit, l'immersion et le seau,
|
||||
les quatre progressions sauvegardées sans rattrapage hors ligne, la collecte
|
||||
sélective, la casse sans duplication, l'alimentation/extraction par de vrais
|
||||
entonnoirs, la sauvegarde d'un résultat fini et la découverte des trois recettes.
|
||||
La fixture de pluie est placée dans un biome de plaine dans le monde de test.
|
||||
|
||||
Le parcours **Vulkan / Apple M1**, avec **Sodium 0.9.2+mc26.3**, a réussi en
|
||||
**1 min 16 s**, monde plat neuf de graine **313** :
|
||||
|
||||
- vrais paquets de l'établi, deux fabrications payées donnant quatre
|
||||
préparations depuis quatre porcs crus, deux sels, deux ails et deux ficelles ;
|
||||
- pose du séchoir avec un objet réellement consommé, puis quatre accrochages ;
|
||||
- retrait/raccrochage d'une préparation, sans annuler les trois autres ;
|
||||
- huit états de modèle chargés, cinq cuboïdes de bois par état, trois modèles
|
||||
d'objets sans texture manquante, objets dans Nourriture et boissons ;
|
||||
- HUD français/anglais aux échelles 2, 3 et 4 ;
|
||||
- vrai seau d'eau puis seau vide pour suspendre/reprendre le séchage ;
|
||||
- fermeture/réouverture conservant les quatre préparations et leur progression
|
||||
exacte pendant l'immersion ;
|
||||
- transformation, quatre récupérations natives puis consommation réelle d'un
|
||||
saucisson qui rend de la nourriture ;
|
||||
- recette de cinq minutes synchronisée dans sa catégorie JEI.
|
||||
|
||||
Les 6 000 ticks sont exécutés intégralement dans les cas serveur. Pour ne pas
|
||||
attendre cinq minutes dans le parcours graphique, la fixture rapproche les
|
||||
quatre compteurs de leur fin **après** le rechargement et le vidage au seau ;
|
||||
les 40 à 100 derniers ticks, les transformations, clics et paiements restent
|
||||
réels. Onze captures sont archivées dans `build/drying313-screenshots/` ;
|
||||
les journaux de build, serveur et client sont ignorés.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=drying313,cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryDrying313ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=drying313 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
`check build assemblePack` a réussi en **3 min 9 s**, avec **112 tests serveur
|
||||
obligatoires**. L'audit strict à beta.312 vérifie les ajouts du séchoir et les
|
||||
modifications prévues de registre, rendu, JEI, langues et crédits. Les
|
||||
**1 108 PNG** et les 195 JSON culinaires d'appareils existants sont inchangés ;
|
||||
13 JSON de modèles/recettes/découverte sont ajoutés. Les 432 JSON de cuisine,
|
||||
208 d'appareils et 376 d'agriculture sont comparés à leurs générateurs.
|
||||
Le tag de minage à la hache garde ses entrées historiques. Les classes
|
||||
culinaires compilées et les copies client/serveur du JAR sont vérifiées.
|
||||
Le modèle de pack de ressources emporte les huit nouveaux JSON visuels.
|
||||
|
||||
[Reçu de vérification](drying-rack-beta313-verification.json). JAR local :
|
||||
`mods/sanctuary/build/libs/sanctuary-beta.313.jar`
|
||||
|
||||
SHA-256 :
|
||||
`54ea931d2f54eec8dac2d03e5ad1df8fd5b389db235a536bdd98d90a531fbe55`
|
||||
|
||||
Aucun push, tag, publication, canal packwiz public, installation Prism ou
|
||||
serveur personnel n'a été modifié.
|
||||
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"version": "beta.322",
|
||||
"date": "2026-10-31",
|
||||
"branch": "codex/itsalive-26-3",
|
||||
"local_only": true,
|
||||
"jar": {
|
||||
"path": "mods/sanctuary/build/libs/sanctuary-beta.322.jar",
|
||||
"bytes": 19161350,
|
||||
"sha256": "2e0d86c613f46be4636bf70d4f3b7e678472f62190d38d9225b4fe053d4dd152"
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"active_hooks": 2,
|
||||
"max_items_per_hook": 1,
|
||||
"legacy_storage_version": 1,
|
||||
"legacy_storage_positions": 4,
|
||||
"legacy_reserve_slots": [
|
||||
2,
|
||||
3
|
||||
],
|
||||
"legacy_progress_preserved": true,
|
||||
"legacy_waiting_food_does_not_advance": true,
|
||||
"rack_wooden_cuboids": 7,
|
||||
"crafting": {
|
||||
"drying_rack": "5 sticks + 2 planks",
|
||||
"mill": "3 smooth stone slabs + 2 copper ingots + 1 smooth stone + 1 stick"
|
||||
},
|
||||
"checks": {
|
||||
"check_build_assemblePack": true,
|
||||
"server_tests": 68,
|
||||
"server_focus": "drying322,drying313,drying317,driedcuisine318,sausage315,mill306,kitchen304",
|
||||
"sanctuaryAtlasOnly": true,
|
||||
"vulkan_backend": "Apple M1",
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"full_native_sausage_and_mixed_food_path": true,
|
||||
"final_upright_sprite_native_path": true,
|
||||
"gui_scales": [
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"locales": [
|
||||
"fr_fr",
|
||||
"en_us"
|
||||
],
|
||||
"native_inventory_payment_and_third_item_refusal": true,
|
||||
"waterlogging_and_actual_disk_reload": true,
|
||||
"first_interrupted_graphical_attempt_counted_as_pass": false
|
||||
},
|
||||
"evidence_directory": "build/drying322/",
|
||||
"publication": false,
|
||||
"existing_personal_or_server_world_modified": false,
|
||||
"personal_instance_updated": false
|
||||
}
|
||||
@@ -0,0 +1,72 @@
|
||||
# IA-14 — séchoir à deux aliments et fabrications simples
|
||||
|
||||
Branche `codex/itsalive-26-3`, préparation locale beta.322. Demande du
|
||||
31 octobre 2026 : deux aliments visibles, plus grands et droits ; fabrication
|
||||
du séchoir sans fil et du moulin sans tailleur de pierre.
|
||||
|
||||
## Contrat de compatibilité avant développement
|
||||
|
||||
Le séchoir conserve son identifiant et le stockage `DryingVersion=1`, avec
|
||||
les quatre positions et leurs compteurs historiques. Seules les positions
|
||||
0 et 1 acceptent de nouveaux ingrédients et travaillent. Les anciennes
|
||||
positions 2 et 3 forment une réserve de compatibilité : elles ne sont jamais
|
||||
réalimentées, ne progressent pas en attente et gardent leurs objets,
|
||||
composants, recettes, durées et état terminé.
|
||||
|
||||
Dès qu’une position active se libère, le prochain ancien objet y est repris
|
||||
avec sa progression intacte. Tant qu’un surplus ancien attend, l’insertion
|
||||
manuelle ou par entonnoir est refusée. Les anciens produits déjà prêts
|
||||
restent récupérables. Le HUD signale le nombre d’anciens objets en attente.
|
||||
La casse restitue tous les contenus présents exactement une fois.
|
||||
|
||||
Aucune réécriture globale de monde ou de chunk : ce comportement s’applique
|
||||
aux séchoirs normalement chargés. Aucun format ni identifiant supprimé.
|
||||
|
||||
## Fabrication et rendu
|
||||
|
||||
- Séchoir : cinq bâtons et deux planches, grille `SSS / S S / P P`.
|
||||
- Moulin : trois dalles de pierre lisse, deux lingots de cuivre, un bloc de
|
||||
pierre lisse central et un bâton. Identifiant de recette conservé.
|
||||
- Deux points d’accroche en bois ; sprites agrandis et présentés droits.
|
||||
Les saucissons sont suspendus verticalement par quart de tour, sans rotation
|
||||
oblique des cuboïdes. Les dessins diagonaux de viande et de poisson sont
|
||||
redressés uniquement dans le séchoir ; les icônes d’inventaire restent intactes.
|
||||
- Durées, pluie, immersion, récipients, recettes alimentaires et extraction
|
||||
des produits prêts sont conservés. Les deux aliments restent indépendants.
|
||||
|
||||
## Validation locale
|
||||
|
||||
- **68 tests serveur réussis** : deux positions actives, refus d’un troisième
|
||||
objet, entonnoirs, durées complètes et indépendantes, pluie et immersion,
|
||||
restes d’ananas, sauvegardes et nouvelles fabrications payées à l’établi.
|
||||
- Une sauvegarde native version 1 à quatre objets conserve ses composants,
|
||||
quatre progressions et résultats. La réserve attend, reprend une place libre
|
||||
sans réinitialisation, puis la casse restitue chaque objet exactement une fois.
|
||||
- Parcours **Vulkan / Apple M1 avec Sodium** réussi : fabrication native,
|
||||
deux accrochages payés, retrait/raccrochage, huit états de cadre, saucissons
|
||||
verticaux, noms FR/EN aux échelles 2/3/4, vrais seaux, relecture sur disque,
|
||||
récupération, part de saucisson posée et consommation des produits séchés.
|
||||
- Contrôle complémentaire Vulkan après redressement des dessins diagonaux :
|
||||
viande et cabillaud droits, refus de consommer le troisième ingrédient,
|
||||
douze modèles alimentaires résolus, seize recettes JEI synchronisées.
|
||||
Les captures finales ont été inspectées.
|
||||
- Le premier essai graphique s’est interrompu avant sa fin ; il n’est pas
|
||||
compté comme réussi. Le parcours regroupé a ensuite réussi, puis le contrôle
|
||||
ciblé du rendu final a réussi également.
|
||||
|
||||
Les journaux et captures restent dans `build/drying322/` (ignoré par Git).
|
||||
Aucune publication, modification du canal ou installation personnelle demandée.
|
||||
Le site et le serveur restent sur leur livraison beta.321.
|
||||
|
||||
|
||||
`./gradlew check build assemblePack` final réussi en **4 min 50 s**, avec
|
||||
les **68 tests serveur** et les contrôles de construction et distribution.
|
||||
Profil : `drying322,drying313,drying317,driedcuisine318,sausage315,mill306,kitchen304`,
|
||||
avec `sanctuaryAtlasOnly=true`. Le parcours Vulkan regroupé réussit en
|
||||
**1 min 22 s** ; le contrôle final des sprites redressés en **1 min 16 s**.
|
||||
Les JAR client/serveur sont identiques, les nouvelles classes de test sont
|
||||
absentes du binaire distribué, les langues FR/EN et recettes générées sont vérifiées.
|
||||
|
||||
JAR : `mods/sanctuary/build/libs/sanctuary-beta.322.jar`, 19161350 octets.
|
||||
SHA-256 : `2e0d86c613f46be4636bf70d4f3b7e678472f62190d38d9225b4fe053d4dd152`.
|
||||
[Reçu de vérification](drying-rack-beta322-verification.json).
|
||||
@@ -0,0 +1,88 @@
|
||||
# LIGHT-288 — intégrer la correction des lumières portées
|
||||
|
||||
Branche `codex/dynamic-light-integration`, socle local beta.287 conservé.
|
||||
État : intégré, vérifié et construit en pack local beta.288.
|
||||
|
||||
## Résultat demandé
|
||||
|
||||
Intégrer au pack courant le correctif du commit
|
||||
`6f44214f2725b4ef2d1002606cb83e70885186ec`, branche `codex/dynamic-hand-light`.
|
||||
Sa version locale isolée était beta.283 ; la livraison combinée prend beta.288
|
||||
et conserve les zombies, leurs neuf tenues partagées, les bras natifs et le
|
||||
Hunter accroupi de beta.287.
|
||||
|
||||
Une torche ou une lanterne tenue réagissait dans les normales PBR sans éclairer
|
||||
le terrain avec Sodium. La collecte des sources était correcte, mais les copies
|
||||
`LevelSlice` utilisées par les workers Sodium ne recevaient pas l’instantané.
|
||||
|
||||
L’interface `DynamicLightContext` et deux mixins optionnels transmettent
|
||||
l’instantané immuable du contexte préparé côté rendu vers la copie du worker.
|
||||
Chaque nouveau travail remplace sa capture et `reset` la libère. Les lectures
|
||||
directes de lumière de bloc dans Sodium utilisent le même champ radial que
|
||||
le chemin natif, sans modifier le canal du ciel.
|
||||
|
||||
Les mixins ne sont sélectionnés que côté client avec Sodium présent. La
|
||||
version exacte reste `0.9.2+mc26.3`, facultative et active par défaut dans le
|
||||
pack ; aucune nouvelle dépendance. Les budgets, réglages et chemins natifs
|
||||
existants restent en vigueur. Aucun monde, identifiant, format de sauvegarde
|
||||
ou comportement serveur n’est modifié.
|
||||
|
||||
## Vérification
|
||||
|
||||
Le test existant `HandLight283ClientChecks` est repris sans modification du
|
||||
commit source. Monde plat neuf, graine `283`, salle en pierre fermée et zone
|
||||
de pixels du sol sans interface ni objet en main visible. Deux parcours
|
||||
**Vulkan / MoltenVK 1.4.2, Apple M1** réussis :
|
||||
|
||||
| Rendu du pack combiné | Sol sans source | Sol avec torche |
|
||||
| --- | ---: | ---: |
|
||||
| Sodium `0.9.2+mc26.3` | 11,785 | 85,366 |
|
||||
| Natif, Sodium absent | 11,783 | 90,043 |
|
||||
|
||||
Ces moyennes de luminance sur 255 sont des mesures de pixels, pas des niveaux
|
||||
de lumière du serveur. Les deux mains, l’AO activée/désactivée, shaders/PBR
|
||||
coupés, profil Moyen sans/avec PBR, déplacement et torche jetée sont vérifiés.
|
||||
Après retrait, le sol retrouve sa luminosité initiale ; le moteur de lumière
|
||||
du monde reste à zéro. Avec Sodium, le worker retardé conserve son instantané,
|
||||
la réutilisation le remplace, le ciel reste inchangé et `reset` le libère.
|
||||
|
||||
Commandes des deux parcours, en sessions distinctes :
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryHandLightClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryQuickTests=true -PsanctuaryClientGraphicsBackend=vulkan \
|
||||
-PsanctuaryClientHeapGb=8 -PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le second parcours utilise `-PsanctuarySodiumClientTests=false`. Le parcours
|
||||
`Zombie287ClientChecks` réussit également avec Sodium activé, Vulkan, graine
|
||||
`287` : neuf tenues partagées pour les sept types, bébé classique, bras natifs,
|
||||
21 combinaisons de familiers et marche/bond du Hunter. Logs et captures sous
|
||||
`build/dynamic288/`.
|
||||
|
||||
`./gradlew check build assemblePack -PsanctuaryFocusedTests=lights,hunter286
|
||||
-PsanctuaryAtlasOnly=true` réussit en **2 min 42 s** : **19 GameTests requis**
|
||||
pour les lumières et le Hunter, test d’infrastructure compris, ainsi que tous
|
||||
les contrôles purs configurés par `check`.
|
||||
|
||||
L’export packwiz est vérifié : intégrité ZIP, version `beta.288`, Minecraft
|
||||
`26.3`, Fabric Loader `0.19.5`, un seul JAR Sanctuary identique au binaire
|
||||
construit. Par rapport au JAR beta.287, seules **cinq entrées** changent :
|
||||
la version Fabric, le plugin de sélection des mixins et les trois nouvelles
|
||||
classes du pont Sodium. Toutes les classes et ressources des zombies et
|
||||
familiers sont strictement identiques. Les tests et Sodium ne sont pas
|
||||
embarqués dans le JAR Sanctuary.
|
||||
|
||||
## Livraison locale
|
||||
|
||||
- [Pack beta.288](../build/Sanctuary-beta.288.mrpack), 16 715 918 octets.
|
||||
SHA-256 : `51f70f5f00b0ccd293cf9be0dd34cf3e125c493d7929393428623668543c396b`.
|
||||
- JAR `mods/sanctuary/build/libs/sanctuary-beta.288.jar`.
|
||||
SHA-256 : `189883fad82476da221552fc56facb585f05f3167d0908a855f510625b932358`.
|
||||
- Reçu : `build/dynamic288/validation.json`, comparaison des archives et
|
||||
références des logs. Le MRpack beta.287 reste intact.
|
||||
|
||||
Aucune publication, synchronisation Prism ou ouverture de sauvegarde
|
||||
personnelle. La décroissance radiale et ses limites d’occultation restent
|
||||
celles de l’éclairage dynamique existant.
|
||||
@@ -0,0 +1,105 @@
|
||||
# WHALE-01 — baleine fantôme volante
|
||||
|
||||
Branche `codex/flying-ghost-whale`, préparation locale **beta.290** le
|
||||
26 octobre 2026. Demande : import direct de la baleine de Sanctuary 26.2,
|
||||
avec son IA et son œuf, deux baleines présentes au maximum sur le serveur.
|
||||
|
||||
## Import
|
||||
|
||||
Sources historiques : `26.2/itsalive`, commit
|
||||
`94644a28f05b8010f06ec1181fe6c74a50ad80d6`. Le modèle, ses animations,
|
||||
la texture nuageuse 512 × 256, les particules et les sons Minecraft sont
|
||||
repris. Les API Fabric/Minecraft sont adaptées à **Minecraft 26.3**, sans
|
||||
nouvelle dépendance. La texture de la baleine est copiée octet pour octet.
|
||||
|
||||
- `sanctuary:flying_whale` : baleine géante, paisible, volante, intangible,
|
||||
invulnérable, sans butin. Dimensions historiques 36 × 11, rendu ×2,7.
|
||||
- IA conservée : compagnon vivant non spectateur le plus proche à 520 blocs,
|
||||
cibles successives entre 68 et 140 blocs du joueur, altitude libre, virages
|
||||
progressifs, souffle et lente errance sans joueur.
|
||||
- Spawner historique : contrôle toutes les 400 ticks, une apparition réussie
|
||||
par tiers de journée (8 000 ticks), dans l’Overworld à 92–138 blocs d’un
|
||||
joueur. Il attend si le chunk candidat n’est pas déjà chargé. Aucun chunk
|
||||
n’est généré ou forcé par le spawner. Le calendrier appartient au serveur
|
||||
courant et repart au démarrage, comme le calendrier historique.
|
||||
- Dissipation au plus tard après 14 400 ticks (12 minutes à 20 TPS), possible
|
||||
dès 12 000 ticks après plus de 900 ticks sans joueur proche. Seules les
|
||||
baleines nommées sont sauvegardées, comme en 26.2 ; elles restent soumises
|
||||
à cette durée de vie après chargement.
|
||||
|
||||
Le quota historique de deux baleines chargées est partagé entre **toutes les
|
||||
dimensions du serveur**, et étendu aux œufs, invocations, distributeurs et
|
||||
rechargements. Une troisième entité chargée est retirée. L’utilisation
|
||||
manuelle d’un œuf est refusée avant consommation si les deux places sont
|
||||
prises, avec un message FR/EN. Retirer une baleine libère immédiatement sa
|
||||
place. Les baleines nommées dans des chunks déchargés ne réservent pas de
|
||||
place ; elles repassent par le quota au rechargement.
|
||||
|
||||
## Œuf Minecraft personnalisé
|
||||
|
||||
`sanctuary:flying_whale_spawn_egg` figure dans l’onglet Œufs d’apparition.
|
||||
Son icône est dérivée directement de **`assets/minecraft/textures/item/egg.png`
|
||||
de Minecraft 26.3**, sans reprendre le dessin historique de l’œuf.
|
||||
`scripts/generate_whale_egg.py` recolore les pixels en bleu nuage pâle avec
|
||||
huit pixels lavande. Dimensions 16 × 16, les 90 pixels de coquille,
|
||||
transparence, contour asymétrique et emplacements des ombres restent natifs.
|
||||
Le script refuse une version ou une empreinte source différente et propose
|
||||
`--check` pour comparer les pixels livrés sans réécriture.
|
||||
|
||||
```sh
|
||||
python3.14 scripts/generate_whale_egg.py --check /chemin/minecraft-client.jar
|
||||
/give @s sanctuary:flying_whale_spawn_egg
|
||||
/summon sanctuary:flying_whale ~ ~10 ~
|
||||
```
|
||||
|
||||
Libellés de l’entité, de l’œuf et du refus de quota en FR/EN. Aucun familier
|
||||
miniature, capture de baleine ou conversion d’ID 26.2 n’est ajouté. Pas de
|
||||
changement de générateur, de sauvegarde existante ou de publication distante.
|
||||
|
||||
## Vérification
|
||||
|
||||
- `./gradlew check build assemblePack
|
||||
-PsanctuaryFocusedTests=whale290,recipes,progression
|
||||
-PsanctuaryAtlasOnly=true` : **réussi en 3 min 34 s**, avec **19 tests
|
||||
serveur requis réussis**, tous les contrôles purs de `check`, le JAR
|
||||
`sanctuary-beta.290.jar` et les profils packwiz client/serveur assemblés.
|
||||
Ce périmètre serveur cible la baleine, les recettes et la progression ;
|
||||
il ne rejoue pas les suites de génération historiques.
|
||||
- Archive JAR relue : version beta.290, classes et deux textures présentes,
|
||||
un seul JEI embarqué, aucune classe de test ; même JAR unique dans chacun
|
||||
des deux profils packwiz. Reçu SHA-256 sous `build/whale290/artifacts.json`.
|
||||
- Suite native ciblée `:sanctuary:runGameTest
|
||||
-PsanctuaryFocusedTests=whale290 -PsanctuaryAtlasOnly=true` : **7 tests
|
||||
requis réussis**, dont les six scénarios baleine et le contrôle
|
||||
d’infrastructure. Usage réel de l’œuf en survie, non-consommation à quota
|
||||
plein, quota Overworld/Nether, refus de la troisième invocation, libération
|
||||
d’une place, apparition naturelle à rayon/altitude historiques, déplacement
|
||||
natif, dissipation, collision sans modification du terrain et sauvegarde
|
||||
nommée vérifiés. Les tests attendent que les chunks de développement soient
|
||||
effectivement chargés avant de vérifier leur population.
|
||||
- Parcours graphique **Vulkan / MoltenVK 1.4.2 / Apple M1**, avec
|
||||
**Sodium 0.9.2+mc26.3**, réussi en **49 s** : deux baleines géantes
|
||||
translucides, nageoires animées, texture historique, véritable déplacement
|
||||
autour du joueur, œuf en main et hotbar, libellés FR/EN. Les captures
|
||||
`0000_whale290-native-egg-and-two-whales.png` et
|
||||
`0001_whale290-ghosts.png` sont inspectées visuellement.
|
||||
- `generate_whale_egg.py --check` : pixels livrés identiques au résultat
|
||||
déterministe, 90 pixels opaques et masque alpha strictement natif.
|
||||
PNG de la baleine identique octet pour octet à la référence 26.2 ;
|
||||
JSON des libellés FR/EN et modèles d’objet valides.
|
||||
|
||||
Commande du parcours graphique :
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryWhale290ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=whale290 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Journaux et captures ignorés sous `build/whale290/`. Validation en monde
|
||||
plat de développement neuf, graine `290` pour le client ; aucun monde
|
||||
personnel ni serveur Beta n’est ouvert ou modifié. Le calendrier complet
|
||||
sur une journée réelle et un parcours multijoueur distant ne sont pas
|
||||
revendiqués ; les trois fenêtres sont exercées par les tests de calendrier.
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"version": "beta.316",
|
||||
"status": "local-only",
|
||||
"date": "2026-10-30",
|
||||
"jar": {
|
||||
"path": "mods/sanctuary/build/libs/sanctuary-beta.316.jar",
|
||||
"sha256": "27ec0a8f492517131766a8c026cd0406189db3e78595a59ab605bbacd4303889",
|
||||
"bytes": 19070080
|
||||
},
|
||||
"textures_unchanged_from_beta315": 1108,
|
||||
"server_required_tests": 85,
|
||||
"build": "check build assemblePack",
|
||||
"build_seconds": 300,
|
||||
"client": {
|
||||
"backend": "Vulkan",
|
||||
"device": "Apple M1",
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"preset": "sanctuary:sanctuary",
|
||||
"profile": "231 Medium",
|
||||
"seed": 316,
|
||||
"natural_plants": 66,
|
||||
"types": 16,
|
||||
"models": 24,
|
||||
"locales": [
|
||||
"fr_fr",
|
||||
"en_us"
|
||||
],
|
||||
"reload_preserved": 65,
|
||||
"harvested_stays_empty": true,
|
||||
"seconds": 140,
|
||||
"scope": "starter island native generation, native survival packets, models and disk reload; wild fruit tree plans validated separately by server tests on seeds 0/42/316"
|
||||
},
|
||||
"wiki": {
|
||||
"islands": 9,
|
||||
"crops_and_products": 28,
|
||||
"biome_aliases": 111,
|
||||
"missing_images": 0
|
||||
},
|
||||
"deployment": "none; server and Prism remain beta.315"
|
||||
}
|
||||
@@ -0,0 +1,146 @@
|
||||
# IA-09 — Découverte alimentaire en survie, beta.316
|
||||
|
||||
Demande du 30 octobre 2026. Même branche `codex/itsalive-26-3`, socle public
|
||||
`beta.315` / branche `bb61547b`. Préparation locale : pas de publication,
|
||||
d'installation personnelle ou de modification de la Beta dédiée par ce ticket.
|
||||
|
||||
## Résultat
|
||||
|
||||
La première semence ne nécessite plus le créatif. Les 20 cultures importées,
|
||||
le café, la vanille, les citronniers et les oliviers ont une voie de découverte
|
||||
renouvelable en survie. Le blé, la carotte, la pomme de terre et la betterave
|
||||
disposent aussi de plantes sauvages sur l'île tempérée.
|
||||
|
||||
Le [guide des récoltes](wiki/alimentation/README.md), ses neuf pages d'îles
|
||||
et sa [planche illustrée](wiki/alimentation/planche.html) viennent du même
|
||||
catalogue que le jeu : `scripts/data/foraging.json`. Ils décrivent les habitats,
|
||||
les gestes et les semences à rapporter, ainsi que les ressources vanilla.
|
||||
Ils restent des pages locales ; aucun wiki externe n'est modifié.
|
||||
|
||||
## Répartition
|
||||
|
||||
| Habitat | Principales zones | Récoltes |
|
||||
| --- | --- | --- |
|
||||
| Tempéré | Sanctuary ; certaines prairies du Nord-Ouest | Blé, carotte, pomme de terre, betterave, fraise, tomate, maïs, concombre, poivron, laitue, oignon, ail, chou, haricot, basilic, menthe |
|
||||
| Frais | Vallées et clairières du Nord, prairies/taïgas du Nord-Ouest | Blé, carotte, pomme de terre, betterave, fraise, laitue, oignon, ail, chou, menthe |
|
||||
| Frais humide | Marais et jardin pâle du Nord-Est | Concombre, laitue, chou, haricot, menthe |
|
||||
| Chaud sec | Bosquets/berges du Sud, savanes et sols vivants du Sud-Ouest | Maïs, raisin, pois chiche, piment, coriandre, olive |
|
||||
| Doux ensoleillé | Oasis/berges vivantes de l'Ouest | Tomate, maïs, poivron, aubergine, raisin, basilic, citron, olive |
|
||||
| Tropical | Jungles de l'Est et du Sud-Est, mangroves | Ananas, riz, soja, piment, café, vanille |
|
||||
|
||||
La règle lit le **biome réel à la position**, avec des tags explicites pour
|
||||
les biomes vanilla et les alias Sanctuary versionnés. Elle ne déduit pas
|
||||
le climat de coordonnées cardinales : les expansions ne sont pas fixées
|
||||
à des coordonnées universelles. Le bambou tempéré de l'île principale
|
||||
reste dans le groupe tempéré ; les grottes de roche nue, zones de soufre, cratères, pics de glace et
|
||||
biomes de vide ne sont pas des lieux de cueillette agricole.
|
||||
|
||||
La découverte suit le climat. La culture après transplantation conserve les
|
||||
règles de beta.300/301 : lumière et sol vanilla, riz dans une source sur boue,
|
||||
vanille appuyée contre les troncs. Aucun nouveau verrou climatique de croissance.
|
||||
|
||||
## Gestes et renouvellement
|
||||
|
||||
- Casser une plante sauvage donne une unité de récolte et une semence distincte,
|
||||
ou une seule unité si le produit se replante lui-même. Ananas : fruit + couronne.
|
||||
Aucun labourage automatique du terrain naturel.
|
||||
- Caféier sauvage mûr : clic droit pour les cerises ; leur recette donne les
|
||||
grains verts replantables. Le casser donne aussi un grain.
|
||||
- Arbre fruitier : clic droit sur les feuilles portant un fruit. Les feuilles
|
||||
cassées/décomposées peuvent donner une pousse, selon les règles déjà portées.
|
||||
- Vanille mûre sur un tronc : clic droit pour les gousses, casse pour une bouture.
|
||||
- Dans un terrain déjà exploré, les petites herbes et fougères cassées sans
|
||||
cisailles ni Toucher de soie donnent parfois une récolte du climat : **1/8**,
|
||||
puis tirage uniforme dans la liste admissible. La recette de récupération
|
||||
de semences ou la plantation directe permet de la multiplier.
|
||||
- Riz : herbes marines simples de jungle/mangrove, **1/8**. Pas les algues de
|
||||
pleine mer ; le riz sauvage visible se trouve sur les berges proches d'eau.
|
||||
- Bouture de vanille : lianes vanilla cassées en jungle/mangrove, **1/8**.
|
||||
- Pousses fruitières : feuilles de chêne/acacia dans les habitats chauds
|
||||
correspondants, **1/40**, puis choix parmi les pousses autorisées.
|
||||
|
||||
Les tables natives sont **étendues**, sans remplacement de leurs graines,
|
||||
pommes, bâtons ou pousses. Les variantes à deux blocs ne reçoivent aucun butin
|
||||
ajouté, pour éviter le double paiement des moitiés. Cisailles et Toucher de soie
|
||||
conservent la végétation sans créer simultanément une récolte. Les remplacements
|
||||
de tables par un datapack restent prioritaires. Fortune n'augmente pas les
|
||||
quantités de ces nouvelles trouvailles.
|
||||
|
||||
## Contrat de génération et sauvegardes
|
||||
|
||||
**Décoration agricole IA-09 / révision 316**, graine du parcours natif **316**.
|
||||
Le relief, les identifiants des profils, les biomes et les journaux des expansions
|
||||
ne changent pas. La décoration s'ajoute à la fin de `applyBiomeDecoration`, pour
|
||||
le générateur Sanctuary qui possède les neuf îles. Elle ne s'applique pas aux
|
||||
mondes vanilla ou au monde plat de test.
|
||||
|
||||
Huit candidats déterministes par chunk, sel `0x316F00D`, graine du monde et
|
||||
coordonnées du chunk. Lecture de surfaces déjà présentes ; aucun sol, bassin,
|
||||
source d'eau ou couche de neige n'est créé. Petites herbes/fougères remplaçables,
|
||||
autres végétaux, roches, fluides, constructions et réservations conservés.
|
||||
Les petits arbres fruitiers sauvages utilisent les bois vanilla et un volume
|
||||
entièrement contenu dans leur chunk ; leurs pousses plantées conservent les
|
||||
arbres natifs de beta.300. La vanille ne se pose que contre un tronc accepté.
|
||||
|
||||
**Aucun ancien chunk n'est repassé en décoration**. Les chunks sauvegardés
|
||||
gardent leurs blocs. Aucun chargement, tick de repeuplement, changement de
|
||||
format de sauvegarde ou activation d'expansion n'est ajouté. Un monde existant
|
||||
peut découvrir les semences par les nouveaux butins puis les cultiver ; les
|
||||
nouveaux chunks obtiennent la décoration agricole à leur première génération.
|
||||
Cette évolution additive peut donc être visible à une ancienne frontière
|
||||
d'exploration, sans retouche rétroactive.
|
||||
|
||||
## Vérification
|
||||
|
||||
Le contrôle final `check build assemblePack` valide **85 GameTests serveur requis**,
|
||||
dont huit scénarios IA-09 : toutes les cultures, les climats, les terrasses
|
||||
vivantes du preset public, les premières propagules, les outils natifs,
|
||||
la plantation en survie, les obstacles et les deux arbres sauvages (graines
|
||||
0, 42 et 316). Log : `build/foraging316-build.log`.
|
||||
|
||||
Le parcours client final réussit sous **Vulkan / Apple M1 / Sodium 0.9.2+mc26.3**,
|
||||
avec le preset public `sanctuary:sanctuary`, profil **231 Medium**, graine **316**,
|
||||
dans un monde de développement neuf :
|
||||
|
||||
- **66 plantes sauvages**, **16 types**, relevés dans 25 chunks autour du départ ;
|
||||
- vraie casse en survie, attente de l'état serveur et contrôle des objets attendus,
|
||||
au sol ou ramassés dans l'inventaire ;
|
||||
- **24 modèles sauvages** réellement chargés, quatre faces pour deux plans en croix,
|
||||
sans sprite manquant ; noms FR/EN vérifiés ;
|
||||
- fermeture et réouverture sur disque : **65 plantes conservées**, emplacement
|
||||
récolté toujours vide, aucun repeuplement au chargement.
|
||||
|
||||
Log : `build/foraging316-client-final.log`, réussite en **2 min 20 s**.
|
||||
Les captures restent ignorées dans `build/foraging316-screenshots/` ; le contrôle
|
||||
valide le chargement des modèles et les interactions, pas une visite esthétique
|
||||
exhaustive des huit expansions.
|
||||
|
||||
La planche est vérifiée dans le navigateur : **9 îles, 28 lignes de produits,
|
||||
aucune image manquante ni débordement horizontal** au format du panneau.
|
||||
Ses 111 alias de biomes et les 80 ressources ajoutées sont issus du catalogue.
|
||||
Les commandes reproductibles sont :
|
||||
|
||||
```sh
|
||||
python3 scripts/build_foraging_wiki.py
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=foraging316,agriculture300,vanilla301,sausage315,cheesewine314,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryForaging316ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=foraging316 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le module Test sert au lanceur de contrôle ; les classes de génération et les
|
||||
ressources agricoles sont dans le JAR Sanctuary de production. Aucun test
|
||||
OpenGL, déploiement, visite d'un monde personnel ou activation d'expansion sur
|
||||
le serveur existant n'est effectué. Le serveur et Prism restent en beta.315.
|
||||
Les durées/quantités ci-dessus décrivent le parcours local, pas une garantie
|
||||
uniforme du nombre de plantes de chaque île.
|
||||
|
||||
Assemblage final réussi en **5 min**, 161 tâches. JAR client/serveur et
|
||||
ressources générées identiques ; les **1108 PNG** restent strictement
|
||||
identiques à beta.315. [Reçu binaire et vérifications](foraging-beta316-verification.json).
|
||||
|
||||
SHA-256 du JAR beta.316 : `27ec0a8f492517131766a8c026cd0406189db3e78595a59ab605bbacd4303889`.
|
||||
@@ -0,0 +1,99 @@
|
||||
# Happy creepers — réintégration
|
||||
|
||||
Branche `codex/happy-creepers`, worktree isolé du chantier baleines.
|
||||
Version locale préparée : **beta.291**, sur le socle beta.289.
|
||||
|
||||
Cette fiche conserve le reçu de la branche dédiée. Son commit `0ffd371a` est
|
||||
repris dans la [livraison intégrée beta.293](release-beta293.md), avec les
|
||||
baleines, le logo packwiz et les quatre mods facultatifs. Consulter ce reçu
|
||||
pour l'état de publication et les vérifications de la combinaison finale.
|
||||
|
||||
## Contrat
|
||||
|
||||
Le happy creeper est un état du creeper Minecraft existant. **Maj + clic droit
|
||||
avec une fleur** équipe son unique emplacement cosmétique de tête ; **Maj +
|
||||
clic droit à main vide** rend cette même fleur. Le geste, les contrôles de
|
||||
distance/visibilité, la consommation en survie et la conservation des composants
|
||||
de l'objet sont ceux du système de chapeaux existant. Un emplacement occupé
|
||||
doit être vidé avant d'équiper une autre fleur.
|
||||
|
||||
Toute fleur du tag Minecraft `minecraft:flowers` rend le creeper heureux :
|
||||
visage souriant historique, fleur exacte visible sur la tête animée, aucun
|
||||
ciblage hostile ni explosion. L'équipement annule immédiatement une mèche
|
||||
déjà amorcée, y compris au briquet ; retirer la fleur ne reprend pas cette
|
||||
ancienne mèche. Tant que la fleur est portée, briquet et boule de feu ne
|
||||
l'allument pas et ne sont pas consommés ou usés. Le creeper continue d'utiliser
|
||||
ses déplacements natifs et peut toujours subir des dégâts.
|
||||
|
||||
Retirer la fleur ou la remplacer par un objet sans rapport rétablit le visage,
|
||||
le ciblage et l'explosion ordinaires. Un pot de fleurs, des feuilles ou des
|
||||
graines ne déclenchent pas cet état. La charge électrique est indépendante :
|
||||
un creeper chargé peut être heureux, et la foudre peut charger un happy
|
||||
creeper. Retirer sa fleur conserve sa charge.
|
||||
|
||||
## Sauvegarde et périmètre
|
||||
|
||||
L'état heureux se déduit uniquement de l'objet dans `sanctuary:mob_head`, dont
|
||||
le schéma 1 est réutilisé sans modification. Cette pile est déjà sauvegardée
|
||||
et synchronisée par les chapeaux de mobs. Aucun second drapeau, nouvelle
|
||||
entité, changement de format, migration de monde ou tirage de variante n'est
|
||||
ajouté. Un creeper portant déjà une fleur devient donc heureux avec cette
|
||||
version. L'identité, la santé, la charge et les autres données natives restent
|
||||
sur le même creeper. Le port d'un chapeau conserve sa protection habituelle
|
||||
contre la disparition à distance.
|
||||
|
||||
Les nouvelles apparences de creepers restent pour un prochain ticket. Le
|
||||
suivi du joueur, les apparitions naturelles de happy creepers et les anciennes
|
||||
entités `happy_creeper:*`/`mobopia:*` ne font pas partie de cet incrément.
|
||||
Aucune nouvelle interface n'est ajoutée ; les messages d'équipement et de
|
||||
retrait FR/EN existants sont réutilisés.
|
||||
|
||||
## Vérification
|
||||
|
||||
- Serveur `happycreeper,cosmetics,headblocks` : **28 tests requis réussis**,
|
||||
dont sept tests happy creeper et le test d'infrastructure Fabric. Annulation
|
||||
immédiate d'une vraie mèche à vingt ticks, refus répété du ciblage/allumage,
|
||||
représailles, tous les objets du tag fleurs, récupération de la pile nommée,
|
||||
allumage natif sans fleur et rechargement du même creeper chargé vérifiés.
|
||||
- Parcours client **Vulkan avec Sodium** : **réussi**. Vrais appuis sur Maj et
|
||||
clics souris pour équiper/récupérer une fleur en survie ; synchronisation de
|
||||
la pile et du visage ; AI active pendant 85 ticks près d'un vrai joueur ;
|
||||
sourire, fleur sur la tête animée et aura électrique native vérifiés.
|
||||
Monde plat de développement neuf, graine `290`, Minecraft 26.3 sur Apple M1.
|
||||
Capture : `build/happy-creepers-screenshots/four-states-vulkan.png` ; de gauche
|
||||
à droite : chargé, chargé heureux, heureux, ordinaire.
|
||||
- `check build assemblePack` : **réussi en 3 min 55 s**, contrôles purs et
|
||||
**28 tests serveur** inclus. Export MRpack réussi, versions et dépendances
|
||||
exactes contrôlées ; un seul JAR Sanctuary embarqué, identique au JAR
|
||||
construit ; texture historique identique octet par octet et classes de test
|
||||
absentes. Logs : `build/happy-creepers-final-check-build.log`,
|
||||
`build/happy-creepers-server.log`, `build/happy-creepers-vulkan.log`.
|
||||
Reçu : `build/happy-creepers-validation.json`.
|
||||
|
||||
Commandes reproductibles :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=happycreeper,cosmetics,headblocks \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryHappyCreeperClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryClientHeapGb=4 -PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le premier essai de `check build` associait par erreur le preset unifié et le
|
||||
profil rapide ; il a échoué au choix du générateur avant les tests. Le profil
|
||||
plat `sanctuaryAtlasOnly=true` évite ce conflit de configuration existant.
|
||||
Aucun monde personnel, serveur Beta, canal packwiz ou Prism n'est modifié.
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
- [Pack beta.291](../build/Sanctuary-beta.291.mrpack), 16 724 142 octets.
|
||||
SHA-256 : `3c2d630fc85e88b08bac94cc2244e975d3552fcac4d508ad366adea730062468`.
|
||||
- JAR : `mods/sanctuary/build/libs/sanctuary-beta.291.jar`.
|
||||
SHA-256 : `e8e315db1e4831400244d17429723099fbfe3a352387d8a9cf0ecb01d8170e9e`.
|
||||
|
||||
Cette branche part de beta.289 et ne contient pas le travail parallèle des
|
||||
baleines préparé en beta.290. L'intégration des deux branches précède toute
|
||||
éventuelle publication commune. Aucun tag ni artefact distant n'est créé.
|
||||
@@ -0,0 +1,87 @@
|
||||
# ZOMBIES-286 — Hunter et bond offensif
|
||||
|
||||
Branche `codex/hunter`, sur le socle local beta.285 conservé. État : implémenté,
|
||||
vérifié côté serveur et sous Vulkan ; pack local beta.286 construit et vérifié.
|
||||
|
||||
## Contrat demandé
|
||||
|
||||
Sixième infecté : un Hunter qui prépare son bond, saute réellement vers sa
|
||||
cible et la blesse seulement si son corps la touche. Le bond peut rater : sa
|
||||
direction reste fixée après le départ et les blocs utilisent leurs collisions
|
||||
natives. Aucun plaquage ni dégât répété automatique n'est ajouté.
|
||||
|
||||
- Zombie adulte vanilla 26.3, t-shirt bleu soutenu et pantalon anthracite
|
||||
recolorés par script ; tête, peau, chaussures, UV et alpha conservés.
|
||||
Identifiants `sanctuary:hunter` et `sanctuary:hunter_spawn_egg`.
|
||||
Aucun bébé, y compris via œuf, chargement ou familier ; pas de noyé.
|
||||
- Sauvage : 10 PV, vitesse 0,30, mêlée 3, poursuite 36 blocs. Préparation
|
||||
de 16 ticks au sol, bond à 3–10 blocs avec ligne de vue, impulsion verticale
|
||||
0,62 et vitesse horizontale adaptée à la distance, plafonnée à 1,25.
|
||||
Une seule frappe de 4 dégâts au contact, récupération de 24 ticks,
|
||||
recharge de 120 ticks engagée au décollage, même si le bond rate.
|
||||
- Gravité, trajectoire et collisions natives ; corridor complet chargé et
|
||||
bordure vérifiés. Mur, plafond, atterrissage ou durée bornée terminent le bond.
|
||||
Une téléportation n'est pas interprétée comme un balayage d'attaque. Aucun
|
||||
bloc détruit, chunk généré ou monde existant réécrit.
|
||||
- Familier rare : adulte miniature à taille variable persistante, 12 PV,
|
||||
vitesse 0,30. Attaque de contact automatique et G de bond offensif à 8 blocs,
|
||||
avec trajectoire physique et récupération. Les protections communes des
|
||||
familiers gardent autorité sur les dégâts, destinataires, claims et duels.
|
||||
Le familier ne bondit pas lorsqu'il est monté ou transporté.
|
||||
- Œuf créatif, spawn rare dans les habitats de zombies de l'Overworld : poids 4,
|
||||
un individu. Recharge conservée au chargement ; préparation et saut interrompus
|
||||
ne reprennent pas après rechargement. Aucun identifiant ou format existant changé.
|
||||
|
||||
## Vérification
|
||||
|
||||
- `:sanctuary:runGameTest -PsanctuaryFocusedTests=hunter286
|
||||
-PsanctuaryAtlasOnly=true` : **16 tests requis réussis**, dont le test
|
||||
d’infrastructure. Préparation accroupie, vraie élévation, contact unique,
|
||||
esquive, murs, plafond, atterrissage, recharge, sauvegarde interrompue,
|
||||
téléportation, corridor déchargé, G physique, protections communes et six
|
||||
tailles persistantes.
|
||||
- Régressions séparées : **77 tests** avec
|
||||
`ziplines242,boomer284,spitter283,charger282,infected280,familiar260,companions`,
|
||||
puis **19 tests** avec `smoker285`. Les joueurs simulés du Smoker imposent
|
||||
une session indépendante des tests d’IA asynchrones. Chaque total comprend
|
||||
son test d’infrastructure.
|
||||
- Deux arènes historiques corrigées sans changement de comportement : sol
|
||||
du Charger élargi pour garder l’esquive de quatre blocs sur la plateforme ;
|
||||
arènes du Smoker replacées dans les chunks suivis par GameTest pour que les
|
||||
recherches natives de projectiles voient immédiatement les joueurs.
|
||||
- `:sanctuary:runClientGameTest -PsanctuaryClientTests=true
|
||||
-PsanctuaryHunter286ClientTests=true -PsanctuaryQuickTests=true
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8
|
||||
-PsanctuaryClientNoVsync=true` : **réussi**, Vulkan / MoltenVK 1.4.2 /
|
||||
Apple M1. Monde de développement plat temporaire, graine `286` : appui G
|
||||
réel, familier en vol, contact et recharge ; bond sauvage sur le vrai joueur,
|
||||
dégâts, récupération et gravité ; esquive au clavier sans dégâts ; rendu
|
||||
adulte aux tailles 500/1000/1500 ; interface et infobulle FR/EN, GUI 2/3/4.
|
||||
Captures : `build/hunter286-screenshots/`.
|
||||
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=hunter286
|
||||
-PsanctuaryAtlasOnly=true` : **réussi en 2 min 46 s**, y compris les 16
|
||||
tests Hunter rejoués et tous les contrôles purs configurés par `check`.
|
||||
- Export `packwiz modrinth export` et intégrité ZIP vérifiés : un seul JAR
|
||||
Sanctuary, identique au JAR construit ; version `beta.286`, Minecraft `26.3`,
|
||||
Fabric Loader `0.19.5`. Classes de test exclues ; classes Hunter, œuf,
|
||||
profil, butin, tags et traductions FR/EN présents. Pixels du PNG conformes
|
||||
au script, cinq textures antérieures et MRpack beta.285 inchangés.
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
- [Pack beta.286](../build/Sanctuary-beta.286.mrpack), 16 682 455 octets.
|
||||
SHA-256 : `9363b9067bc9974cd5f850b671e0d97c1f0876eda6885a51e2acf32d6d3b1103`.
|
||||
- JAR `mods/sanctuary/build/libs/sanctuary-beta.286.jar`.
|
||||
SHA-256 : `02a62837d2385ec61cf76c915c2eb0e0cc5b339d5bd3ceab64a2f1086bc94abf`.
|
||||
- Reçu détaillé : `build/hunter286-validation.json`. Logs et captures ignorés
|
||||
sous `build/hunter286-*`. Les premiers essais échoués des arènes historiques
|
||||
sont conservés à côté des résultats finaux ; les réparations ci-dessus ne
|
||||
changent aucun comportement du Charger ou du Smoker.
|
||||
|
||||
## Limites
|
||||
|
||||
Le Hunter saute puis retombe : aucun plaquage ou maintien du joueur. La vitesse
|
||||
de lancement adapte la portée au sol ; un dénivelé, un obstacle ou le déplacement
|
||||
de la cible peut faire rater le contact. Seuls les chunks déjà chargés sont
|
||||
utilisés. Aucune validation graphique OpenGL, publication, synchronisation
|
||||
Prism, installation personnelle ou modification de sauvegarde existante.
|
||||
@@ -0,0 +1,76 @@
|
||||
# ZOMBIES-281 — Infectés adultes et familiers miniatures
|
||||
|
||||
Branche `codex/special-zombies`, suite au retour sur beta.280. État : livré et
|
||||
vérifié localement.
|
||||
|
||||
## Contrat
|
||||
|
||||
Les infectés n'ont **aucune forme bébé**. Leur modèle et leur texture sont
|
||||
toujours ceux de l'adulte. Cette règle appartient à `AbstractInfectedEntity`,
|
||||
le socle commun des variantes : les futurs Hunter, Charger, Spitter et Boomer
|
||||
devront aussi en hériter. Ces variantes restent à implémenter.
|
||||
|
||||
L'Infecté actuel refuse le flag bébé des groupes naturels, des appels natifs,
|
||||
des œufs et du chargement des données d'entité. Il ne reçoit pas le bonus de
|
||||
vitesse bébé. Les bébés zombies Minecraft gardent leurs règles habituelles.
|
||||
|
||||
En familier, l'adulte est réduit avec le système `FamiliarSize` existant.
|
||||
Son trait de taille enregistré dans l'œuf reste identique : petites, ordinaires,
|
||||
grandes et colossales restent possibles. Le rendu en jeu, les aperçus des menus,
|
||||
les dimensions de monture et les sons utilisent tous la même forme adulte.
|
||||
La taille ne dépend donc plus d'un âge bébé.
|
||||
|
||||
Les identifiants, la texture vanilla recolorée, les règles de combat et les
|
||||
formats restent ceux de beta.280. Une ancienne donnée d'Infecté portant
|
||||
`IsBaby=true` est interprétée comme adulte à la lecture, sans changement de
|
||||
son UUID ou de sa santé. Aucun monde personnel n'est ouvert ou réécrit.
|
||||
|
||||
## Vérifications
|
||||
|
||||
- Refus du bébé et de son bonus de vitesse, avec bébé zombie vanilla conservé.
|
||||
- Lecture d'un ancien flag bébé sans perdre l'identité ni la santé.
|
||||
- Familier adulte à six tailles, de 120 à 6 000 ‰, sans changer le trait ni
|
||||
l'identité ; cohérence entre hauteur visible et hauteur de monture.
|
||||
- Parcours Vulkan sur un monde plat neuf, graine `281` : trois tailles réelles
|
||||
de familier, inspection de la géométrie adulte et menus FR/EN GUI 2/3/4.
|
||||
- `./gradlew check build assemblePack` et vérification du MRpack beta.281.
|
||||
|
||||
La suite de régression conserve son entrée `infected280` et son option client
|
||||
`sanctuaryInfected280ClientTests`, actualisées selon ce nouveau contrat.
|
||||
|
||||
Les **34 GameTests serveur** ciblés passent, dont neuf pour l'Infecté. Les
|
||||
contrôles de réapparition et des 88 familiers vanilla passent aussi. Le parcours
|
||||
client **Vulkan / MoltenVK 1.4.2 / Apple M1** passe en **54 secondes**.
|
||||
Il vérifie le vrai rendu du familier, sa géométrie adulte et sa hauteur pour
|
||||
500, 1 000 et 1 500 ‰, ainsi que les noms, infobulles et menus FR/EN aux échelles
|
||||
2, 3 et 4. Dix captures sont conservées sous `build/infected281-screenshots/` ;
|
||||
les petites et grandes miniatures et le menu FR GUI 2 ont été inspectés.
|
||||
|
||||
Logs : `build/infected281-native.log`, `build/infected281-client-vulkan.log`
|
||||
(marqueur `INFECTED281_CLIENT_PASS`). La construction complète finale
|
||||
**`check build assemblePack` passe en 3 min 09 s**, avec les 34 tests serveur.
|
||||
Log : `build/infected281-check-build-pack.log`.
|
||||
|
||||
Le JAR et le MRpack beta.281 sont vérifiés : version exacte, intégrité ZIP,
|
||||
un seul JAR Sanctuary identique au build, socle adulte commun présent,
|
||||
texture corrigée conservée octet pour octet et fixtures de test exclues.
|
||||
Reçu : `build/infected281-validation.json`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=infected280,familiar260,companions \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryInfected280ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
## Livraison locale
|
||||
|
||||
- `mods/sanctuary/build/libs/sanctuary-beta.281.jar`
|
||||
- `build/Sanctuary-beta.281.mrpack`
|
||||
- `build/infected281-screenshots/0002_infected281-miniature-1000.png`
|
||||
|
||||
Aucun déploiement dans Prism ou un serveur personnel. Les artefacts beta.280
|
||||
sont conservés ; cette livraison utilise le numéro suivant.
|
||||
@@ -0,0 +1,135 @@
|
||||
# ZOMBIES-280 — Premier infecté
|
||||
|
||||
Le contrat bébé de cette livraison est remplacé par
|
||||
[beta.281 : adultes en miniature et taille variable](infected-adults-beta281.md).
|
||||
|
||||
Branche `codex/special-zombies`. Premier incrément demandé : l'Infecté simple,
|
||||
avant les Hunter, Charger, Spitter et Boomer. État : livré localement et vérifié.
|
||||
|
||||
## Contrat
|
||||
|
||||
- `sanctuary:infected` est un zombie vert au modèle vanilla, t-shirt rouge et
|
||||
pantalon brun sombre. Adulte et bébé utilisent les formes natives.
|
||||
- Attributs de base : 10 PV, vitesse 0,25 contre 0,23 pour le zombie ; mêlée
|
||||
native, dégâts de base 3, portée de poursuite 36 blocs. Il brûle au soleil
|
||||
et ne se transforme pas en noyé. Aucun pouvoir spécial dans ce premier lot.
|
||||
- Apparition au sol dans l'obscurité, selon les règles des monstres, uniquement
|
||||
dans les biomes de l'Overworld qui proposent déjà le zombie : poids 15,
|
||||
groupes de 1 à 3. Aucun spawner ni remplacement des zombies existants.
|
||||
- `sanctuary:infected_spawn_egg` apparaît dans l'onglet des œufs créatifs et
|
||||
invoque uniquement l'Infecté. Il peut être équipé comme familier bébé avec
|
||||
identité, suivi, ordres, santé et combat persistants du système existant.
|
||||
- Le familier a 10 PV, vitesse 0,30, morsure de mêlée et assaut court. Son
|
||||
profil FR/EN est distinct du zombie. Aucune nouvelle aptitude de travail.
|
||||
- Les autres infectés et le zombie des glaces restent à réaliser. Aucune
|
||||
nouvelle voie d'acquisition des œufs en survie n'est ajoutée dans ce lot.
|
||||
|
||||
## Référence et compatibilité
|
||||
|
||||
Référence en lecture seule : `../26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, `InfectedVariant.INFECTED` et
|
||||
`InfectedEntity`. Le nouveau type est indépendant des cinq variantes sous
|
||||
`itsalive:infected` de l'ancien mod ; aucune importation de leur sauvegarde.
|
||||
Les identifiants, profils et données des familiers existants sont conservés.
|
||||
L'ajout de tables de spawn affecte les apparitions futures, sans changer le
|
||||
terrain, les graines, les chunks ou un format de sauvegarde.
|
||||
|
||||
La texture est une recoloration déterministe du zombie natif **26.3**, par
|
||||
masques UV et sélection des seuls pixels cyan du t-shirt et violets du pantalon.
|
||||
Le visage, la peau verte, les chaussures et l'alpha sont conservés pixel pour
|
||||
pixel. L'œuf reprend l'icône rouge historique. La première texture générée par
|
||||
ImageGen décalait l'atlas ; elle a été écartée après le retour du créateur.
|
||||
|
||||
## Vérifications
|
||||
|
||||
Les **33 GameTests serveur** ciblés passent, dont huit nouveaux : attributs,
|
||||
mêlée réelle et bébé ; utilisation de l'œuf en survie et consommation ;
|
||||
sauvegarde/relecture native avec UUID, âge et santé ; tables de spawn ;
|
||||
immersion sans conversion en noyé ; équipement et rééquipement du familier ;
|
||||
morsure réelle du familier ; changement d'œuf pendant un objectif en cours.
|
||||
Les suites de pouvoirs existants et de réapparition
|
||||
beta.260 passent avec le nouvel œuf installé.
|
||||
Log final : `build/infected280-check-build-pack.log`.
|
||||
Le serveur plat natif 26.3 utilise le désert ; le contrôle positif des tables
|
||||
porte sur cet habitat réellement générable, avec exclusions Champignons,
|
||||
Nether et End. Il ne mesure pas la fréquence des rencontres en partie longue.
|
||||
|
||||
Le parcours client final **Vulkan / MoltenVK 1.4.2 / Apple M1** passe en 54 s :
|
||||
apparences adulte et bébé face au zombie classique, familier réellement équipé,
|
||||
renderer partagé avec les proxies, texture embarquée, rareté et infobulle
|
||||
native, noms et menus **FR/EN GUI 2/3/4**. Sept captures sont conservées dans
|
||||
`build/infected280-screenshots/`. Les vues comparatives, FR GUI 4 et EN GUI 2
|
||||
ont été inspectées après correction de la texture. La vue comparative finale
|
||||
confirme le visage et les bras vanilla, le t-shirt rouge et le pantalon brun
|
||||
sans décalage. Log : `build/infected280-client-vulkan.log`, marqueur
|
||||
`INFECTED280_CLIENT_PASS`. Aucun essai OpenGL.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=infected280,familiar260,companions \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryInfected280ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le mode plat explicite évite la fixture historique de génération, sans modifier
|
||||
le générateur de production. Tous les mondes utilisés sont jetables et ignorés.
|
||||
La construction complète finale **`check build assemblePack` passe en 2 min 59 s**,
|
||||
avec la texture corrigée et les 33 tests serveur. Les contrôles purs du dépôt
|
||||
passent également. Le MRpack est exporté et vérifié : intégrité ZIP,
|
||||
Minecraft 26.3, Fabric Loader 0.19.5, un seul JAR Sanctuary beta.280 identique
|
||||
au build et texture corrigée présente octet pour octet. Les fixtures de test
|
||||
sont exclues du JAR. Reçu : `build/infected280-validation.json`.
|
||||
|
||||
Le second parcours a également reproduit un plantage lors du remplacement
|
||||
d'un œuf : l'ancien objectif d'IA pouvait continuer un tick avant la création
|
||||
du nouvel individu. Le cerveau vérifie désormais que le familier est actif
|
||||
et que son œuf correspond encore à celui équipé avant d'agir. Un huitième
|
||||
GameTest couvre cet intervalle ; le parcours client final inclut le correctif.
|
||||
|
||||
## Essai local
|
||||
|
||||
Dans un monde de développement avec commandes autorisées :
|
||||
|
||||
```mcfunction
|
||||
/give @s sanctuary:infected_spawn_egg
|
||||
/summon sanctuary:infected
|
||||
```
|
||||
|
||||
L'œuf placé dans l'emplacement Familier invoque sa forme bébé. Les commandes
|
||||
Alt bref / Alt maintenu et la technique G restent celles des autres familiers.
|
||||
L'œuf est fourni en créatif ; aucune nouvelle acquisition en survie n'est
|
||||
annoncée. Aucun canal packwiz, serveur personnel ou instance Prism modifié.
|
||||
|
||||
## Ressources graphiques
|
||||
|
||||
- Texture livrée : `mods/sanctuary/src/main/resources/assets/sanctuary/textures/entity/infected.png`.
|
||||
- Œuf historique : `mods/sanctuary/src/main/resources/assets/sanctuary/textures/item/infected_spawn_egg.png`.
|
||||
- Outil de texture : `scripts/generate_infected_texture.py`, Python standard et
|
||||
ImageMagick 7 pour lire/écrire le PNG. **Aucun dessin génératif ni changement
|
||||
de géométrie.** 331 pixels de t-shirt et 239 pixels de pantalon recolorés,
|
||||
nuances natives conservées ; visage et transparence vérifiés avant encodage,
|
||||
puis tous les pixels vérifiés après écriture.
|
||||
- SHA-256 du PNG source :
|
||||
`1b88eea9b63889c2c3399773f887af375defc3aad0e7a375adc84249da54cbbd`.
|
||||
- SHA-256 de la texture livrée :
|
||||
`398898aed83ec22ef525b60da120fc3e0b971b33ad3640c73104b952ad060e29`.
|
||||
|
||||
Reproduction sans modifier le JAR source :
|
||||
|
||||
```sh
|
||||
python3 scripts/generate_infected_texture.py /chemin/vers/minecraft-26.3-client.jar
|
||||
```
|
||||
|
||||
Voir aussi la provenance dans `THIRD_PARTY_NOTICES.md`.
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
- Mod : `mods/sanctuary/build/libs/sanctuary-beta.280.jar`.
|
||||
- Pack : `build/Sanctuary-beta.280.mrpack`.
|
||||
- Captures corrigées : `build/infected280-screenshots/`.
|
||||
|
||||
La livraison est locale. La publication et la mise à jour de l'instance Prism
|
||||
restent distinctes de ce travail de développement.
|
||||
@@ -0,0 +1,116 @@
|
||||
# MENU-271 — Habitant en deux colonnes et deux rangées
|
||||
|
||||
Demande du 24 octobre 2026, continuation de `codex/inhabitant-property`.
|
||||
Version locale `beta.271`, après le premier lot de propriété beta.270.
|
||||
|
||||
## Résultat demandé
|
||||
|
||||
- Pause retrouve **Combats / Battles** dans **Communauté**, sous Habitant.
|
||||
Story et Factions ne figurent pas dans ce menu.
|
||||
- Habitant présente une barre horizontale **Propriété — Factions — Familier**
|
||||
en haut, sur les mêmes boutons natifs que les catégories de Découvertes.
|
||||
- Le personnage et son nom occupent la cellule supérieure gauche, avec
|
||||
des marges autour de la silhouette. La biographie est en haut à droite.
|
||||
- Sous la biographie, un tableau de bord présente le temps joué, les blocs
|
||||
posés, les blocs cassés, les créatures tuées, les morts et les progrès obtenus.
|
||||
Son bouton Statistiques ouvre la page générale complète existante.
|
||||
- Sous le personnage, l’activité occupe tout le panneau inférieur gauche,
|
||||
jusqu’en bas du contenu. La liste affiche les dernières activités disponibles
|
||||
dans son propre défilement, et **Historique reste dans son pied de panneau**.
|
||||
Il ouvre les 24 dernières activités disponibles ; l’ancien journal des cycles
|
||||
et achats reste accessible dans cette page.
|
||||
- Aucun aperçu, nom ou réglage du familier ne figure dans Habitant. Son bouton
|
||||
ouvre la page dédiée avec l'aide alliée, le carnet, les choix en attente et
|
||||
les contrôles opérateur admissibles, en plus des commandes déjà présentes.
|
||||
- Propriété, Factions, Familier, Statistiques et Historique reviennent à
|
||||
Habitant ; Combats revient à Pause. Le pied de page natif est conservé.
|
||||
|
||||
Les textes FR/EN, nombres compacts et infobulles gardent les valeurs et titres
|
||||
complets accessibles dans les petits formats. Biographie, statistiques et
|
||||
activité défilent indépendamment, et conservent leur position à la mise à jour
|
||||
des données. Les hauteurs s’adaptent aux échelles GUI 2, 3 et 4 ; la silhouette
|
||||
garde de l’air autour d’elle dans la cellule supérieure gauche.
|
||||
|
||||
## Sources et contrat de données
|
||||
|
||||
L'aperçu est une **lecture personnelle côté serveur**, via l'acteur authentifié
|
||||
du protocole communautaire existant. Aucun UUID du joueur à consulter n'est
|
||||
accepté depuis le client. Les opérations de fichier ou JDBC restent dans le
|
||||
worker communautaire ; les données Minecraft sont copiées sur le thread serveur.
|
||||
|
||||
- Temps, minage, morts et créatures tuées : compteurs Minecraft existants.
|
||||
Le temps est celui des ticks de jeu Minecraft. Le minage suit les règles de
|
||||
comptage vanilla ; les destructions en Créatif ne sont pas inventées.
|
||||
- Pose : sommes des poses confirmées du Blocodex, y compris les identifiants
|
||||
sauvegardés d'un mod absent. Les usages d'objets ne sont pas assimilés à des
|
||||
poses. Une source endommagée est signalée indisponible, jamais remise à zéro.
|
||||
- Progrès : accomplissements natifs ayant un affichage public ; les recettes
|
||||
et critères incomplets ne sont pas présentés comme des achievements.
|
||||
La date est le moment où toutes les exigences deviennent satisfaites :
|
||||
un critère optionnel obtenu plus tard ne déplace pas cette date.
|
||||
- Activité : publications, annonces, réponses et bulletins personnels visibles,
|
||||
progrès achevés et achats/cycles/factions déjà datés dans les sauvegardes.
|
||||
Le contenu intégral des publications et leurs photos ne sont pas transmis.
|
||||
Les publications modérées et les réponses à un parent masqué sont exclues.
|
||||
- Tri décroissant par date avec identifiants stables pour les égalités,
|
||||
dédoublonnage et limite de 24. Les anciennes données sont lisibles sans
|
||||
journal supplémentaire. Une panne communautaire conserve l'aperçu natif
|
||||
et signale que les publications manquent temporairement.
|
||||
|
||||
Ce panneau n'enregistre pas le texte du chat, des messages privés ou toutes
|
||||
les actions du monde. Il réunit les événements déjà persistants et datés ci-dessus.
|
||||
Aucun format de sauvegarde, coût, droit, règle de jeu ou monde personnel ne
|
||||
change. Aucun familier n'est retiré de l'inventaire ni rappelé en ouvrant Habitant.
|
||||
Les artefacts beta.270 déjà exportés sont conservés.
|
||||
|
||||
## Vérifications
|
||||
|
||||
`check build assemblePack` réussit en **2 min 37 s**, avec **15 GameTests
|
||||
serveur ciblés**. Le parcours Vulkan FR/EN aux échelles GUI 2, 3 et 4 réussit
|
||||
en **45 s** et utilise un nouveau monde
|
||||
plat de graine 271. Il vérifie la barre supérieure, les deux colonnes et deux
|
||||
rangées, les marges du personnage, le panneau d’activité jusqu’en bas et son
|
||||
bouton Historique, la biographie et les statistiques à droite, les défilements
|
||||
et la conservation de leur position après rafraîchissement.
|
||||
|
||||
Des compteurs serveur connus (une heure de ticks ajoutée, deux poses et
|
||||
25 blocs minés), un progrès natif et une annonce réellement publiée dans le
|
||||
monde de développement sont relus par le réseau. Le parcours conserve aussi
|
||||
les retours Propriété/Factions/Familier/Historique, la modification du consentement
|
||||
à l’aide alliée et l’achat d’une extension de propriété.
|
||||
|
||||
Les tests serveur ciblés couvrent les données personnelles, les dates des
|
||||
critères OR, les statistiques sans double comptage, les publications masquées,
|
||||
les sources persistantes lues sans modification, les pannes communautaires et
|
||||
le dédoublonnage. Le test de fichier communautaire couvre l’isolation des auteurs,
|
||||
les réponses sous un parent masqué, l’ordre et la limite de 24.
|
||||
La requête MariaDB reste paramétrée et bornée ; aucun serveur SQL réel n’a été
|
||||
exercé pour cette livraison.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=overview271,property270,progression,menus \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryInhabitant271ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Une exécution exploratoire de la suite supplémentaire `companions` a échoué
|
||||
sur `creatureProfilesActuallyMove` : « Native navigation produces an actual
|
||||
airborne displacement ». Les règles de déplacement ne sont pas modifiées ici ;
|
||||
ce comportement n’est pas validé ni corrigé par ce lot d’interface. Le contrôle
|
||||
Vulkan du bouton Familier et de son consentement est distinct de cet essai.
|
||||
Résumé conservé dans `build/inhabitant271-exploratory-navigation.txt`.
|
||||
|
||||
Journaux locaux ignorés : `build/inhabitant271-client-vulkan.log` et
|
||||
`build/inhabitant271-check-build-pack.log`. Les **32 captures** sont conservées
|
||||
dans `build/inhabitant271-screenshots/`. Les fiches Habitant FR/EN, les formats
|
||||
GUI 2/4 et la page d’activité ont été inspectés.
|
||||
|
||||
Export local vérifié : [Sanctuary-beta.271.mrpack](../build/Sanctuary-beta.271.mrpack),
|
||||
16 483 048 octets. Intégrité ZIP, versions Minecraft/Fabric, dépendances et JAR
|
||||
Sanctuary/JEI comparés aux builds. Le MRpack beta.270 reste identique par SHA-256.
|
||||
Reçu de validation : `build/inhabitant271-validation.json`.
|
||||
Aucune publication de canal ni synchronisation d’instance personnelle.
|
||||
@@ -0,0 +1,108 @@
|
||||
# INSECT-08 — Activité saisonnière, soleil et météo, beta.295
|
||||
|
||||
## Intégration beta.320
|
||||
|
||||
Cette note conserve le contexte et les preuves du chantier local beta.295.
|
||||
Son code est repris sans les modifications de propriétés du checkout dans
|
||||
le [regroupement beta.320](integration-beta320.md), qui possède sa propre validation.
|
||||
|
||||
|
||||
Demande du créateur du 30 octobre 2026. Branche
|
||||
`codex/insect-seasonal-activity`. Les modifications locales de la commande
|
||||
de propriété beta.294 sont conservées, sans modification de leurs sources.
|
||||
|
||||
## Comportement
|
||||
|
||||
Le calendrier des 47 espèces conserve ses mois, créneaux et pics pondérés,
|
||||
avec le fuseau du serveur et le décalage de six mois dans l’hémisphère sud.
|
||||
Une journée ensoleillée ne peut donc pas faire apparaître une espèce hors
|
||||
saison. Les saisons ne sont pas remplacées par le biome.
|
||||
|
||||
L’activité utilise également la position réelle du soleil dans l’horloge
|
||||
native de l’Overworld : lever inclus, coucher exclu. Elle suit les journées
|
||||
saisonnières lorsque le temps réel est actif, et le soleil du jeu en mode
|
||||
vanilla. Une baisse de luminosité due à un orage n’est pas un coucher de soleil.
|
||||
|
||||
| Groupe | Activité |
|
||||
| --- | --- |
|
||||
| Papillons de jour, libellules, criquets/sauterelles, mantes, coccinelles, gerris et cigales diurnes | Jour uniquement ; 20 % des tentatives sous la pluie ; aucune sous la neige |
|
||||
| Papillon de nuit et grand paon de nuit | Nuit uniquement ; 20 % des tentatives sous la pluie ; aucune sous la neige |
|
||||
| Grillon et grillon des prés | 100 % la nuit, 25 % le jour dans leur créneau existant ; pluie : facteur 1/5 ; aucune sous la neige |
|
||||
| Moustique et scarabées/lucanes nocturnes | 100 % la nuit, 25 % le jour dans leur créneau existant |
|
||||
| Autres insectes volants | Pluie : facteur 1/2 ; aucune sous la neige |
|
||||
| Cigale du soir | Ses créneaux d’aube/crépuscule sont conservés ; pluie : facteur 1/5 ; aucune sous la neige |
|
||||
| Escargot, cloporte et autres espèces | Habitats et restrictions existants conservés, dont la pluie effective pour l’escargot |
|
||||
|
||||
Les pourcentages sont des chances d’accepter une tentative déjà sélectionnée
|
||||
par le calendrier et son pic. Ils ne sont pas renormalisés entre espèces :
|
||||
la pluie réduit aussi les apparitions lorsqu’un grillon est le seul candidat.
|
||||
La météo est celle du niveau et de la précipitation du biome au point réel ;
|
||||
un biome sans précipitation n’est pas traité comme mouillé. La neige native
|
||||
et le profil neige saisonnier Sanctuary sont reconnus.
|
||||
|
||||
Les spécimens présents revérifient leur activité toutes les secondes. Un
|
||||
passage à une activité nulle les retire. Une baisse conserve une fraction
|
||||
proportionnelle de la population ; cette sélection a lieu à la transition,
|
||||
sans répéter la réduction chaque seconde de pluie. Le retour au sec restaure
|
||||
les chances des nouvelles tentatives. Les entités restent transitoires,
|
||||
avec la durée maximale existante de deux minutes.
|
||||
|
||||
## Lumières extérieures
|
||||
|
||||
Le papillon de nuit cherche les blocs lumineux dans les quatre blocs autour
|
||||
de la colonne échantillonnée, de deux blocs en dessous à six au-dessus.
|
||||
Cela permet de trouver les lanternes ordinaires et des âmes, y compris
|
||||
suspendues sous une clôture. Il se place à côté de la lumière et vole dans
|
||||
un petit rayon de 0,3 bloc, sans traverser le luminaire.
|
||||
|
||||
Le grand paon de nuit garde son habitat de tronc. Les blocs lumineux
|
||||
immergés et les faces occupées sont refusés. Les règles existantes de toit
|
||||
restent appliquées à la position du papillon : pas d’insectes introduits
|
||||
dans une maison, y compris sous verre. Les plafonds de population et les
|
||||
18 tentatives / deux ajouts au maximum toutes les cinq secondes restent
|
||||
inchangés. La recherche ne consulte que les chunks déjà chargés.
|
||||
|
||||
Les spécimens explicitement mis en inspection par le laboratoire gardent
|
||||
leur exception. Aucun bloc, monde, identifiant, texture, son, dépendance,
|
||||
interface ou format de sauvegarde n’est modifié.
|
||||
|
||||
## Vérification
|
||||
|
||||
Vérification réussie le 30 octobre 2026 sur Minecraft 26.3, Fabric Loader
|
||||
0.19.5, Fabric API 0.160.5+26.3 et Java 25 :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=insects245 -PsanctuaryAtlasOnly=true
|
||||
```
|
||||
|
||||
- `check build assemblePack` réussit en **4 min 9 s**, avec **25 GameTests
|
||||
requis réussis**, les contrôles communs de `check` et les deux profils
|
||||
packwiz client/serveur vérifiés.
|
||||
- Les nouveaux scénarios vérifient les limites exactes lever/coucher,
|
||||
l’apparition naturelle sur une fleur en été, son refus en hiver et sous
|
||||
un soleil nocturne, et le retrait du papillon au coucher du soleil.
|
||||
- Deux cents tentatives sèches puis deux cents sous une pluie réelle
|
||||
contrôlent la réduction absolue des grillons ; les survivants ne sont
|
||||
pas retirés répétitivement. Les scènes fixent explicitement leurs biomes :
|
||||
pluie en plaine, absence de pluie dans le désert, neige en plaine enneigée.
|
||||
- Les deux lanternes suspendues attirent un papillon naturel la nuit.
|
||||
Quatre-vingts ticks vérifient son mouvement borné à côté du luminaire ;
|
||||
retirer la source le fait disparaître. Refus le jour et sous un toit de
|
||||
verre, contrôle de chunk éloigné non chargé et anciennes régressions
|
||||
de supports, plafonds, déplacements et captures réussis.
|
||||
- [JAR local](../mods/sanctuary/build/libs/sanctuary-beta.295.jar) et
|
||||
[export MRpack](../build/Sanctuary-beta.295.mrpack) vérifiés : intégrité
|
||||
ZIP, version, dépendances exactes et JAR embarqué identique. Le catalogue
|
||||
embarqué est identique au fichier source inchangé.
|
||||
- Les quatre fichiers Java préexistants de propriété et leur ticket
|
||||
beta.294 conservent leur empreinte initiale. Journal :
|
||||
`build/insects295/check-build-pack-final.log` ;
|
||||
[reçu et empreintes](../build/insects295/validation.json).
|
||||
|
||||
La validation porte sur les règles et déplacements côté serveur ; aucun
|
||||
nouvel essai graphique n’est revendiqué pour cette passe.
|
||||
|
||||
Préparation locale uniquement. Pas de publication, modification de serveur
|
||||
Beta ni synchronisation de l’instance Prism personnelle. L’appréciation de
|
||||
la densité sur une île complète reste un retour de jeu à recueillir.
|
||||
@@ -0,0 +1,60 @@
|
||||
{
|
||||
"version": "beta.320",
|
||||
"date": "2026-10-30",
|
||||
"branch": "codex/itsalive-26-3",
|
||||
"base": "163618ed",
|
||||
"scope": [
|
||||
"direct_cuisine",
|
||||
"minecraft_cauldron",
|
||||
"dairy_churn",
|
||||
"natural_seeds",
|
||||
"player_height_maps",
|
||||
"seasonal_insect_activity"
|
||||
],
|
||||
"server_tests": 241,
|
||||
"check_build_assemblePack_assembleServerPack": "passed",
|
||||
"client_graphics": {
|
||||
"backend": "Vulkan",
|
||||
"sodium": true,
|
||||
"device": "Apple M1",
|
||||
"combined_run": "passed",
|
||||
"production_classes_identical": 2770,
|
||||
"paths": [
|
||||
"dairy",
|
||||
"direct_cuisine_legacy_creative_jei",
|
||||
"exact_height_maps_island_under_type_fixture"
|
||||
],
|
||||
"local_screenshots": 36
|
||||
},
|
||||
"provenance": {
|
||||
"map_commit": "f99b83a4",
|
||||
"map_base": "c15b4ba2",
|
||||
"insect_branch": "codex/insect-seasonal-activity",
|
||||
"insect_base": "74dc1265",
|
||||
"other_worktrees_modified": false
|
||||
},
|
||||
"compatibility": {
|
||||
"retained_preparations": 46,
|
||||
"retained_compatibility_recipe_ids": 141,
|
||||
"existing_worlds_opened": false,
|
||||
"existing_chunks_modified": false,
|
||||
"under_prototype_activated": false,
|
||||
"test_fixtures_in_distribution": false
|
||||
},
|
||||
"deployment": "none",
|
||||
"latest_public_release": "beta.318",
|
||||
"artifacts": {
|
||||
"mods/sanctuary/build/libs/sanctuary-beta.320.jar": {
|
||||
"bytes": 19160731,
|
||||
"sha256": "09459661e40f610d61dfcb463cdba3b73e0962328eebe72c11e78b8ce6eee453"
|
||||
},
|
||||
"build/Sanctuary-Server-beta.320.zip": {
|
||||
"bytes": 4036721,
|
||||
"sha256": "c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43"
|
||||
}
|
||||
},
|
||||
"logs": [
|
||||
"build/integration320/check-build-pack.log",
|
||||
"build/integration320/all-vulkan.log"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
# beta.320 — Cuisine, carte et activité saisonnière
|
||||
|
||||
**Livraison effectuée :** [serveur et site en beta.320](release-beta320.md).
|
||||
Le reste de cette note conserve le cadrage et les vérifications de préparation.
|
||||
|
||||
|
||||
Regroupement demandé le 30 octobre 2026 sur `codex/itsalive-26-3`, à partir
|
||||
de la livraison publique beta.318 (`163618ed` pour son reçu).
|
||||
Cette préparation réunit le travail culinaire initialement prévu en beta.319
|
||||
et les deux correctifs développés séparément. La cible autorisée est le
|
||||
**push des sources Git** ; aucun tag de release, canal packwiz, site, serveur
|
||||
ou instance Prism n’est mis à jour par ce lot.
|
||||
|
||||
## Contenu
|
||||
|
||||
- [Cuisine directe et chaudron Minecraft](cuisine-beta319.md) : retrait des
|
||||
46 préparations artificielles des fabrications, du créatif et de JEI,
|
||||
récupération des anciens stocks, et semences naturelles dans les herbes.
|
||||
- [Baratte et laitages](wiki/alimentation/laitages.md) : cinq minutes de repos
|
||||
du lait, puis beurre, crème fouettée et beurre aux herbes travaillés à la
|
||||
main. Fromage au tonneau ; intégration des produits dans la cuisine existante.
|
||||
- [Carte à la hauteur exacte du joueur](map-player-height-beta319.md) : Atlas
|
||||
et aperçu Pause suivent le Y des pieds, sans arrondi aux six anciens
|
||||
plafonds. Grottes et altitudes négatives, zoom et centre conservés,
|
||||
anciennes données de surface conservées et nouvelles coupes séparées.
|
||||
- [Activité saisonnière des insectes](insect-activity-beta295.md) : calendrier
|
||||
des 47 espèces conservé ; activité adaptée au soleil, à la pluie et à la
|
||||
neige. Sous la pluie, les grillons ont 80 % de chances d’apparition en moins.
|
||||
Papillons diurnes le jour et papillons de nuit près des lanternes extérieures,
|
||||
y compris suspendues. Habitats et plafonds de population conservés.
|
||||
|
||||
## Provenance et portée de l’intégration
|
||||
|
||||
Le correctif de carte est repris du commit `f99b83a4` de
|
||||
`codex/map-player-height`, qui reposait sur le prototype Under `c15b4ba2`.
|
||||
Seuls les changements de cartographie sont repris, avec le prédicat existant
|
||||
`UnderVisibility` reconnaissant les types Under v3 à v10. **Aucun portail,
|
||||
générateur, préréglage ou dimension du prototype n’est ajouté au pack normal.**
|
||||
Les mêmes règles de carte pourront fonctionner dans ces dimensions lorsqu’elles
|
||||
seront présentes. Leur absence n’active aucun nouvel accès.
|
||||
|
||||
La validation de séparation des dimensions utilise un monde plat dédié,
|
||||
avec le vrai type de dimension `sanctuary_test:under_v10`, mais un terrain
|
||||
de contrôle or/lapis et un toit en bedrock. Le type et le préréglage de cette
|
||||
scène sont dans les seules ressources de GameTest, exclues du JAR distribué.
|
||||
Elle vérifie le changement réel de dimension, la carte, Pause et le retour,
|
||||
sans importer le prototype Under complet.
|
||||
|
||||
L’activité saisonnière provient des changements non commités du checkout
|
||||
`codex/insect-seasonal-activity`, base `74dc1265` : `InsectActivity`,
|
||||
`InsectEntity`, `InsectSpawner` et leurs tests. La copie est ciblée ; ses
|
||||
changements de propriétés et de duels, son compteur et ses autres fichiers
|
||||
locaux ne sont pas intégrés ni modifiés.
|
||||
|
||||
Les notes beta.295 et MAP-319 conservent leurs **preuves historiques isolées**.
|
||||
Elles ne constituent pas une validation du binaire beta.320. Le reçu de cette
|
||||
intégration est produit après ses propres tests et son assemblage.
|
||||
|
||||
## Données existantes
|
||||
|
||||
Aucun monde personnel n’est ouvert ou modifié. Aucun chunk n’est régénéré,
|
||||
aucun ancien relevé n’est converti. L’Overworld garde ses chemins de cartes ;
|
||||
les coupes exactes et les relevés Under emploient les chemins additifs décrits
|
||||
dans MAP-319. Client et serveur devront recevoir ensemble la future livraison
|
||||
du protocole acceptant les altitudes intermédiaires.
|
||||
|
||||
Les entités d’insectes sont ambiantes et non sauvegardées ; les spécimens
|
||||
capturés restent des objets persistants. Aucun calendrier, catalogue d’espèces
|
||||
ou format de sauvegarde des captures n’est modifié.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack assembleServerPack` réussit en **2 min 53 s**, avec
|
||||
**241 tests serveur requis réussis**, les contrôles communs de `check` et les
|
||||
profils packwiz client/serveur vérifiés.
|
||||
|
||||
Le parcours client regroupé réussit en **1 min 29 s**, sous **Vulkan avec
|
||||
Sodium sur Apple M1** : baratte et quatre transformations par vraies interactions,
|
||||
cuisine directe et anciens stocks, créatif et JEI, Atlas/Pause à hauteur exacte,
|
||||
altitudes négatives, données persistées et séparation Island/Under de contrôle.
|
||||
Les textes FR/EN passent aux échelles 2/3/4. Les **36 captures** sont conservées
|
||||
localement dans `build/integration320/screenshots/` ; vues de baratte, de recette,
|
||||
de carte et de Pause inspectées.
|
||||
|
||||
Le JAR contient exactement les **2 770 classes de production** employées par
|
||||
ce parcours Vulkan. Son intégrité ZIP, sa version et l’exclusion des classes
|
||||
et dimensions de test sont vérifiées. Le kit serveur est aussi vérifié ; aucun
|
||||
artefact n’est téléversé. [Reçu et empreintes](integration-beta320-verification.json).
|
||||
|
||||
La densité des insectes sur une île complète reste à apprécier pendant les
|
||||
prochains essais de jeu. La validation Under porte sur le type et les
|
||||
transitions de dimensions de la scène contrôlée, sans livraison du prototype.
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"version": "beta.324",
|
||||
"server_tests": 221,
|
||||
"full_check_build_pack_server_pack": true,
|
||||
"focused_tests": "chickens323,eggaudit,poultry,aptitudes236,forgerie238,progression,movement,sorting,recipes,foodknowledge,companions,familiar,starter,refonte,drying322,drying313,drying317,driedcuisine318,sausage315,mill306,kitchen304,cuisine319,map321,map319,map244,map,menus",
|
||||
"atlas_only": true,
|
||||
"heap_caps": {
|
||||
"pure_checks": "512m",
|
||||
"game_tests": "2g"
|
||||
},
|
||||
"checks_skipped_by_memory_script": [],
|
||||
"client": {
|
||||
"backend": "Vulkan",
|
||||
"gpu": "Apple M1",
|
||||
"sodium": true,
|
||||
"heap": "2g",
|
||||
"seconds": 74,
|
||||
"combined_path_passed": true,
|
||||
"parts": [
|
||||
"GemChicken323ClientChecks",
|
||||
"Aptitudes236ClientChecks",
|
||||
"JeiSearch297ClientChecks",
|
||||
"Drying317ClientChecks"
|
||||
],
|
||||
"locales": [
|
||||
"fr_fr",
|
||||
"en_us"
|
||||
],
|
||||
"gui_scales": [
|
||||
2,
|
||||
3,
|
||||
4
|
||||
]
|
||||
},
|
||||
"sources": {
|
||||
"chickens": {
|
||||
"root": "/Users/koka/Documents/sanctuary/sanctuary-beta",
|
||||
"head": "74dc1265a8247a44410ed466ca04b371b25284c1"
|
||||
},
|
||||
"aptitudes": {
|
||||
"commit": "0cbb38691001593f32093f9defee18c8f8a35dda"
|
||||
},
|
||||
"jei": {
|
||||
"root": "/Users/koka/.codex/worktrees/jei-search/sanctuary-beta",
|
||||
"head": "74dc1265a8247a44410ed466ca04b371b25284c1"
|
||||
}
|
||||
},
|
||||
"original_imported_files_unchanged": true,
|
||||
"code_jar_sha256": "2fcfc84579660b494602fb35cb36cb1b6ba6d8964f664dbefde2abee7e1b1a72",
|
||||
"embedded_jei": "30.32.0-sanctuary.5",
|
||||
"embedded_media": "0.3.2",
|
||||
"evidence": "build/integration324/",
|
||||
"personal_world_opened": false
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
# Beta.324 — poules rares, aptitudes, recherche JEI et séchoir
|
||||
|
||||
Branche de regroupement : `codex/itsalive-26-3`. Demande du 31 octobre 2026 :
|
||||
intégrer les trois chantiers, mettre Git à jour et publier Sanctuary.
|
||||
La livraison comprend les sources Git et le pack publié sur le site et le serveur Beta.
|
||||
|
||||
## Sources reprises
|
||||
|
||||
- Séchoir beta.322 : commit `7ca566292fb4f3b8ad5a718285181834de917f32`.
|
||||
Deux objets, affichage agrandi et redressé, fabrication sans fil et moulin
|
||||
sans tailleur de pierre. Les anciennes positions excédentaires restent en
|
||||
attente avec leur progression. [Contrat](drying-rack-beta322.md).
|
||||
- Poules rares : changements locaux du chantier `codex/rare-chickens`, depuis
|
||||
`74dc1265`, repris fichier par fichier, avec sept PNG historiques intacts.
|
||||
Les autres changements locaux de ce dossier ne sont pas importés.
|
||||
[Contrat et provenance](rare-chickens-beta323.md).
|
||||
- Aptitudes : patch du commit `0cbb38691001593f32093f9defee18c8f8a35dda`,
|
||||
repris par fusion à trois sources en conservant la cuisine récente.
|
||||
[Prix et transition](aptitude-prices-beta297.md).
|
||||
- Recherche JEI : patch local de `codex/jei-search-input`, au-dessus de
|
||||
`74dc1265`. Le fork embarqué devient `30.32.0-sanctuary.5`.
|
||||
[Correctif de saisie](jei-search-beta297.md).
|
||||
|
||||
Les numéros beta.297 et beta.323 des notes sources désignent leurs préparations
|
||||
isolées. La livraison commune est beta.324 ; aucune ancienne release n’est
|
||||
remplacée. Les dossiers sources restent conservés en place.
|
||||
|
||||
## Contrats de conservation avant livraison
|
||||
|
||||
Les poules rares et l’œuf en or ajoutent des identifiants sans modifier les
|
||||
chunks ou la génération : une poule ordinaire a une chance sur 256 de pondre
|
||||
un œuf en or. Celui-ci donne un poussin rare, selon les poids 8:4:2:1 pour
|
||||
émeraude, rubis, saphir et or. Les variantes rares ne se reproduisent pas.
|
||||
Leurs produits et délais chargés sont ceux du contrat source.
|
||||
|
||||
Les reçus d’aptitudes déjà achetées restent valides, sans supplément ni rachat.
|
||||
Les nouvelles dépenses utilisent les tarifs du chantier Aptitudes. La
|
||||
transition de configuration est explicitement reprise : `progression.json`
|
||||
5 → 6, `companion-powers.json` 1 → 2 ; seuls les anciens tarifs par défaut
|
||||
égaux à 4 deviennent les nouveaux tarifs. Les autres valeurs personnalisées
|
||||
et les autres paramètres restent conservés. Une sauvegarde complète du
|
||||
serveur et des configurations précède leur chargement par le nouveau binaire.
|
||||
Après démarrage, seules ces transitions documentées de configuration sont
|
||||
admises. Un retour à beta.321 exige la sauvegarde compatible, pas un lancement
|
||||
de l’ancien code sur les nouveaux schémas.
|
||||
|
||||
JEI garde les favoris, les connaissances et l’événement de texte natif ;
|
||||
seule la décision de conserver le focus utilise le code logique SDL.
|
||||
Les fixtures culinaires paient désormais le prix courant du Catalogue ;
|
||||
les tests de reçus historiques restent distincts.
|
||||
|
||||
Le site conserve son bouton de téléchargement direct. Publication du nouveau
|
||||
pack par les outils versionnés ; aucun remplacement global du code Web,
|
||||
changement de comptes, permissions, Alpha, réseau ou génération n’est prévu.
|
||||
|
||||
## Validation
|
||||
|
||||
- `check build assemblePack assembleServerPack` réussi en **2 min 58 s**,
|
||||
**221 GameTests serveur requis réussis**, avec les contrôles purs du dépôt.
|
||||
Le script de développement limite les tests purs à 512 Mio et le serveur
|
||||
de test à 2 Gio ; aucun contrôle n’est exclu par ce script.
|
||||
- Premier passage : un ancien test de carte donnait huit niveaux au joueur
|
||||
pour un achat désormais à douze. La fixture utilise maintenant le tarif
|
||||
configuré ; les assertions de paiement exact et de refus du rachat restent.
|
||||
- Parcours commun **Vulkan / Apple M1 avec Sodium**, réussi en **1 min 14 s** :
|
||||
quatre variantes et huit modèles adulte/poussin, couleurs et noms FR/EN ;
|
||||
treize aptitudes, Catalogue refusé à 29 puis payé à 30 avec XP synchronisée
|
||||
pendant la pause ; saisie JEI avec lettres, accents, Unicode, filtrage,
|
||||
édition, focus clavier et chat ; séchoir à deux aliments, refus du troisième,
|
||||
immersion, relecture sur disque, récupération et consommation.
|
||||
- Captures inspectées : poules FR, achat Catalogue et recherche JEI FR GUI 4.
|
||||
Langues FR/EN et interfaces 2/3/4 vérifiées dans le parcours commun.
|
||||
- Les sept PNG historiques des poules/œuf et les fichiers sources originaux
|
||||
importés restent intacts. Un seul JEI embarqué, en `.5`, plus Media 0.3.2.
|
||||
Aucun module de test ajouté au JAR ; copies packwiz client/serveur et
|
||||
override MRpack identiques au JAR validé.
|
||||
|
||||
JAR : `sanctuary-beta.324.jar`, SHA-256
|
||||
`2fcfc84579660b494602fb35cb36cb1b6ba6d8964f664dbefde2abee7e1b1a72`.
|
||||
Les preuves du regroupement sont conservées dans `build/integration324/`.
|
||||
Le reçu de livraison site/serveur sera ajouté après les vérifications publiques.
|
||||
@@ -0,0 +1,124 @@
|
||||
# Prochaine passe — mods du pack et modules personnels
|
||||
|
||||
Cadrage du **26 octobre 2026**, à la demande de Koka. Initialement préparés
|
||||
pour après beta.291, les quatre tickets d'intégration sont désormais repris
|
||||
dans [la préparation locale beta.292](optional-mods-beta292.md), à sa demande.
|
||||
Dozei Stream et Only Fun restent des contrats futurs. Chaque implémentation
|
||||
prendra sa propre branche `codex/<sujet>` et son prochain compteur libre.
|
||||
Les versions du cadrage ci-dessous sont des candidats repérés pour **Minecraft 26.3,
|
||||
Fabric 0.19.5 et Java 25**, pas des intégrations validées. Tous les essais
|
||||
graphiques cibleront Vulkan, avec Sodium puis sans si le mod le permet.
|
||||
|
||||
L'API Modrinth a été interrogée avec les filtres exacts `game_versions=["26.3"]`
|
||||
et `loaders=["fabric"]`. Les JAR candidats ont été téléchargés dans le dossier
|
||||
ignoré `build/optional-mods291/`, vérifiés contre leur SHA-512 publié et leurs
|
||||
`fabric.mod.json` relus. Revalider versions, dépendances, licences et hashes au
|
||||
début de chaque ticket ; aucun binaire téléchargé n'entre dans Git.
|
||||
|
||||
| Ticket | Branche prévue | Candidat observé | Résultat à obtenir |
|
||||
| --- | --- | --- | --- |
|
||||
| PACK-VOICE-01 | `codex/simple-voice-chat` | [2.6.26+26.3, Fabric, bêta](https://modrinth.com/plugin/simple-voice-chat/version/cZm965sW) | Conversation de proximité client/serveur, compatible avec l'acoustique Sanctuary |
|
||||
| PACK-BOBBY-01 | `codex/bobby-optional` | [5.2.16+mc26.3](https://modrinth.com/mod/bobby/version/J7YnfCss) | Voir les chunks déjà reçus au-delà de la distance envoyée par le serveur, installation facultative |
|
||||
| PACK-LITHIUM-01 | `codex/lithium-integration` | [0.26.2+mc26.3, Fabric](https://modrinth.com/mod/lithium/version/xS0Q8LSi) | Réduire le coût de simulation en conservant les règles Sanctuary |
|
||||
| PACK-CULL-01 | `codex/entity-culling` | [1.11.3 pour 26.3, Fabric](https://modrinth.com/mod/entityculling/version/X1g3VhTx) | Éviter le rendu des entités et blocs entités masqués, sans disparitions incorrectes |
|
||||
| MODULE-DOZEI-01 | `codex/dozei-stream-contract` | Pas encore réalisé, aucun artefact fourni | Définir le premier résultat vérifiable de Dozei Stream |
|
||||
| MODULE-ONLYFUN-01 | `codex/only-fun-contract` | Mod personnel futur | Définir une première interaction potache autonome |
|
||||
|
||||
## PACK-VOICE-01 — Simple Voice Chat
|
||||
|
||||
Le JAR 2.6.26 déclare `minecraft=26.3.x`, Java ≥25, Loader ≥0.19.3 ;
|
||||
Fabric API doit être ≥0.160.5+26.3, ce qui correspond au socle actuel.
|
||||
**Conflit constaté : il déclare `breaks.sound_physics_remastered=<1.5.2`,
|
||||
alors que Sanctuary distribue 1.5.1+26.3.** Le candidat 2.6.25 a le même refus.
|
||||
Le JAR [2.6.24+26.3](https://modrinth.com/plugin/simple-voice-chat/version/OLnMVWXy)
|
||||
ne déclare pas ce conflit ; cela ne prouve pas sa compatibilité en partie.
|
||||
|
||||
Décider et tester soit une mise à jour délibérée de Sound Physics et de son
|
||||
adaptateur natif Sanctuary, soit une version vocale antérieure compatible.
|
||||
Ne pas contourner les dépendances de Fabric. Conserver un artefact autonome
|
||||
provenant de l'auteur et ses conditions de distribution.
|
||||
|
||||
Acceptation : connexion de deux clients de développement, voix de proximité,
|
||||
muet, push-to-talk, déconnexion/reconnexion, coexistence Sound Physics et
|
||||
préférences conservées. Vérifier les profils packwiz client/serveur, le refus
|
||||
des versions incompatibles et les interfaces FR/EN ajoutées par Sanctuary.
|
||||
L'activation réseau de la Beta sera une étape de livraison distincte : le
|
||||
[protocole amont](https://dev.modrepo.de/minecraft/voicechat/wiki/server_setup)
|
||||
utilise UDP et un port vocal propre, par défaut 24454. Tester depuis l'extérieur
|
||||
avec `/voicechat test`, puis un échange audible ; l'ouverture du port Minecraft
|
||||
TCP ne suffit pas. Aucun port ni serveur personnel n'est modifié par ce ticket
|
||||
documentaire.
|
||||
|
||||
## PACK-BOBBY-01 — cache client facultatif
|
||||
|
||||
Le candidat déclare un environnement client, Minecraft `~26.3`, Loader
|
||||
≥0.18.4 et refuse Sodium <0.6.0 ; Sodium 0.9.2 du pack satisfait ce seul
|
||||
contrat déclaré. Cloth Config et Mod Menu sont suggérés, pas requis dans le
|
||||
JAR inspecté. Le [principe amont](https://github.com/Johni0702/bobby) est de
|
||||
mettre en cache les chunks envoyés dans `.bobby`, puis d'afficher leur dernière
|
||||
copie connue à distance. Ce cache ne simule pas les chunks et ne remplace pas
|
||||
leur état serveur actuel.
|
||||
|
||||
Acceptation : choix packwiz **facultatif**, installation/désinstallation par
|
||||
le sélecteur et préférence conservée au second lancement ; parcours puis
|
||||
retour sur un serveur de développement avec distance d'envoi courte ; chunks
|
||||
lointains visibles sous Vulkan, actualisation lors de leur réception réelle,
|
||||
claims/Atlas et blocs Sanctuary cohérents au retour. Aucun monde personnel
|
||||
utilisé comme `bobby-fallback`. Définir une valeur initiale de distance et une
|
||||
politique de cache mesurées avant livraison ; pas de génération supplémentaire
|
||||
imposée au serveur.
|
||||
|
||||
## PACK-LITHIUM-01 — simulation
|
||||
|
||||
Le [candidat](https://github.com/CaffeineMC/lithium) peut fonctionner côté client
|
||||
et serveur. Ses dépendances déclarées sont Minecraft `~26.3`, Loader ≥0.19.5
|
||||
et MixinExtras ≥0.5.5. Vérifier la version réellement fournie par Loader ; ne
|
||||
pas ajouter une bibliothèque par supposition. Définir séparément les profils
|
||||
serveur et client, sans faire dépendre l'autorité serveur du choix d'un joueur.
|
||||
|
||||
Acceptation : démarrage et rechargement d'un monde de test, recettes et
|
||||
inventaires, IA des infectés/familiers/baleines, interactions multiblocs et
|
||||
budget de ticks comparés avant/après sur le même scénario. Les gains doivent
|
||||
être mesurés ; conserver les identifiants, sauvegardes et règles serveur.
|
||||
|
||||
## PACK-CULL-01 — masquage visuel
|
||||
|
||||
Le [candidat](https://github.com/tr7zw/EntityCulling) cible Minecraft `~26.3`
|
||||
et requiert Fabric API ; TRansition et TRender sont déjà imbriqués dans le
|
||||
JAR inspecté. Vérifier leurs hooks de rendu sur Vulkan avant toute inclusion,
|
||||
ainsi que les conditions de distribution du binaire original.
|
||||
|
||||
Acceptation : comparaison activé/désactivé sur une scène de développement,
|
||||
avec mur opaque, fenêtres, verre, sortie d'occlusion et changement rapide de
|
||||
caméra. Vérifier familiers portés, cosmétiques, baleines translucides, coffres
|
||||
et multiblocs ; aucune disparition visible incorrecte. Mesurer le gain et le
|
||||
coût CPU. Aucun essai OpenGL ne vaut validation de ce ticket.
|
||||
|
||||
## Modules personnels — contrats à écrire
|
||||
|
||||
**MODULE-DOZEI-01 :** conserver le nom donné « Dozei Stream » ; son rôle,
|
||||
ses sources, sa cible client/serveur, ses dépendances et son premier scénario
|
||||
restent à préciser avec le créateur. Ne déduire aucune fonctionnalité du nom.
|
||||
Acceptation du cadrage : une action observable et un périmètre testable avant
|
||||
de créer un faux artefact ou une entrée packwiz sans téléchargement.
|
||||
|
||||
**MODULE-ONLYFUN-01 :** reprendre la [vision Only Fun](vision.md#only-fun--interactions-sociales-et-absurdes),
|
||||
avec l'intention confirmée d'ajouter de l'humour « pipi caca ». C'est un mod
|
||||
personnel autonome, séparé du socle nécessaire pour jouer à Sanctuary.
|
||||
Choisir une première interaction, définir ses entrées, effets, données
|
||||
persistantes et branchements facultatifs au calendrier/aux événements.
|
||||
Acceptation du cadrage : petit scénario jouable défini, comportement en solo
|
||||
et serveur, installation indépendante et libellés FR/EN prévus. Le contenu
|
||||
futur de la vision ne devient pas une fonctionnalité livrée par ce document.
|
||||
|
||||
## Ordre proposé et fin d'un ticket
|
||||
|
||||
Commencer par Bobby facultatif, puis les optimisations mesurées ; traiter la
|
||||
voix avec sa décision Sound Physics et son parcours réseau. Les deux modules
|
||||
personnels commencent par leur contrat, sans dépendance implicite à ces mods.
|
||||
Cet ordre reste une proposition pour la prochaine séance.
|
||||
|
||||
Chaque intégration livrée passe `./gradlew check build assemblePack`, les
|
||||
essais propres au comportement ajouté, deux synchronisations packwiz isolées,
|
||||
la conservation des choix et le contrôle du profil serveur. Décrire les
|
||||
résultats réels et les limites restantes avant toute publication demandée.
|
||||
@@ -0,0 +1,297 @@
|
||||
# IA — Refonte d'It's Alive ! pour Minecraft 26.3
|
||||
|
||||
**Livraison du 30 octobre 2026 :** [beta.318 publiée, serveur/site/Prism mis à jour](release-beta318.md).
|
||||
**Livraison beta.320 :** [cuisine, carte et activité saisonnière sur le site et le serveur](release-beta320.md), dont IA-12 initialement prévue en beta.319.
|
||||
Les autres mentions « locale » ci-dessous conservent l'historique des préparations avant publication.
|
||||
|
||||
Demande du créateur du **28 octobre 2026**, branche locale
|
||||
`codex/itsalive-26-3`, socle `77fdabfb` (dernière livraison beta.298).
|
||||
Le checkout historique 26.2 et les changements locaux du checkout principal
|
||||
restent intacts. Aucun push, tag, canal, serveur, site ou Prism mis à jour.
|
||||
|
||||
Le premier lot retenu par le créateur est **textures et ressources d'abord**.
|
||||
Le même jour, il demande ensuite le port jouable des cultures, arbres
|
||||
fruitiers et caféier : [IA-02, préparation beta.300](agriculture-beta300.md).
|
||||
Les statuts ci-dessous distinguent le port agricole des prochains tickets ;
|
||||
leur inscription seule ne vaut pas implémentation. Les incréments continueront avec le compteur normal
|
||||
`beta.xxx`, sans réserver ni publier à l'avance une série de versions 300.
|
||||
L'intégration reste dans Sanctuary, conformément au
|
||||
[cadrage de fusion](multiblocs-itsalive-contrat.md).
|
||||
|
||||
## IA-01 — Import graphique, beta.299 locale
|
||||
|
||||
**Import réalisé.** Les textures sont copiées dans
|
||||
`mods/sanctuary/src/main/resources/assets/sanctuary/textures/`, avec les noms
|
||||
de fichiers historiques, sans conversion, redimensionnement ou retouche.
|
||||
Aucune ressource Sanctuary préexistante n'est écrasée. Le namespace de
|
||||
destination est celui de Sanctuary ; aucun identifiant de registre n'est
|
||||
ajouté par la présence d'un PNG.
|
||||
|
||||
| Ressources | Nombre | Contenu |
|
||||
| --- | ---: | --- |
|
||||
| Textures de blocs | 212 | Croissance, feuillages, pousses, appareils, blocs d'ingrédients |
|
||||
| Textures d'objets | 129 | Semences, récoltes, ingrédients et plats |
|
||||
| Sprites d'interface | 2 | Rail et tête du moulin historique |
|
||||
| **Total** | **343** | Cuisine et agriculture uniquement |
|
||||
|
||||
Les **38 PNG fournis dans `food/`** sont prioritaires sur leurs homologues
|
||||
26.2 et conservés octet pour octet, transparence comprise. Ils existent tous
|
||||
déjà sous le même nom dans l'historique : ce sont de nouvelles versions des
|
||||
dessins, pas 38 nouveaux objets. Comparaison avec la 26.2 :
|
||||
|
||||
- **32** modifient les pixels ;
|
||||
- **2**, `corn.png` et `lettuce.png`, modifient seulement l'encodage PNG ;
|
||||
- **4** sont strictement identiques : `bell_pepper.png`, `eggplant.png`,
|
||||
`strawberry_seeds.png` et `tomato.png`.
|
||||
|
||||
Les **305 autres PNG** proviennent sans modification du module historique
|
||||
`26.2/itsalive`, commit `26f2c2a0061619df1f146f9081d6740c560a7497`.
|
||||
Le [reçu complet](itsalive-textures-beta299.json) conserve pour chaque texture
|
||||
son origine, son SHA-256 final, le SHA-256 26.2 et ses dimensions. Les monstres,
|
||||
œufs, archives ZIP, fichiers système et textures Canaplia restent hors de
|
||||
ce lot culinaire. Les portages déjà présents dans Sanctuary sont conservés.
|
||||
|
||||
Les textures comprennent les huit stades des **20 cultures historiques** :
|
||||
fraise, tomate, ananas, maïs, concombre, poivron, aubergine, laitue, oignon,
|
||||
ail, chou, raisin, riz, soja, haricot, pois chiche, piment, basilic, menthe
|
||||
et coriandre. S'ajoutent les parties hautes de la tomate, du maïs, du
|
||||
concombre et du haricot, les quatre stades du caféier et de la vanille,
|
||||
ainsi que les pousses et feuillages avec/sans fruits du citronnier et de
|
||||
l'olivier. Les deux arbres historiques réutilisent les bois vanilla :
|
||||
aucune nouvelle famille de bois n'est sous-entendue.
|
||||
|
||||
Les textures sont présentes dans les ressources du mod, mais **aucun de ces
|
||||
nouveaux objets, blocs, arbres, appareils ou recettes n'est encore enregistré
|
||||
en jeu**. Le Java, les recettes, les modèles et les règles de génération de
|
||||
26.2 ne sont pas copiés automatiquement. Les images seules ne suffisent pas
|
||||
à porter les comportements ni à valider leur compatibilité 26.3.
|
||||
|
||||
## Évolution beta.307 — recette du moulin manuel
|
||||
|
||||
[La redstone de la recette cède la place à un bâton](mill-recipe-beta307.md)
|
||||
pour la poignée. Les dalles de pierre lisse, le cuivre et le tailleur de pierre
|
||||
restent la base de l'appareil. La recette rejoint Divers dans le livre natif ;
|
||||
son identifiant et le fonctionnement manuel de beta.306 restent stables.
|
||||
|
||||
## Évolution beta.306 — moulin manuel
|
||||
|
||||
[Le moulin devient un poste manuel comme le tailleur de pierre](mill-beta306.md),
|
||||
sans combustible ni attente. Le résultat est un aperçu : seule sa récupération
|
||||
paie un ingrédient. Le nom devient Moulin / Mill ; le menu conserve le
|
||||
mouvement mécanique et retire le feu. Les neuf recettes et les identifiants
|
||||
restent stables ; les anciens objets stockés sont récupérables.
|
||||
|
||||
## Évolution beta.305 — écrasement direct
|
||||
|
||||
À la demande du créateur, la presse alimentaire est retirée du jeu courant.
|
||||
[Les blocs de fruits s'écrasent directement en huit paliers](crushing-beta305.md),
|
||||
avec résidus progressifs, piston immédiat et super piston sur 27 blocs.
|
||||
Les identifiants de fruits restent stables ; l'ancien ID de presse n'est gardé
|
||||
que pour récupérer un inventaire d'essai local, sans traitement ni catalogue.
|
||||
|
||||
## IA-09 — Découverte des premières semences en survie
|
||||
|
||||
[Répartition climatique, récoltes sauvages et guide des neuf îles](foraging-beta316.md),
|
||||
préparation locale beta.316 du 30 octobre 2026. Ce lot remplace le report de
|
||||
la découverte naturelle annoncé dans IA-02/IA-03, sans repeupler les chunks sauvegardés.
|
||||
|
||||
## IA-10 — Extension du séchoir, beta.317 locale
|
||||
|
||||
[15 recettes de séchage, 12 nouveaux produits et propositions culinaires](drying-foods-beta317.md).
|
||||
Les quatre crochets et les sauvegardes gardent leur fonctionnement ; la vanille
|
||||
se sèche désormais sur le cadre et les herbes/piments secs servent aussi en cuisine.
|
||||
|
||||
## IA-11 — Les 18 recettes aux produits séchés, beta.318 locale
|
||||
|
||||
[Implémentation et vérifications](dried-cuisine-beta318.md). Les propositions de
|
||||
beta.317 deviennent des recettes jouables avec les appareils prévus ; le saucisson
|
||||
pimenté garde les gestes de préparation, séchage et partage en tranches. Les plats
|
||||
épicés déclenchent de petits coups cosmétiques sans perte de vie.
|
||||
|
||||
## Suivi des mécaniques
|
||||
|
||||
### IA-02 — Cultures, arbres fruitiers et caféier jouables
|
||||
|
||||
**Port implémenté dans la préparation locale beta.300**, sur cette même
|
||||
branche. [Comportements, accès et vérifications](agriculture-beta300.md).
|
||||
Le texte ci-dessous conserve le périmètre du ticket.
|
||||
|
||||
Porter les 20 cultures, leurs propagules, les arbres et le caféier vers les
|
||||
API 26.3. Reprendre explicitement les récoltes pérennes et annuelles, les
|
||||
parties hautes et la plantation particulière du riz, après examen des règles
|
||||
historiques. Ajouter les noms et aides FR/EN. Tester plantation, croissance,
|
||||
récolte, casse, rechargement et absence de duplication côté serveur.
|
||||
|
||||
La répartition climatique et l'apparition naturelle feront l'objet d'un
|
||||
contrat de génération séparé, documenté avec graine et version. Aucune
|
||||
injection rétrospective dans les chunks existants n'est autorisée par ce lot.
|
||||
|
||||
### IA-03 — Vanille grimpante
|
||||
|
||||
**Implémentée dans la préparation locale beta.301**, sur la même branche :
|
||||
[attachement aux troncs, croissance ascendante et vérifications](vanilla-beta301.md).
|
||||
[Correction graphique beta.302 : quatre stades en 16 × 16](vanilla-16px-beta302.md).
|
||||
Le texte ci-dessous conserve le périmètre initial du ticket.
|
||||
|
||||
Obtenir une plante plaquée contre son support, visuellement comparable aux
|
||||
lianes, qui **progresse vers le haut** plutôt que de former un grand totem.
|
||||
L'ancien `VanillaVineBlock` possède déjà une méthode `growUpward` et exige
|
||||
une bûche de jungle ; il faut donc examiner aussi le modèle, les faces et les
|
||||
supports, sans présenter un simple changement de direction comme une refonte.
|
||||
|
||||
Vérifier la pose, le support de chaque segment, la croissance supérieure,
|
||||
les obstacles, la récolte, la casse du support et la poudre d'os. Choisir les
|
||||
supports admis et la forme exacte dans ce ticket. Les quatre anciens PNG
|
||||
sont conservés comme références, sans promettre qu'ils suffiront au modèle final.
|
||||
|
||||
### IA-04 — Cuisiner avec le chaudron
|
||||
|
||||
**Suite locale beta.312 :** [le premier geste mémorise la recette, les lots
|
||||
se répètent et le réapprovisionnement garde le travail en cours](cauldron-repeat-beta312.md).
|
||||
La sortie s’accumule, sa collecte conserve la série et Maj-clic à main vide
|
||||
permet de l’arrêter.
|
||||
|
||||
**Refonte locale beta.311 :** [préparation libre, démarrage au bâton, aucun
|
||||
plat raté au chaudron, récipients payés en fin de cuisson et sons natifs](cauldron-beta311.md).
|
||||
Le geste manuel est confirmé par le créateur ; les 19 recettes restent les
|
||||
recettes portées, avec une seule préparation lancée par geste.
|
||||
|
||||
**Port jouable en beta.304 locale :** [chaudron vanilla, eau exacte, chauffe, lots et récipients](kitchen-beta304.md).
|
||||
|
||||
Repartir des usages du chaudron vanilla pour l'eau, la chauffe, les ingrédients
|
||||
et les récipients, puis définir comment préparer et servir un plat. Examiner
|
||||
l'ancien `CookingCauldronBlock` avant de choisir l'extension du bloc vanilla
|
||||
ou un appareil spécialisé. Les gestes, niveaux d'eau, portions et retours de
|
||||
bols/seaux doivent former une boucle vérifiable, sans pertes ni duplication.
|
||||
|
||||
### IA-05 — Plats ratés et nouvelles recettes
|
||||
|
||||
**Suite beta.304 locale :** [appareils et plats ratés historiques portés](kitchen-beta304.md). La fermentation est désormais temporisée dans le tonneau et le pressage exige le pressoir.
|
||||
|
||||
**Recettes portées en beta.303 locale à la demande du créateur :**
|
||||
[92 recettes alimentaires sur table et four/fumoir](cuisine-beta303.md),
|
||||
avec les ingrédients intermédiaires. La fabrication manuelle instantanée de
|
||||
fermentation de cette étape est remplacée par le tonneau en beta.304. Les plats
|
||||
ratés historiques sont également portés dans cette suite.
|
||||
Le texte ci-dessous conserve le cadrage initial ; la demande d'import du
|
||||
28 octobre autorise le port du catalogue avec les adaptations documentées.
|
||||
|
||||
Revoir les « fake dishes » cités dans la demande. L'historique contient
|
||||
`failed_dish`, produit par la poêle et le chaudron : c'est la correspondance
|
||||
probable, à confirmer au cadrage de ce ticket. Définir ce qui constitue une
|
||||
recette, un mélange incomplet et un échec, puis les ingrédients consommés et
|
||||
le résultat obtenu. Ne pas importer en bloc l'ancien catalogue de recettes
|
||||
avant cette décision. Conserver les idées de nouveaux plats dans ce même suivi.
|
||||
|
||||
### IA-06 — Saucisson et séchoir
|
||||
|
||||
**Implémentation locale beta.313 :** [préparation à l’établi, quatre crochets
|
||||
visibles, cinq minutes de jeu, protection de la pluie et conservation des
|
||||
objets/progressions](drying-rack-beta313.md). Les modèles utilisent les
|
||||
textures natives ; le fonctionnement ci-dessous décrit le cadrage initial.
|
||||
|
||||
Créer une préparation qui devient du saucisson après séchage dans un séchoir.
|
||||
Définir la recette initiale, la durée, les conditions et les gestes de pose
|
||||
et de récupération. Vérifier interruption, reprise et rechargement, avec
|
||||
progression autoritaire côté serveur et résultat unique. Le séchoir et le
|
||||
saucisson n'ont pas de nouvelle texture fournie dans `food/` ; leur dessin
|
||||
et leur fonctionnement restent à réaliser.
|
||||
|
||||
### IA-07 — Poêle native et pose souple
|
||||
|
||||
**Refonte locale beta.310 :** [une recette commune par pile de une à quatre
|
||||
poêles, pose en ligne, paiement réel, réserves natives et continuité](pan-stacks-beta310.md).
|
||||
Le choix confirmé concerne les piles ; les orientations supplémentaires et
|
||||
les ancrages particuliers restent ouverts.
|
||||
|
||||
**Port de la poêle en beta.304 locale :** [bloc entité, contenu visible, cuisson, retraits et sauvegarde](kitchen-beta304.md). La forme historique est conservée ; la refonte de pose/orientation reste ouverte.
|
||||
|
||||
Revoir les bugs, la pose et l'intégration de la poêle, avec la souplesse de
|
||||
placement des coussins comme référence exprimée par le créateur. L'ancienne
|
||||
`FryingPanBlock` étend déjà `BaseEntityBlock` et possède une
|
||||
`FryingPanBlockEntity` : l'absence de bloc entité n'est donc pas un diagnostic
|
||||
établi. Reproduire les défauts puis choisir le placement, l'orientation et
|
||||
l'ancrage adéquats pour 26.3.
|
||||
|
||||
Vérifier les surfaces prévues, le contenu visible, la source de chaleur,
|
||||
l'ajout/retrait d'ingrédients, la casse et le rechargement. Un ingrédient ou
|
||||
plat doit toujours être récupéré une seule fois. Ne pas reprendre l'ancien
|
||||
modèle et son placement comme s'ils satisfaisaient déjà cette demande.
|
||||
|
||||
### IA-08 — Cuisinière : four et table de fabrication
|
||||
|
||||
**Précision beta.309 :** [une seule sortie, sans aperçu supplémentaire,
|
||||
grille manuelle et extraction des plats par entonnoir](oven-single-output-beta309.md).
|
||||
|
||||
**Refonte locale beta.308 :** [cuisson automatique, aperçu, paiement en fin de
|
||||
cycle, annulation des modifications et poursuite avec le menu fermé](oven-beta308.md).
|
||||
Le créateur a retenu le démarrage comme un four et les recettes de cuisine
|
||||
uniquement. La fabrication de l'appareil garde sa table et son four.
|
||||
|
||||
**Port culinaire en beta.304 locale :** [grille 3 × 3, combustible, résultat temporisé et recette table + four + briques + fer](kitchen-beta304.md). Le Fourneau multibloc existant est conservé.
|
||||
|
||||
Reprendre la cuisinière comme un assemblage cohérent du four et de la table
|
||||
de fabrication. Examiner ses usages historiques et le Fourneau multibloc
|
||||
déjà présent pour éviter deux appareils redondants. Définir ensuite les
|
||||
gestes et une recette plus élaborée, mais lisible dans Minecraft.
|
||||
|
||||
La table de fabrication et les quatre pierres évoquées sont une **piste**,
|
||||
pas une recette arrêtée. Le remplacement par le Fourneau reste à décider
|
||||
dans ce ticket. Aucun inventaire historique ni travail de cuisson en cours
|
||||
n'est converti sans contrat explicite.
|
||||
|
||||
## Vérifications du premier lot
|
||||
|
||||
Le contrôle permanent des 343 empreintes et dimensions est intégré à
|
||||
`./gradlew check` via `verifyItsAliveTextures`. Il peut aussi comparer les
|
||||
fichiers originaux et le JAR construit :
|
||||
|
||||
```sh
|
||||
python3 scripts/verify_itsalive_textures.py
|
||||
python3 scripts/verify_itsalive_textures.py --jar mods/sanctuary/build/libs/sanctuary-beta.299.jar
|
||||
./gradlew check build assemblePack -PsanctuaryFocusedTests=recipes,progression -PsanctuaryAtlasOnly=true
|
||||
```
|
||||
|
||||
Import : les 343 PNG ont été décodés intégralement ; comparaison des pixels
|
||||
des 38 images fournies, contrôle visuel de leur planche avant/après et
|
||||
vérification des fichiers originaux réussis.
|
||||
|
||||
- `check build assemblePack` avec le profil ci-dessus : **réussi en 3 min 2 s**,
|
||||
158 tâches, **13 GameTests serveur requis réussis** et contrôles du dépôt.
|
||||
Le profil cible les recettes et la progression existantes ; il ne teste
|
||||
aucune culture nouvelle, puisqu'elles ne sont pas encore enregistrées.
|
||||
- JAR final : les 343 textures correspondent exactement au reçu. Comparé
|
||||
au JAR beta.298, aucune classe, recette, modèle ou dépendance embarquée
|
||||
ne change. Seuls les 343 PNG, la version Fabric et les crédits (dont leur
|
||||
copie dans le template) diffèrent ; aucune entrée n'est supprimée.
|
||||
- Template de ressources et JAR rafraîchis après finalisation des crédits ;
|
||||
profils packwiz client/serveur assemblés, versions et index vérifiés.
|
||||
Le JAR du pack est strictement identique au JAR contrôlé.
|
||||
- SHA-256 final de `sanctuary-beta.299.jar` :
|
||||
`e219b13b2e211908bfff171615ad7c3f923d4e4c2df1bf031689930f3efd489b`.
|
||||
- Logs et reçu local dans `build/itsalive-beta299-build.log`,
|
||||
`build/itsalive-beta299-refresh.log` et
|
||||
`build/itsalive-beta299-validation.json`, hors de Git.
|
||||
|
||||
Aucun essai graphique en jeu n'est revendiqué pour cet import sans contenu
|
||||
enregistré. Les futurs essais graphiques cibleront Vulkan exclusivement.
|
||||
Aucun monde personnel n'est ouvert ou modifié, aucun format de sauvegarde
|
||||
ne change. Les versions mod/pack sont alignées en **beta.299**, préparée
|
||||
localement ; la dernière release publiée reste beta.298.
|
||||
|
||||
### IA-09 — Fromage à partager et qualité du vin
|
||||
|
||||
Demande du 29 octobre 2026 : fromage posable et mangeable par parts comme un
|
||||
gâteau ; quatre qualités de vin. Confirmation : le jeune vin reste prêt après
|
||||
trois minutes de jeu, puis table/réserve/grand cru après un/trois/sept jours
|
||||
réels de garde dans le tonneau, y compris jeu fermé.
|
||||
[Implémentation et contrat local beta.314](cheese-wine-beta314.md).
|
||||
Même branche locale, aucune publication.
|
||||
|
||||
### IA-10 — Saucisson posé en tranches
|
||||
|
||||
Demande du 29 octobre 2026 : poser le saucisson séché et manger ses tranches,
|
||||
comme le fromage. [Implémentation locale beta.315](sausage-slices-beta315.md) :
|
||||
le même objet de séchage devient posable, quatre tranches rendent huit points
|
||||
de nourriture au total, quatre orientations et parts sauvegardées nativement.
|
||||
Même branche locale, sans publication ou installation.
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,38 @@
|
||||
# Export modifiable It's Alive — beta.315
|
||||
|
||||
Demande du 29 octobre 2026 : fournir toutes les textures de pousse et tout le
|
||||
contenu graphique ajouté depuis le début de la refonte, puis livrer le pack.
|
||||
|
||||
Le script `scripts/export_itsalive_textures.py` extrait les **347 PNG Sanctuary**
|
||||
ajoutés depuis le socle beta.298, y compris les quatre nouveaux stades de
|
||||
vanille grimpante. Il fournit **368 images modifiables** et **696 JSON visuels**
|
||||
avec les matériaux vanilla réutilisés et les fonds/sprites d'interface.
|
||||
|
||||
L'export local est dans `Downloads/ItsAlive-Textures-beta.315/`, avec son ZIP.
|
||||
`a-modifier/` est un pack de ressources au format 97.1, prêt pour Minecraft
|
||||
26.3. `originaux/`, les notices et les inventaires CSV/JSON conservent les
|
||||
références et SHA-256. Aucun dessin n'est réencodé ou redimensionné.
|
||||
|
||||
Les matériaux partagés par les modèles Minecraft sont recopiés sous
|
||||
`sanctuary:itsalive_editable/<aliment>/...`, et les modèles de cet export sont
|
||||
redirigés vers ces images. Fromage, saucissons cru/séché et séchoir se modifient
|
||||
ainsi séparément, sans recolorer les blocs vanilla correspondants. Toutes les
|
||||
portions d'un même aliment partagent ses matériaux. Chaque qualité de vin a
|
||||
également son propre PNG, même si le jeu emploie l'icône héritée du vin jeune.
|
||||
|
||||
Les quatre images d'interface sous `assets/minecraft/` sont une exception
|
||||
signalée dans l'inventaire : les écrans natifs partagent ces fonds/sprites ;
|
||||
leur modification touche aussi ces écrans vanilla. Les 343 images d'import
|
||||
initial, y compris les anciennes références conservées, restent présentes.
|
||||
|
||||
Le script vérifie les références, dimensions, copies, empreintes et intégrité
|
||||
ZIP, refuse d'écraser un export existant et n'installe/active aucun pack.
|
||||
Pour tester des dessins, copier `a-modifier/` dans les packs de ressources de
|
||||
l'instance choisie, l'activer au-dessus de Textures Sanctuary et recharger.
|
||||
Les règles de jeu et recettes restent celles du mod.
|
||||
|
||||
```sh
|
||||
python3.14 scripts/export_itsalive_textures.py \
|
||||
--output /chemin/neuf/ItsAlive-Textures-beta.315 \
|
||||
--native-jar /chemin/du/client/Minecraft-26.3.jar
|
||||
```
|
||||
@@ -0,0 +1,76 @@
|
||||
# JEI-297 — Saisie dans la recherche de l’inventaire
|
||||
|
||||
Branche `codex/jei-search-input`, version préparée `beta.297`.
|
||||
|
||||
## Symptôme et cause
|
||||
|
||||
Cliquer dans la barre JEI donne bien le focus, mais le premier appui sur une
|
||||
lettre le retire avant l’arrivée du caractère. Le texte reste vide.
|
||||
|
||||
Le portage SDL de Minecraft 26.3 distingue le scancode physique (`KeyEvent.key`)
|
||||
du code logique dépendant du clavier (`KeyEvent.keycode`). JEI utilisait encore
|
||||
le premier comme caractère pour décider si le champ devait consommer la touche.
|
||||
Les scancodes A–Z valent 4–29 : le contrôle les prend pour des caractères de
|
||||
commande interdits, puis le routeur abandonne le focus.
|
||||
|
||||
## Correctif
|
||||
|
||||
Le fork JEI `30.32.0-sanctuary.5` utilise le code logique pour cette décision.
|
||||
L’insertion du texte reste assurée par les événements de caractères natifs ;
|
||||
aucune lettre n’est fabriquée à partir du clavier physique. Les identifiants
|
||||
des objets, les connaissances de recettes, les favoris et les sauvegardes ne
|
||||
changent pas.
|
||||
|
||||
Le correctif est conservé dans `mods/jei/patches/26.3.patch` et reconstruit depuis
|
||||
le commit upstream fixé. Sanctuary continue d’embarquer ce fork dans son JAR.
|
||||
Le travail est isolé du dossier principal, dont les changements locaux sont conservés.
|
||||
|
||||
## Vérifications
|
||||
|
||||
La régression est reproduite sous **Vulkan** avec le fork `.4`, sur un monde plat
|
||||
de développement neuf (graine `297`). Le clic, le focus et l’activation de la
|
||||
saisie SDL passent ; l’appui physique sur P échoue ensuite sur l’assertion
|
||||
`The physical letter key keeps JEI focused until its character arrives`.
|
||||
Journal conservé dans `build/jei297-regression-before-vulkan.log`.
|
||||
|
||||
Les tâches `check`, `build` et `assemblePack` réussissent avec les propriétés
|
||||
`sanctuaryFocusedTests=recipes,progression`, `sanctuaryAtlasOnly=true` et
|
||||
`sanctuaryQuickTests=true` : contrôles purs du dépôt, **13 GameTests serveur**
|
||||
et profils packwiz client/serveur assemblés. La première invocation combinée
|
||||
échoue ensuite dans un contrôle client qui supposait Ctrl/Cmd+F déjà attribué.
|
||||
Sans Amecs, le fork laisse ce raccourci non attribué : le test est corrigé pour
|
||||
lier temporairement F, puis rétablir la liaison initiale. Le comportement des
|
||||
raccourcis par défaut n’est pas modifié.
|
||||
|
||||
La relance cliente finale réussit, avec arrêt normal du client :
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary:runClientGameTest \
|
||||
-PsanctuaryClientTests=true -PsanctuaryJeiSearchClientTests=true \
|
||||
-PsanctuaryQuickTests=true -PsanctuaryAtlasOnly=true \
|
||||
-PsanctuaryFocusedTests=recipes,progression \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=2 \
|
||||
-PsanctuaryClientWindowed=true --console=plain
|
||||
```
|
||||
|
||||
Parcours réel des callbacks clavier : clic dans la barre, maintien du focus
|
||||
entre la touche et son caractère, texte inséré une seule fois, filtrage des
|
||||
planches connues, Retour arrière, Échap et Entrée. Les noms français et anglais
|
||||
sont recherchés après un véritable rechargement des ressources, en GUI 2/3/4.
|
||||
Les 26 lettres passent, dont les touches d’inventaire et de recettes E/R/U,
|
||||
ainsi que majuscule accentuée, texte IME et Unicode hors BMP. Le raccourci
|
||||
temporaire ne s’insère pas dans la recherche, et le chat natif garde sa saisie
|
||||
après fermeture de l’inventaire. Captures FR GUI 4 et EN GUI 2 inspectées.
|
||||
|
||||
Journaux ignorés : `build/jei297-check-build-pack-vulkan.log` et
|
||||
`build/jei297-client-vulkan.log`. Le reçu `build/jei297-artifact.json` vérifie
|
||||
le seul JEI embarqué en `.5`, le code des sources effectivement distribuées
|
||||
et l’identité du JAR Sanctuary entre `mods/sanctuary/build/libs` et le profil packwiz.
|
||||
|
||||
Artefact : `mods/sanctuary/build/libs/sanctuary-beta.297.jar`.
|
||||
SHA-256 : `e01f74675b24d79e4397a27baf363bd59f240e19030ca6a37d495e1f24e1fd97`.
|
||||
Le pack est préparé dans `build/packwiz`, sans export MRpack ni nouveau kit
|
||||
de serveur.
|
||||
|
||||
Préparation locale uniquement. Aucune publication, modification de serveur
|
||||
personnel ni synchronisation de l’instance Prism.
|
||||
@@ -0,0 +1,189 @@
|
||||
# DIST-280 — JEI embarqué et packwiz serveur
|
||||
|
||||
Branche `codex/jei-packwiz-server`, base commit `697e4a2` (beta.278).
|
||||
Version réservée `beta.280` : beta.279 appartient au chantier parallèle
|
||||
Map Island Zoom, dont les modifications ne sont pas reprises ici.
|
||||
|
||||
## Contrat
|
||||
|
||||
- Un seul JAR Sanctuary à distribuer, avec le fork JEI exact
|
||||
`30.32.0-sanctuary.4` et ses notices/bibliothèques embarqués. Fabric API reste
|
||||
une dépendance commune ; Sodium et Sound Physics restent facultatifs côté client.
|
||||
- Même JAR sur client et serveur. JEI possède une initialisation commune
|
||||
(recettes et transfert), ses écrans restent dans son entrée client.
|
||||
- Un manifeste serveur `server/pack.toml` sur le même canal packwiz que le
|
||||
client, avec uniquement Sanctuary et Fabric API. Même version, URL et hash
|
||||
du JAR Sanctuary dans les deux profils. Publication atomique des manifestes
|
||||
après vérification de l'artefact immuable.
|
||||
- Un kit serveur local avec mise à jour packwiz sans interface et lancement
|
||||
Fabric. Les mondes, configurations, permissions, listes de joueurs et secrets
|
||||
restent hors de l'index. Une erreur de mise à jour empêche le démarrage.
|
||||
- Documenter les paramètres existants de l'API Sanctuary Web et de la MariaDB
|
||||
communautaire, sans inventer d'API ni migrer les données ou configurer un site
|
||||
public implicitement. Les secrets restent dans l'environnement du service.
|
||||
|
||||
## Vérifications locales
|
||||
|
||||
`./gradlew check build assemblePack assembleServerPack
|
||||
-PsanctuaryFocusedTests=recipes,progression -PsanctuaryAtlasOnly=true` réussit :
|
||||
13 GameTests requis, contrôles purs du dépôt et assemblages. Le fixture ciblé
|
||||
évite le harnais worldgen historique `unified`, sans modifier sa génération.
|
||||
Les sept tests de l'outil de mise à jour passent séparément, y compris le
|
||||
relais du signal d'arrêt et l'attente de Java avant libération du verrou.
|
||||
|
||||
Installation réelle avec packwiz, deux synchronisations et six fichiers
|
||||
personnels témoins conservés octet par octet. Le JAR de production démarre et
|
||||
s'arrête dans un monde plat de développement neuf avec le JEI imbriqué ;
|
||||
celui-ci correspond au fork construit. Minecraft normalise lui-même les fichiers
|
||||
`server.properties`, `ops.json` et `whitelist.json` au lancement : leurs valeurs
|
||||
sont vérifiées après cet arrêt, distinctement de la préservation par packwiz.
|
||||
|
||||
La transition du profil client retire réellement le JEI séparé suivi par
|
||||
packwiz et conserve les favoris. Les manifestes de publication client/serveur
|
||||
référencent le même artefact. Aucun nouveau parcours graphique n'est revendiqué ;
|
||||
les contrôles historiques Vulkan de l'interface ne sont pas rejoués ici.
|
||||
|
||||
Journaux et reçus ignorés : `build/jei-server-final.log`,
|
||||
`build/server280-updater-final.log`, `build/server280-validation-delivery/validation.json`,
|
||||
`build/client280-validation/validation.json`.
|
||||
|
||||
## Serveur dédié demandé le 25 octobre 2026
|
||||
|
||||
Le créateur demande une **nouvelle CT pour 20 joueurs** sur le nœud `gpu`.
|
||||
La CT 350 `sanctuary-beta-20` est créée à cette fin : Debian 13 amd64,
|
||||
6 vCPU, 8 Gio de RAM, disque 80 Gio, non privilégiée. Le budget Java retenu est
|
||||
6 Gio, avec 20 places, portée 6 et simulation 4 ; ce dimensionnement n'est pas
|
||||
une mesure de charge avec vingt joueurs connectés.
|
||||
|
||||
L'Alpha (CT 300), les CT 330 et 340 et les mondes existants restent hors cible.
|
||||
Le nouveau monde utilisera `sanctuary:sanctuary` (réglages initiaux
|
||||
`sanctuary:island231_medium`), graine `28020261025`, version beta.280.
|
||||
Aucune expansion n'est activée par le déploiement. Le site est dans la CT 320 ;
|
||||
son API et son schéma communautaire 3 sont présents.
|
||||
|
||||
## Livraison et mise en service
|
||||
|
||||
La [release beta.280](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.280)
|
||||
est publiée depuis le commit `23b295356b499404e0056affbb5d3b3811c1b01f`.
|
||||
Le canal packwiz est avancé au commit `338e8a62387048c7e703ef036fda759ef57b4130`,
|
||||
avec les profils client et serveur dans le même commit. Aucun JEI séparé n'est
|
||||
joint. Le MRpack contient le seul JAR Sanctuary en override, et trois dépendances
|
||||
téléchargées (Fabric API, Sodium et Sound Physics).
|
||||
|
||||
| Artefact | SHA-256 |
|
||||
| --- | --- |
|
||||
| `sanctuary-beta.280.jar` | `489dade38218d34d2a4502fa4ffe71f0bc13035948dc1c52b633b528e9855c7e` |
|
||||
| `Sanctuary-Server-beta.280.zip` | `54ed73e75b53305a9f0cc5505f3d64624d23598f906ac69d121030255ced0d5a` |
|
||||
| `Sanctuary-beta.280.mrpack` | `b23ba2d9cf72d27da2595e3f4a32a36656f71abf2d2cb4d6cefd7f9d29e4cd01` |
|
||||
|
||||
Le kit téléchargé dans la nouvelle CT correspond à cet artefact immuable.
|
||||
Java 25, Python 3.13 et le service `sanctuary-beta.service` sont installés ;
|
||||
le service est activé au démarrage. Le premier monde Sanctuary a été créé à
|
||||
la graine annoncée, avec le générateur 231, taille Medium, en Survie et
|
||||
`online-mode=true`. La réponse réseau Minecraft annonce 26.3, protocole 777,
|
||||
**20 places**, et le JEI embarqué est chargé côté serveur.
|
||||
|
||||
La synchronisation packwiz a été exécutée après arrêt propre du nouveau serveur :
|
||||
**61 fichiers de monde, de configuration et de secrets gardent leurs hashes**.
|
||||
Le même monde redémarre ensuite. L'outil maintient son verrou jusqu'à la fin
|
||||
de la sauvegarde Java, y compris lorsque systemd transmet SIGTERM.
|
||||
|
||||
L'API du site accepte l'authentification et refuse un corps de vérification
|
||||
vide avec HTTP 422 : aucun code d'habitant n'est consommé. L'accueil serveur
|
||||
confirme que les codes sont requis. Un compte MariaDB propre à Beta a été créé,
|
||||
restreint à son hôte et aux sept tables nécessaires, avec TLS obligatoire ;
|
||||
Connector/J utilise `sslMode=verify-full`. Le schéma existant 3 n'est pas migré.
|
||||
La ligne de statistiques du nouveau serveur est alimentée toutes les 30 secondes.
|
||||
|
||||
La console du site était non configurée. Seules ses trois variables RCON ont
|
||||
été renseignées pour Beta, après sauvegarde privée ; le cache Laravel est
|
||||
reconstruit sans redémarrer le site. La commande de lecture `list`, appelée
|
||||
par le vrai service PHP, répond « 0 of a max of 20 ». Le port RCON est filtré
|
||||
dans la CT Beta : accès du site et de loopback uniquement, refus depuis un autre
|
||||
client LAN. Aucune redirection publique RCON n'est créée.
|
||||
|
||||
Les secrets restent dans `/etc/sanctuary/beta.env`, le `server.properties`
|
||||
privé et l'environnement Web, jamais dans Git ou packwiz. Les unités
|
||||
`sanctuary-beta-rcon-firewall.service` et le complément systemd associé
|
||||
appartiennent à cette installation, hors de l'index de mods.
|
||||
|
||||
Le domaine demandé est `beta.sanctuary-minecraft.net`. Les deux enregistrements
|
||||
OVH sont publiés : A pour Beta et SRV `_minecraft._tcp.beta` vers le port 25567,
|
||||
TTL 300. Les quatorze enregistrements DNS préexistants sont conservés. Une
|
||||
réservation DHCP lie l'adresse de la CT à sa MAC ; elle est activée après test
|
||||
de syntaxe et redémarrage de dnsmasq, sans changer ses deux fichiers existants.
|
||||
Aucun serveur Minecraft ou proxy existant n'est redémarré par cette opération.
|
||||
|
||||
Une redirection UPnP Beta seule a servi d'amorçage. Le 25 octobre, le créateur
|
||||
réenregistre la règle Bbox permanente « Sanctuary beta 20 » : **port externe
|
||||
25567 → 192.168.1.122:25565**. L'API de la Bbox déclare encore `protocol=all`
|
||||
(TCP/UDP) ; l'accès Minecraft TCP est vérifié.
|
||||
|
||||
La redirection UPnP appartenant à Beta est ensuite supprimée. Son timer est
|
||||
désactivé, le service est arrêté, puis les trois fichiers du maintien sont
|
||||
retirés de la configuration active et archivés dans la CT sous
|
||||
`/root/sanctuary-beta-maintenance/upnp-retired-20261025-1792900244/`.
|
||||
Les sept autres règles NAT permanentes et les quatre autres redirections UPnP
|
||||
sont conservées. Le processus Minecraft reste le même : aucun redémarrage ni
|
||||
modification d'une sauvegarde n'est nécessaire à ce retrait.
|
||||
|
||||
Après suppression du secours, `beta.sanctuary-minecraft.net:25567` répond bien
|
||||
Minecraft **26.3**, protocole **777**, **0/20**, avec le MOTD du nouveau Beta.
|
||||
Le SRV public permet de saisir seulement `beta.sanctuary-minecraft.net`.
|
||||
La vérification utilise le chemin public depuis le LAN (hairpin) ; une validation
|
||||
depuis un réseau Internet extérieur reste à effectuer.
|
||||
|
||||
Le [MRpack client publié](https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.280/Sanctuary-beta.280.mrpack)
|
||||
est retéléchargé et vérifié : 16 589 058 octets, hash identique au fichier local,
|
||||
ZIP intègre, version beta.280, Minecraft 26.3 et un seul override Sanctuary avec
|
||||
JEI intégré.
|
||||
|
||||
Aucune charge réelle avec vingt joueurs, nouvelle connexion OAuth Discord ou
|
||||
nouvelle qualification graphique n'est revendiquée.
|
||||
|
||||
Les sources sont isolées de Map Island Zoom. La prochaine livraison doit
|
||||
reprendre ce profil serveur et utiliser un compteur supérieur à beta.280.
|
||||
L'instance Prism personnelle n'a pas été synchronisée par cette mise en service.
|
||||
|
||||
Preuves locales supplémentaires : `build/server280-publication.log`,
|
||||
`build/server280-deployment.log`, `build/server280-gpu-update-validation.log`,
|
||||
`build/server280-rcon-setup.log`, `build/server280-dhcp-reservation.log`,
|
||||
`build/server280-upnp-retirement.log` et
|
||||
les inventaires sous `/root/beta-publication-20261025/` sur PVE. Ces fichiers
|
||||
restent hors de Git.
|
||||
|
||||
## Raccordement Sanctuary Web corrigé le 25 octobre 2026
|
||||
|
||||
Le statut et l'Intendance de [Sanctuary Web](https://sanctuary-minecraft.net)
|
||||
lisaient encore l'ancienne base distante par la connexion Laravel `game`, alors
|
||||
que Beta écrivait déjà dans la base `sanctuary` de la CT Web 320. La vérification
|
||||
initiale des écritures serveur ne couvrait donc pas toutes les lectures du site.
|
||||
Hermes confirme l'identité de cette instance Web ; les anciens sites de release
|
||||
ne sont pas remis en service.
|
||||
|
||||
La connexion `game` utilise maintenant la même base locale que Beta, en gardant
|
||||
`COMMUNITY_DB_CONNECTION=game` pour les services et les ressources
|
||||
d'administration. Le cache de configuration Laravel est reconstruit. Les sources
|
||||
Web déployées, qui contiennent des changements préexistants, restent inchangées.
|
||||
La connexion Discord fonctionne selon le créateur et n'est pas modifiée.
|
||||
|
||||
La nouvelle communauté ne contient aucune publication : Gazette, Tableau et
|
||||
Intendance affichent désormais cet état, sans suppression dans l'ancienne base.
|
||||
Les trois comptes, dont deux administrateurs, le groupe d'équipe, ses deux
|
||||
adhésions et les vingt-deux permissions sont conservés. Les empreintes des
|
||||
identités, des droits administrateurs et des tables d'équipe sont identiques
|
||||
avant et après l'opération.
|
||||
|
||||
Les services publics et les requêtes d'administration Gazette/Tableau lisent
|
||||
zéro publication. La page d'accueil et les deux listes publiques répondent HTTP
|
||||
200. Les métriques sont fraîches, le serveur est déclaré en fonctionnement, et
|
||||
son temps cumulé continue d'augmenter. Le compteur reste à zéro jour tant que
|
||||
Beta n'a pas cumulé vingt-quatre heures ; les anciens décès ne sont plus affichés.
|
||||
|
||||
La configuration précédente est sauvegardée dans la CT Web, avec accès root
|
||||
seul, sous
|
||||
`/root/sanctuary-beta-maintenance/web-game-connection-20261025-1792901058/`.
|
||||
Le reçu `build/sanctuary-web-beta-alignment.log` et la capture
|
||||
`build/sanctuary-web-beta-after.png` restent hors de Git. Cette correction de
|
||||
configuration et de documentation ne change aucun binaire beta.280 ni aucune
|
||||
sauvegarde Minecraft.
|
||||
@@ -0,0 +1,297 @@
|
||||
{
|
||||
"source_commit": "26f2c2a0061619df1f146f9081d6740c560a7497",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"java": [
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/CulinaryAppliance.java",
|
||||
"sha256": "aabb476edecbe0c0f7accd936853a625681b924c47b7800995dfd5da0035358c",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/CulinaryAppliance.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/CulinaryExperience.java",
|
||||
"sha256": "7f658276c4918af0ffac5f4bb9682b5844f520fa70f301999ad97fa115e32367",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/CulinaryExperience.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/CulinaryHeat.java",
|
||||
"sha256": "b9294332154a1110d94f5110d693109e7c6c35ad6cdb5332c1af833d0c91a2fb",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/CulinaryHeat.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/CookingCauldronBlock.java",
|
||||
"sha256": "334d22224387c7da4ce28bfd0e642bb5e7adb6697ddebd884e21df5d2a84ea27",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/CookingCauldronBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/FermentationBarrelBlock.java",
|
||||
"sha256": "770364f134b8c9ee04be674b1dbe38956f5fa17c91a81ca258d7ea6a8d187dc5",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/FermentationBarrelBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/FryingPanBlock.java",
|
||||
"sha256": "d6ec6cbf4ab52230bcdd6a64c97ceb8a4df33f2b2d717ce7346fe3c79370cffd",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/FryingPanBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/KitchenOvenBlock.java",
|
||||
"sha256": "d9cd55b9e002aab5c2d14d95d59ba46a7731a70d0bbb3d0959f1bf7e3eee1a19",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/KitchenOvenBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/AbstractCulinaryContainerBlockEntity.java",
|
||||
"sha256": "25ec974def75ab1891ddcd3eb150bbacf2a2b7e1c8b2ac30081698fe7afa94d7",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/AbstractCulinaryContainerBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/AbstractTimedCulinaryBlockEntity.java",
|
||||
"sha256": "99f217bc615aa414f41ffeeccc85d68655da48b794b82f8289fe86f93004c8a3",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/AbstractTimedCulinaryBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/CookingCauldronBlockEntity.java",
|
||||
"sha256": "9c7f8145973f570f70e758650f99e174b5625b91e844bbcd1bf417eff1322951",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/CookingCauldronBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/FermentationBarrelBlockEntity.java",
|
||||
"sha256": "feb866fca3848c80e9d06aa9fa38e9f49b8a5b22aa9c7bb5b5f4837ad4abee9a",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/FermentationBarrelBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/FryingPanBlockEntity.java",
|
||||
"sha256": "af102fc1c80600208778d6d2047781b63fa2ebaae2890b71acfc6dfa2af600fe",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/FryingPanBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/block/entity/KitchenOvenBlockEntity.java",
|
||||
"sha256": "0f7c3f6612dee3dbb1b264be3e8a94c55e4f129155f351ea0eb8c3a1639ac463",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/CookingCauldronHud.java",
|
||||
"sha256": "ec67f5180d01e5aa51abf229d1aa35aac325c50e93c3f2386ca194f95cf2e99a",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/CookingCauldronHud.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/FermentationBarrelHud.java",
|
||||
"sha256": "ada21e2c3a268aa5b6b27bf9a16ffe42aeb1e20fd4305e07900e88a1a376d5e2",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/FermentationBarrelHud.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/FryingPanHud.java",
|
||||
"sha256": "e37a353fde43eba54e4e60a98aa8a6ed87a06921f4040faca92dbd694d491304",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/FryingPanHud.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/renderer/FermentationBarrelBlockEntityRenderer.java",
|
||||
"sha256": "adba55ed2154e1f0243bae3bf78247dac24fa79f9cc3de7fbb6e522f700f5109",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/renderer/FermentationBarrelBlockEntityRenderer.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/renderer/FryingPanBlockEntityRenderer.java",
|
||||
"sha256": "13a30fee522d9b2efda13a763198b285f555bf3d011758780d27c19d9627249d",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/renderer/FryingPanBlockEntityRenderer.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/renderer/state/FermentationBarrelRenderState.java",
|
||||
"sha256": "1adc65fe528cc9ea1da8e43350f8062c4bec0bb31cf03ee54914776acd9d9647",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/renderer/state/FermentationBarrelRenderState.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/renderer/state/FryingPanRenderState.java",
|
||||
"sha256": "26eb76e9d6776d34ac9abb0769315d41f5a9574bf3415c2efd16b7b2c33c1b82",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/renderer/state/FryingPanRenderState.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/screen/KitchenOvenScreen.java",
|
||||
"sha256": "f619f2b95a76193e21db4e2cbed4fa64ac2848aedaed042bee4fcfac54ea5842",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/screen/KitchenOvenScreen.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/client/screen/RedstoneMillScreen.java",
|
||||
"sha256": "5ebc44972d34ea18b7982592b47a02ccd01fadd550bbe616e970b80cba1f9086",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/client/screen/RedstoneMillScreen.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryBatching.java",
|
||||
"sha256": "9532bf15306e21e09da4e90f19563284c0d3889f8d4382ad46e23b6daf6274a1",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/recipe/CulinaryBatching.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryPartialMatching.java",
|
||||
"sha256": "8cf3e2d74e24b9d83b8e9bdb36a216ba2745e1ab07bd2cbd55fb442b1a0f2824",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/recipe/CulinaryPartialMatching.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryProcessRecipe.java",
|
||||
"sha256": "57a51a52d4732fd8f7df38b02ea6bafecf3290c88f3146fe8c44892688736c11",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/recipe/CulinaryProcessRecipe.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryRecipeInput.java",
|
||||
"sha256": "d733004754aa377752118d8dd965a9025daafff2174bab76678940c4cf9fd79a",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/recipe/CulinaryRecipeInput.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/culinary/recipe/CulinaryRecipeTypes.java",
|
||||
"sha256": "5227e6e3314502298ccba4cad95060b83604041eb0df53aac4769de1fe4fbe3c",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/culinary/recipe/CulinaryRecipeTypes.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/machine/FoodPressBlock.java",
|
||||
"sha256": "aeb6210329b66323de012616fcb8f4e360dcd990a1b930347a6fb20110c6eeda",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/machine/FoodPressBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/machine/FoodPressBlockEntity.java",
|
||||
"sha256": "1d0c93c1982fa1197fe9c56fd2a8e94c2109a29b2efc3bd5d6ab1e5e22a3d34e",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/machine/FoodPressBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/machine/FoodPressContent.java",
|
||||
"sha256": "2aab91dd3b96d1fd2e759cb984bea6593e99a205ee68d0c7c00912329130e9e7",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/machine/FoodPressContent.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/machine/RedstoneMillBlock.java",
|
||||
"sha256": "8dbd9e15609b4c07a27af0997b5c2e15f7bce49e32eedf3cc3e266f9685c09ef",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/machine/RedstoneMillBlock.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/machine/RedstoneMillBlockEntity.java",
|
||||
"sha256": "31c750f9727430d00a80e1a65558ecc0471300bed5f9fbd4716a500d5d2274aa",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/machine/RedstoneMillBlockEntity.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/menu/KitchenOvenMenu.java",
|
||||
"sha256": "4f222eb436ea88785e82c927682588530b44db7b5f86dca341c8cfb88ddd19ba",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/menu/RedstoneMillMenu.java",
|
||||
"sha256": "7ca7c4d77c48121f9c81fecacf9b09f14964e7ac33a65d0c0688852a73425a2a",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/menu/RedstoneMillMenu.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/recipe/FoodPressingRecipe.java",
|
||||
"sha256": "fbc8cf4b452e54662c4fc469aa16e14880f86110339d9388b5dba27469ba5c5d",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/recipe/FoodPressingRecipe.java"
|
||||
},
|
||||
{
|
||||
"source": "src/main/java/fr/koka99cab/sanctuary26/itsalive/recipe/RedstoneMillingRecipe.java",
|
||||
"sha256": "a0d011d89f46f38e8fa384299f73a7cab44fd3189600e041fb9aa20ea2ff612d",
|
||||
"destination": "mods/sanctuary/src/main/java/fr/koka/sanctuary/cuisine/recipe/RedstoneMillingRecipe.java"
|
||||
}
|
||||
],
|
||||
"assets": {
|
||||
"src/main/resources/assets/itsalive/blockstates/olive_block.json": "998c5fa53bb09b44ce0cff864ca0a2ea7717b79efbd08637d820449a99e7ed69",
|
||||
"src/main/resources/assets/itsalive/blockstates/food_press.json": "1f15baab1f3b678b2e3650b9c6af4bcc3404b9af0a3ade61eaf3a66049469f91",
|
||||
"src/main/resources/assets/itsalive/blockstates/grape_block.json": "ed05b5c4e237b61ca0716a90bd7c57bcfa60aa2e40230481d86345862dd03622",
|
||||
"src/main/resources/assets/itsalive/blockstates/fermentation_barrel.json": "47db1631c9bad0b690f04e7cd78f1c1d219ad1a2c4aff7d535dea8c6ae7e06a1",
|
||||
"src/main/resources/assets/itsalive/blockstates/cooking_cauldron.json": "c79479d63942c3ae6ad360996c0e3e020575565dbc69c6e5c7f110c7225535a5",
|
||||
"src/main/resources/assets/itsalive/blockstates/frying_pan.json": "c2de84cf795042a16faad51e61d4afe900571227cd0585624e8a994d2deaffdf",
|
||||
"src/main/resources/assets/itsalive/blockstates/redstone_mill.json": "9cf9223ea7fb6fa2fa8df8a3fec63a60cc5849425b32ab3aa97c08b5a106eeb0",
|
||||
"src/main/resources/assets/itsalive/blockstates/kitchen_oven.json": "d9ef62ee1e5fa7abec636166528628fc265de2241a0f3234e919b2bea5bbe0a8",
|
||||
"src/main/resources/assets/itsalive/blockstates/tomato_block.json": "2acb0a87767691a0247788bdbfd744d7d06c03bf817e4dcaea48d6f86e3a6f6d",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_7.json": "773e1389d1dfd67e9bfa1eb0dc21052e126aeb3bee29a7ec4be886867b95e17f",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_3.json": "b7becfd2e2691d6b36d2a3cf2a315c96fa6db87709e0d2741e535da17f10051e",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_7.json": "3eac8754b3426624da4be9f67d201619231491702611a2f037490c8b48a18e6d",
|
||||
"src/main/resources/assets/itsalive/models/block/olive_block.json": "de9fa7bb7246ff9aec219f9ab9de43a219c9d6ee684bfc7fae66f6038c3fb983",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_6.json": "5d864c423dd19ac779634899650c53562a22bb1ab175b93c28c8987329a22660",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press.json": "615b598729b5462a7e4cc654f79ebce901b6d4e82d89b1895b03945f30ca2d35",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_2.json": "23d6ec4aa8e21eb63561b8132d441fb76a5f6dce152a3ee5ce2289c077d4023f",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive.json": "b8df7bb819163a91ab6f7911743126c1583f8aa453b0b396cd6f6ce2abd3b668",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_6.json": "869b096b5ae751bb6020ed3ef42ff998b28f79d8f44fac0a05c40561db57b4a5",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_5.json": "0b803d06608cfa324bb6e35ac301a59ec86b701e96f2fff9a585835924ddc0e4",
|
||||
"src/main/resources/assets/itsalive/models/block/grape_block.json": "195114f18de907448c9797aa539c4c5792c48efd17fff0f0a2779358eafcee73",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_1.json": "9376fecd6122b37ff4c6aebfe09ed798326fa932a9c28f41b83cc6dd28d0b89a",
|
||||
"src/main/resources/assets/itsalive/models/block/redstone_mill_on.json": "50009556a95a7db5bdce15622208a2931ed4a2a6e1fd3457c0be2754b495b78c",
|
||||
"src/main/resources/assets/itsalive/models/block/fermentation_barrel.json": "0ccb53d3f86eb2b7b4932e29149a5e210b54324c07c517c0aa79d73e6417a8dd",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_1.json": "7c5d3b41782ad57688a1209e83d15e58d145980423acc44d93e29baec0c3a961",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_9.json": "dfbbc138ee4c0851acc220ab7c1fc63498b12e39f1eb3a75c3c2d2b582b1574d",
|
||||
"src/main/resources/assets/itsalive/models/block/kitchen_oven_on.json": "326567713bae7ed35dad107838b81b1e2b00b9a3a67a644782eb0a1323d2fa1e",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_8.json": "ee4b305779c34e5743728ef78dd964d3aa8302526a2bbb4ffe05c6efaa29c8f5",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_4.json": "e7f95e5ab13f1b98c18fbd2563925bc9c9adbd793d129c7752fe5d2b66c2a33c",
|
||||
"src/main/resources/assets/itsalive/models/block/cooking_cauldron.json": "f9fcfdbb09a63ee6437b5494009a3d3f727291cf356f502a1e8a5aa30f972968",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_3.json": "7fd398a8089e5fa5f7d0b12f2799c6e960d03abefd6e186d5ff7f11e7f50a3f6",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_7.json": "c1042823e4fa94c5635e12f446a6bf7eb48541edce0bfd1661aa441a46d74c23",
|
||||
"src/main/resources/assets/itsalive/models/block/frying_pan.json": "9f9b5b1c7ae19b350e1d4c8f973b9987c8efb0a0f218fcf31d6d035957e1d88c",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_3.json": "eb3189f1fa68a3f9cda9f801c83ec55fc1c7a81c4369c139e1218e88d38b62dd",
|
||||
"src/main/resources/assets/itsalive/models/block/redstone_mill.json": "3d0be0d018982089aa3b9214abd1cc2c1b89ccc6f021f5eef57560feb1cc9a0f",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_2.json": "7cfe14676d665c671cebc443d4d5e17db441526ff76db1a2740abdebe77259a4",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape.json": "e5b07ea4d0c7c0303c2a38bae068a1dff16293df894a59d09b3cf57fdbe434a7",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_6.json": "8d6019eb3a441d91a34e6ceeb6e7d482431e48f6d42536b015fc42281e1f6764",
|
||||
"src/main/resources/assets/itsalive/models/block/kitchen_oven.json": "e9b8327dd6022313935edee4c8daa1af0a0071c7d8436f96fa94c46de9eee14d",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_2.json": "7db27db21ebedce3f5cf5a3801ec9ecb908ca590a3e23e2375243e8195988c95",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_9.json": "a29d412b4e576d37962194aa61b1d676399741500d9e29d171536ef352cc2079",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_5.json": "d2627140a4f52fdc59e7773e0b5f524ed91e141b7026805a78f21009fbff73ed",
|
||||
"src/main/resources/assets/itsalive/models/block/cooking_cauldron_coffee.json": "818a1e10296a651845621cf9c44647fe5fac1b37ba358c88dde445714dc98119",
|
||||
"src/main/resources/assets/itsalive/models/block/tomato_block.json": "bec799c63bd80b6c69a3ddff317d688c717fb89cb25d43783194f9f2426ff2d3",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_5.json": "953f2e19c4997927d524aa5e768fd02b36170baa43ffa52572a889fefe431417",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato_1.json": "3a6f5d0cf5747a3441ed8171ea845240bd272f46a1ffe634a2058699b1d661aa",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_9.json": "767e70ea72263ffbb6f1812cf84ec90bcd2001254e5ae3e88c2280fd9fdef62d",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_8.json": "9d1d33f89591e75353fcbb083164328e0961c2d97f678724813d3e5015334397",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_tomato.json": "a590f64f1042ca751cd81717cc184d53a761c5daf2667004b1a0a6d8e0bc5b21",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_4.json": "5730a951afc7bf294a082908e9cdb6617c48159fed64d2d79f400cf65c9769a9",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_grape_4.json": "140e7b9e9703c56f897a469e70e6c082ce5697e0c1a13210184c2980e8e0d325",
|
||||
"src/main/resources/assets/itsalive/models/block/food_press_fill_olive_8.json": "a751e6738d5a4ae00f2a9c7b9d0035ecf6bb5c989a1733e5fc3471ba742330dc",
|
||||
"src/main/resources/assets/itsalive/models/item/olive_block.json": "84b2fad0a5e2ce33e1798786a79a436246a75836acd98828e52f1bd393193314",
|
||||
"src/main/resources/assets/itsalive/models/item/food_press.json": "a4a57208fd428939b7b3d042335dcec6c45f8e9de190c9cabd8bbc831a011ce1",
|
||||
"src/main/resources/assets/itsalive/models/item/grape_block.json": "92d78de7a02a42fbe015e7aee1338052ff29701d37fe6c7906d6de611c4508f1",
|
||||
"src/main/resources/assets/itsalive/models/item/fermentation_barrel.json": "c9e3db73daee99a2a3efca454541e8dd5f2f6d9e1c40b3d0eb5f222914082533",
|
||||
"src/main/resources/assets/itsalive/models/item/frying_pan.json": "5477410d6dd022b72ea0ebe7306dd0bf86ba6bf6357bec67ec265c654801d3d8",
|
||||
"src/main/resources/assets/itsalive/models/item/redstone_mill.json": "b19fb1874697283774f774ca1cb57c817a55ce55b6ae3ed032d61d2b949e6151",
|
||||
"src/main/resources/assets/itsalive/models/item/kitchen_oven.json": "f9dd37260005e466276b4c9002b8093f8446df854369bb7b0310417ad50881ed",
|
||||
"src/main/resources/assets/itsalive/models/item/tomato_block.json": "5956b5a5a866fade827ad6088dda8cd6db341d702896cea1c425809abe424c9b",
|
||||
"src/main/resources/assets/itsalive/items/olive_block.json": "a88c83d92ff0b115dc6bd8c37fb1a46a93d1722520989c62b39f3809279f9987",
|
||||
"src/main/resources/assets/itsalive/items/food_press.json": "5fcd04addfe5cf076340f639c78cf63c77bc04988357328dd2877695b09f89dc",
|
||||
"src/main/resources/assets/itsalive/items/grape_block.json": "068e0859a395f620d10ae8df4c42871ffe0e70b94d2a383adb61d717843edbb1",
|
||||
"src/main/resources/assets/itsalive/items/fermentation_barrel.json": "dcc8d9be395cb93c4545481e675f8159e48facca2eccdc8f34de6a012e5ff719",
|
||||
"src/main/resources/assets/itsalive/items/frying_pan.json": "de51f0130cb1107c4d57db273ba581519ed35fef1c911f80793746cac2b11717",
|
||||
"src/main/resources/assets/itsalive/items/redstone_mill.json": "3c22f1b4e085d4c0742caae943a8cbf90ce6b5523cb27bcf346ca262a8726f6b",
|
||||
"src/main/resources/assets/itsalive/items/kitchen_oven.json": "a20e4385c41fcc3045fcc4ce11d4749980860a5221458df2ca550e7535169610",
|
||||
"src/main/resources/assets/itsalive/items/tomato_block.json": "bd7e4e2e8cf433d5bf6180134ae81539f1ee72f75f7f60b373cae98e37f9b839",
|
||||
"src/main/resources/assets/itsalive/items/failed_dish.json": "f0331dab307785acc01ce34922ef0e8bc6751245f356c9d19f1442908894ae72",
|
||||
"src/main/resources/assets/itsalive/models/item/failed_dish.json": "9ea5d1fa8a9de8b94fdc14436b0dd33da34a0051672aa42f759f091b3f6075e3"
|
||||
},
|
||||
"recipes": "scripts/data/cuisine.json; scripts/data/kitchen-crafting.json",
|
||||
"crafting": {
|
||||
"src/main/resources/data/itsalive/recipe/fermentation_barrel.json": "bce931d76ef4c465c757f16ad7ee0db71838a77b39d3540cec327b7bfd72cde9",
|
||||
"src/main/resources/data/itsalive/recipe/food_press.json": "431bbd78c482085ebde27a5501db97d4c999bf6b91524fba22793e9f4085caa3",
|
||||
"src/main/resources/data/itsalive/recipe/frying_pan.json": "e99e9a0b514642897fa8e82f12847fca618350d86359fd8786c6f1561c772cac",
|
||||
"src/main/resources/data/itsalive/recipe/grape_block.json": "625b20deab5f4debfa1c08febf5f752e705ee015f2c796accf95e21945b0b89b",
|
||||
"src/main/resources/data/itsalive/recipe/grapes_from_block.json": "870393e4a147f99440cf2742c8cd852b403caac85dcd9ac4bfef1ccbbfddec6c",
|
||||
"src/main/resources/data/itsalive/recipe/kitchen_oven.json": "9f2ccb182f907f2d0932fb53b21226afb9c61faf280089703b6a04b6fe66f3be",
|
||||
"src/main/resources/data/itsalive/recipe/olive_block.json": "35a5c6f87f4483837242598c58367d986c475f8fa44d6bca513383e4b58ee60c",
|
||||
"src/main/resources/data/itsalive/recipe/olives_from_block.json": "23d7c22b40bda59e717b98254cfbf73c32c1cb8e03f9a605235c680b061122d0",
|
||||
"src/main/resources/data/itsalive/recipe/redstone_mill.json": "cedd2025ff9961084f1e0818c2d45b4696e6c0108fda25847b07df8fc62a9425",
|
||||
"src/main/resources/data/itsalive/recipe/tomato_block.json": "994e0f68beb5ea3b8811912d3eef46a6b7f0a7dc48af2e05c2a33e4fb87fe598",
|
||||
"src/main/resources/data/itsalive/recipe/tomatoes_from_block.json": "eb7fa7e229187b4439e88f1e95f143ed999533f00415db06768f537c1f01e5ee"
|
||||
},
|
||||
"adaptations": [
|
||||
"namespace sanctuary; Minecraft 26.3 APIs and exact cooking-fuel components",
|
||||
"native cauldron liquid accounting; ingredient containers; timed fermentation",
|
||||
"JEI six physical categories; native cauldron item icon added",
|
||||
"equipment crafts: iron/copper replace unavailable silver; oven uses iron/bricks/crafting table/furnace"
|
||||
],
|
||||
"verification": {
|
||||
"version": "beta.304",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.304.jar",
|
||||
"sha256": "d24bac38e1177d785cd23a0ebe702c20e6a36dda160a0b4f366d23e9e7f4fa09",
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 172,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_classes": 43,
|
||||
"server_required": 72,
|
||||
"kitchen_scenarios": 17,
|
||||
"physical_recipes": 80,
|
||||
"device_blueprints": 91,
|
||||
"client_vulkan": {
|
||||
"kitchen": "build/kitchen304-client.log",
|
||||
"cuisine": "build/kitchen304-cuisine303-client.log",
|
||||
"agriculture": "build/kitchen304-agriculture300-client.log"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,190 @@
|
||||
# IA-04 / IA-05 / IA-07 / IA-08 — appareils culinaires, beta.304 locale
|
||||
|
||||
Précision locale beta.311 : le chaudron attend désormais un geste au bâton et
|
||||
ne produit plus de plat raté. Voir [fonctionnement et continuité](cauldron-beta311.md).
|
||||
|
||||
Précision locale beta.310 : la poêle se pose désormais en piles de une à
|
||||
quatre, avec une recette commune et les ingrédients de chaque portion. Voir
|
||||
[comportement actuel et continuité](pan-stacks-beta310.md). Le reçu ci-dessous
|
||||
décrit les vérifications historiques de beta.304.
|
||||
|
||||
> Étape historique : [beta.305 remplace la presse par le piétinement et les
|
||||
> pistons directement sur les fruits](crushing-beta305.md), puis
|
||||
> [beta.306 rend le moulin manuel, sans combustible](mill-beta306.md).
|
||||
> [beta.308 précise le cycle de la cuisinière et sépare aperçu et plats cuits](oven-beta308.md).
|
||||
> Cette page conserve le résultat vérifié de beta.304.
|
||||
|
||||
|
||||
Préparation du 28 octobre 2026 sur **`codex/itsalive-26-3`**, après beta.303.
|
||||
Le créateur a choisi de porter **recettes et appareils culinaires ensemble**.
|
||||
Aucune publication, installation, mise à jour de canal, de Prism ou de serveur.
|
||||
Le checkout historique 26.2 reste une référence en lecture seule.
|
||||
|
||||
## Résultat jouable
|
||||
|
||||
Les six appareils sont enregistrés pour Minecraft **26.3**, Fabric API
|
||||
**0.160.5+26.3**. Ils utilisent les textures déjà importées, des inventaires
|
||||
serveur, les sauvegardes natives, les comparateurs et les entonnoirs.
|
||||
Aucun onglet créatif supplémentaire : les dix nouvelles entrées d'objets
|
||||
rejoignent **Nourriture et boissons**. Les semences restent dans Naturel.
|
||||
|
||||
| Appareil | Geste et fonctionnement | Recettes physiques |
|
||||
| --- | --- | ---: |
|
||||
| Poêle | Poser, ajouter un ingrédient par clic ; Maj + clic pour retirer le plat ou le dernier ingrédient. Contenu visible dans le bloc entité. Chauffe par dessous. | 26 |
|
||||
| Chaudron | Jeter un aliment reconnu dans un chaudron vanilla rempli d'eau pour commencer ; ajouter ensuite par clic ou jet. Clic pour récupérer. | 19 |
|
||||
| Cuisinière / four de cuisine | Ouvrir la grille 3 × 3, disposer les ingrédients sans forme, ajouter du combustible et attendre le résultat. | 13 |
|
||||
| Tonneau de fermentation | Ajouter par clic, retirer à main vide. Délai historique conservé et affiché ; le temps du monde continue de compter lorsque le chunk est déchargé. | 10 |
|
||||
| Moulin à redstone | Interface entrée / combustible / sortie, durées historiques ; le combustible suit les composants natifs du four 26.3. | 9 |
|
||||
| Pressoir | Compacter neuf fruits, placer le bloc contre le pressoir et pousser avec un piston horizontal alimenté, depuis l'un des quatre côtés. Récupérer les portions avec le bon récipient. | 3 |
|
||||
| **Total** | Catégories dédiées dans JEI, avec ingrédients, résultat et durée pour les procédés temporisés. | **80** |
|
||||
|
||||
La poêle est un bloc entité bas qui peut être posé sur les surfaces usuelles,
|
||||
sans condition d'ancrage supplémentaire. Ce port conserve sa forme historique ;
|
||||
il n'ajoute pas une pose murale, une orientation libre ou un nouveau modèle de
|
||||
poignée. Ces améliorations éventuelles de IA-07 restent ouvertes.
|
||||
|
||||
Poêle et chaudron laissent **30 secondes de chauffe** pour assembler un mélange.
|
||||
Une poêle avec quatre positions d'ingrédients distinctes peut commencer après
|
||||
3 secondes de stabilité. Un gros tas d'œufs ne compte pas comme quatre
|
||||
positions : le joueur peut encore ajouter du lait pour une omelette.
|
||||
Sans chaleur, le délai d'assemblage et la cuisson sont suspendus.
|
||||
Un mélange invalide à l'échéance donne un **plat raté**, en consommant une unité
|
||||
de chaque ingrédient présent et en conservant ses récipients.
|
||||
|
||||
Les sources de chaleur sont le feu, la lave, un feu de camp allumé, un four
|
||||
vanilla allumé ou une cuisinière allumée. Une lampe de redstone ou une propriété
|
||||
`lit` quelconque ne suffit pas. Le moulin brûle du combustible ; son nom
|
||||
historique ne signifie pas qu'un signal redstone remplace ce combustible.
|
||||
|
||||
## Eau, portions et récipients
|
||||
|
||||
Le chaudron conserve séparément ses **1 à 3 niveaux d'eau vanilla**. Ils servent
|
||||
aux recettes comme le café, sans créer de bouteilles. Un niveau paie une dose
|
||||
d'eau ; trois niveaux et trois cafés moulus donnent trois cafés. Les recettes
|
||||
sont traitées en lots limités par les ingrédients et la place en sortie.
|
||||
Récupérer le dernier plat ou annuler le mélange rétablit le chaudron vanilla,
|
||||
avec exactement l'eau restante. Les potions à effets et les objets étrangers
|
||||
ne sont pas des ingrédients admis.
|
||||
|
||||
Les bouteilles et seaux réellement utilisés sont rendus par la transformation.
|
||||
L'ananas rend sa couronne. Les mélanges ratés rendent aussi ces récipients.
|
||||
Les retours du chaudron sont éjectés avec une courte protection contre leur
|
||||
réabsorption. Le pressoir donne neuf portions par bloc : bol pour la pulpe de
|
||||
tomate, bouteille pour le moût de raisin et l'huile d'olive. Une portion
|
||||
conditionnée conserve le récipient payé dans son composant natif de retour.
|
||||
Une recette qui consomme cette portion rend ce même récipient.
|
||||
|
||||
Pour automatiser le pressoir, placer un inventaire/entonnoir dessous et fournir
|
||||
les récipients correspondants par dessus. Seules les portions conditionnées
|
||||
sortent par le bas ; un réservoir plein préserve le bloc de fruits devant lui.
|
||||
Poêle, chaudron et tonneau acceptent les ingrédients par dessus/côtés et sortent
|
||||
les résultats par dessous. Cuisinière et moulin prennent leur combustible par
|
||||
les côtés et les ingrédients par dessus. Les récipients restés dans leurs
|
||||
cases sont récupérables dans l'interface ou en vidant l'appareil.
|
||||
|
||||
## Recettes et continuité avec beta.303
|
||||
|
||||
Les **92 recettes historiques** restent couvertes. Les 46 préparations crues
|
||||
et les identifiants d'objets déjà ajoutés restent utilisables au four/fumoir.
|
||||
Les alternatives manuelles de cuisson et de mouture sont conservées.
|
||||
Les dix identifiants `sanctuary:ferment_*` désignent désormais les procédés du
|
||||
tonneau : leur ancienne fabrication instantanée disparaît. Les trois
|
||||
`sanctuary:press_*` deviennent des recettes physiques de pressoir ; neuf fruits
|
||||
se compactent en bloc, et ce bloc peut aussi se décompacter à la table. Il n'y
|
||||
a plus deux résultats concurrents pour la même grille de neuf fruits.
|
||||
Les 67 autres procédés physiques portent le préfixe `sanctuary:physical_*`.
|
||||
|
||||
Onze recettes donnent les cinq appareils fabriqués, les trois blocs de fruits
|
||||
et leurs trois décompactages. Le chaudron de cuisine commence depuis le bloc
|
||||
vanilla et rend un chaudron vanilla à la casse. La cuisinière coûte **trois
|
||||
lingots de fer, quatre blocs de briques, une table de fabrication et un four** :
|
||||
|
||||
```text
|
||||
Fer Fer Fer
|
||||
Briques Table Briques
|
||||
Briques Four Briques
|
||||
```
|
||||
|
||||
Le pressoir utilise du fer à la place de l'ancien argent indisponible ; le
|
||||
moulin utilise du cuivre à sa place. Les noms et aides d'interface sont FR/EN.
|
||||
La pâte d'olive historique sans recette n'est pas ajoutée comme objet orphelin.
|
||||
|
||||
Les cultures enseignent également les recettes d'appareils et les procédés
|
||||
physiques dans la progression et JEI. Les nouvelles entités sont additives ;
|
||||
aucun identifiant agricole n'est renommé, aucun monde existant n'est modifié,
|
||||
aucune génération n'est activée et aucune sauvegarde 26.2 n'est convertie.
|
||||
Le saucisson, le séchoir, les nouvelles recettes inventées et la génération
|
||||
naturelle restent dans leurs tickets. La cuisinière possède une grille de
|
||||
recettes culinaires ; le Fourneau multibloc existant garde ses propres usages.
|
||||
|
||||
## Provenance et vérifications
|
||||
|
||||
Le port adapte **36 fichiers Java** de `26.2/itsalive`, commit
|
||||
`26f2c2a0061619df1f146f9081d6740c560a7497`, GPL-3.0-or-later.
|
||||
[Reçu des sources](kitchen-beta304-sources.json), modèles historiques dans
|
||||
`scripts/data/kitchen-assets.json`, recettes d'équipement adaptées dans
|
||||
`scripts/data/kitchen-crafting.json`. Les 92 recettes originales et leurs
|
||||
empreintes restent dans `scripts/data/cuisine.json`.
|
||||
|
||||
Les adaptations 26.3 concernent notamment les codecs de templates d'objets,
|
||||
les combustibles à composants, les menus, le rendu de blocs entités, la
|
||||
synchronisation Fabric des recettes et les six catégories JEI. Aucun PNG
|
||||
agricole ou culinaire n'est retouché.
|
||||
|
||||
`check build assemblePack` passe en **2 min 51 s**, avec **72 tests serveur
|
||||
requis réussis**, dont **17 scénarios pour les appareils**. Ils chargent les
|
||||
80 recettes, font réellement cuire les 58 procédés chauds et tourner les neuf
|
||||
recettes du moulin, vérifient le délai de fermentation et son rechargement,
|
||||
l'eau vanilla, les récipients, les mélanges ratés, les quatre côtés du pressoir,
|
||||
la capacité de sortie, le conditionnement, les 11 fabrications et la découverte
|
||||
des 91 plans d'appareils/procédés. La casse répétée rend une seule fois les
|
||||
inventaires des six appareils. Les régressions cuisine, cultures, vanille et
|
||||
progression sont incluses.
|
||||
|
||||
Le parcours **Vulkan avec Sodium 0.9.2** passe en **1 min 8 s**. Il vérifie un
|
||||
vrai paquet d'insertion dans la poêle, les ticks de cuisson, les contenus
|
||||
synchronisés, les **233 états de blocs et dix modèles d'objets**, les menus
|
||||
FR/EN aux échelles GUI 2/3/4 et les **six catégories / 80 recettes dans JEI**.
|
||||
Une fermeture/réouverture réelle conserve les six appareils et leurs contenus,
|
||||
y compris le délai du tonneau ; le vin se termine une fois après le temps
|
||||
requis. Les échecs graphiques repérés pendant le port — icône de marmite,
|
||||
libellé et références des sprites de moulin — sont corrigés.
|
||||
|
||||
La régression cuisine Vulkan passe en **37 s** : les 196 étapes du catalogue
|
||||
restent indexées dans JEI, avec l'eau correcte ; 129 objets, table, fumoir et
|
||||
rechargement sont vérifiés. La régression agricole Vulkan passe en **32 s** :
|
||||
313 états, 48 objets, 20 cultures, les arbres et le caféier, onglets FR/EN
|
||||
GUI 2/3/4 et rechargement réel de 173 états agricoles.
|
||||
|
||||
Le JAR contient les **432 JSON de cuisine**, **172 JSON d'appareils** et
|
||||
**376 JSON agricoles** générés, identiques aux générateurs, ainsi que les
|
||||
43 classes culinaires et les notices courantes. Les **343 PNG importés**
|
||||
restent identiques, dont les 38 fichiers fournis ; les 13 PNG de vanille sont
|
||||
toujours en 16 × 16. Les copies du JAR packwiz client et serveur sont
|
||||
identiques au binaire vérifié. Le template conserve les mêmes textures
|
||||
culinaires/agricoles/vanille et notices.
|
||||
|
||||
SHA-256 de `sanctuary-beta.304.jar` :
|
||||
|
||||
```text
|
||||
d24bac38e1177d785cd23a0ebe702c20e6a36dda160a0b4f366d23e9e7f4fa09
|
||||
```
|
||||
|
||||
Journaux et reçu de vérification dans `build/kitchen304-*`. Les captures du
|
||||
dernier parcours restent dans le dossier de test client ignoré.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=kitchen304,cuisine303,vanilla301,agriculture300,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryKitchen304ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=kitchen304,cuisine303 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Les tests client utilisent un monde de développement neuf, graine **304**.
|
||||
La validation graphique cible uniquement Vulkan. Les tests des longues durées
|
||||
avancent explicitement l'horloge de leur monde de test ; ils ne prétendent pas
|
||||
avoir attendu plusieurs jours de jeu en temps réel.
|
||||
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"version": "beta.318",
|
||||
"instance": "/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1",
|
||||
"profile": "/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1/sanctuary-local-packs/beta.318",
|
||||
"source_commit": "980544e27947b490684fb9dd1b0cb9a1eac4e3b1",
|
||||
"jar_sha256": "5b8d6fff72c3128ceac085a9d71b493bbda13a0dbbe42ffdd3e8dc2fda3a632b",
|
||||
"isolated_passes": 2,
|
||||
"personal_passes": 2,
|
||||
"passes_identical": true,
|
||||
"protected_files_unchanged": 1018,
|
||||
"optional_choices_preserved": true,
|
||||
"launcher_changes": "Only the two PreLaunchCommand URL arguments; all other settings preserved.",
|
||||
"installer_unchanged": "9e2912fdd05e5c23721acd58cd5c61bbf13061e453627e8f4df9a4c53f7aa875",
|
||||
"bootstrap_unchanged": "a8fbb24dc604278e97f4688e82d3d91a318b98efc08d5dbfcbcbcab6443d116c",
|
||||
"backup": {
|
||||
"instance": "/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1",
|
||||
"backup": "/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1/sanctuary-backups/before-local-beta318-20261030T053736Z",
|
||||
"protected_files": 1018,
|
||||
"backup_sha256": "56158b90e8b6b8ec9040129b1ee8077b0764f73aed1e7ba6afe946294b7f9327",
|
||||
"backup_bytes": 272635407
|
||||
},
|
||||
"personal_world_opened": false,
|
||||
"published": false,
|
||||
"public_channel_modified": false,
|
||||
"remote_server_modified": false,
|
||||
"web_modified": false,
|
||||
"date": "2026-10-30",
|
||||
"verification": "Actual packwiz installer, two isolated passes then two personal passes; no game or personal world launched."
|
||||
}
|
||||
@@ -0,0 +1,78 @@
|
||||
# beta.318 — installation locale pour les essais
|
||||
|
||||
Installation du **30 octobre 2026**, même branche `codex/itsalive-26-3`.
|
||||
La demande autorise l’instance locale et exclut toute publication.
|
||||
|
||||
## Installation vérifiée
|
||||
|
||||
L’instance Prism existante **Sanctuary Beta**, dossier historique
|
||||
`Sanctuary-0.1.0-alpha.1`, passe de beta.315 à **beta.318**. Aucune nouvelle
|
||||
instance n’est créée ou importée. Un seul JAR Sanctuary parmi les neuf mods ;
|
||||
les huit autres JAR, les choix des mods facultatifs, Minecraft 26.3, Fabric
|
||||
0.19.5, Java, l’installateur au logo et le lien FFmpeg sont conservés.
|
||||
|
||||
Le JAR installé correspond exactement au binaire de
|
||||
[la préparation beta.318](dried-cuisine-beta318.md), source `980544e27947b490684fb9dd1b0cb9a1eac4e3b1` :
|
||||
|
||||
```text
|
||||
5b8d6fff72c3128ceac085a9d71b493bbda13a0dbbe42ffdd3e8dc2fda3a632b
|
||||
```
|
||||
|
||||
Cette préparation avait réussi 189 tests serveur et le parcours Vulkan/Sodium.
|
||||
La présente installation vérifie les fichiers et la commande de pré-lancement ;
|
||||
aucun jeu ni monde personnel n’est ouvert pour la prouver. Pour essayer les
|
||||
nouvelles recettes et les coups épicés, lancer **Sanctuary Beta dans Prism en solo**.
|
||||
Les appareils restent autoritaires côté serveur ; aucun serveur distant n’est mis à jour.
|
||||
|
||||
## Profil de test local
|
||||
|
||||
Un profil autonome est conservé dans le dossier de l’instance :
|
||||
|
||||
```text
|
||||
sanctuary-local-packs/beta.318/pack.toml
|
||||
```
|
||||
|
||||
Il contient le manifeste, l’index vérifié, les métadonnées inchangées des
|
||||
huit dépendances et le JAR Sanctuary local. Le vrai installateur packwiz lit
|
||||
ce profil depuis le disque ; aucun serveur HTTP ni accès au worktree n’est
|
||||
nécessaire au lancement. Le JAR est une entrée directe de l’index local.
|
||||
|
||||
Seuls les deux arguments d’URL `PreLaunchCommand` de `instance.cfg` sont
|
||||
remplacés par le chemin cité `"$INST_DIR/sanctuary-local-packs/beta.318/pack.toml"`.
|
||||
Le bootstrap, `--bootstrap-no-update`, les autres arguments et toutes les
|
||||
lignes de configuration restent inchangés. Les lancements restent donc sur
|
||||
beta.318 pour ces essais, au lieu de reprendre la version du canal public.
|
||||
La commande publique d’origine est sauvegardée ; son retour sera effectué
|
||||
lors d’une mise à jour publique compatible demandée.
|
||||
|
||||
## Sauvegarde et contrôles
|
||||
|
||||
Sauvegarde complète, hors de `mods/`, avant toute modification :
|
||||
|
||||
```text
|
||||
/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1/sanctuary-backups/before-local-beta318-20261030T053736Z/instance.tar.gz
|
||||
```
|
||||
|
||||
Archive de **272635407 octets**, SHA-256 :
|
||||
|
||||
```text
|
||||
56158b90e8b6b8ec9040129b1ee8077b0764f73aed1e7ba6afe946294b7f9327
|
||||
```
|
||||
|
||||
Le véritable installateur réussit **deux passages dans une copie isolée**,
|
||||
puis **deux dans l’instance personnelle**. Le second passage est à jour,
|
||||
les neuf JAR gardent leurs hashes et aucun doublon Sanctuary ne reste.
|
||||
**1018 fichiers personnels** sont contrôlés identiques avant/après : sauvegardes,
|
||||
réglages, captures, favoris, packs et dépendances. Les métadonnées Minecraft/Fabric,
|
||||
les préférences des mods facultatifs et les outils de lancement restent identiques.
|
||||
Aucune régénération, conversion ou ouverture de monde.
|
||||
|
||||
Aucun push, tag, release, canal public, site, serveur Beta ou autre instance
|
||||
n’est modifié. Les journaux privés sont dans `build/local318/` ; les scripts
|
||||
ponctuels y sont un historique de cette intervention, pas une procédure à rejouer.
|
||||
[Reçu de vérification](local-beta318-verification.json).
|
||||
|
||||
## Livraison publique ultérieure
|
||||
|
||||
La beta.318 est publiée le 30 octobre 2026. Le serveur et le site sont à jour,
|
||||
et Prism a retrouvé le canal public. [Reçu de livraison](release-beta318.md).
|
||||
@@ -0,0 +1,126 @@
|
||||
# MAP-279 — Carte des îles et grand dézoom
|
||||
|
||||
Branche `codex/map-islands-zoom`, base beta.278 ; livraison locale beta.279,
|
||||
Minecraft 26.3, demande du 25 octobre 2026.
|
||||
|
||||
## Résultat
|
||||
|
||||
La limite de zoom liée à une fenêtre de 1 024 blocs disparaît. La molette et
|
||||
les boutons permettent de passer du détail des blocs à une vue de plusieurs
|
||||
îles, puis à une emprise de 67 108 864 blocs, suffisante pour cadrer le monde.
|
||||
Le dézoom reste centré sous le pointeur ; les boutons gardent le centre de la
|
||||
vue. Les zones découvertes éloignées sont affichées ensemble ; les zones non
|
||||
relevées restent inconnues. Le centre de la carte peut rester fixe pendant que
|
||||
le joueur se déplace et reçoit de nouveaux chunks.
|
||||
|
||||
Le message « Carte pleine : nouveaux relevés suspendus » provenait du plafond
|
||||
de 16 384 chunks par couche et habitant. Il passe à **131 072**, sans éviction
|
||||
des découvertes. Une carte ayant atteint l'ancien plafond reprend ses relevés
|
||||
lorsque les chunks sont de nouveau reçus ou revisités. Les parcours non
|
||||
conservés avant ce correctif ne peuvent pas être reconstitués automatiquement.
|
||||
Cette capacité reste bornée ; ce lot ne promet pas une exploration illimitée.
|
||||
|
||||
## Rendu et serveur
|
||||
|
||||
La texture reste de 1 024 × 1 024 pixels. Seize niveaux de réduction regroupent
|
||||
les couleurs par carrés de 2, 4, 8… jusqu'à 65 536 blocs de côté par texel.
|
||||
Le niveau demandé dépend de la fenêtre et du zoom ; le serveur ne transmet
|
||||
que les tuiles de ce niveau dans le viewport, par lots de 64 maximum.
|
||||
Les caches réduits sont calculés à partir des seuls relevés personnels,
|
||||
à la demande, et invalidés par les changements de terrain. Les couleurs de
|
||||
terrain sont privilégiées sur le vide relevé pour garder les petits îlots.
|
||||
Ce choix accentue les très petites zones et n'est pas une mesure de leur aire.
|
||||
|
||||
Les six couches d'altitude restent distinctes. Les positions des joueurs et
|
||||
les marqueurs utilisent la même emprise étendue. La vue opérateur réduit
|
||||
uniquement les chunks déjà chargés, échantillonnés à son budget existant de
|
||||
quatre chunks par tick ; elle reste séparée des relevés personnels.
|
||||
Les permissions, jetons, dimensions et cadences de requête restent contrôlés.
|
||||
L'aperçu Pause conserve son échelle proche et bénéficie de la capacité accrue.
|
||||
|
||||
Les contours des propriétés, Demeure et le clic droit sur un chunk restent
|
||||
accessibles au niveau détaillé ; la vue d'ensemble indique en FR/EN qu'il faut
|
||||
zoomer pour les retrouver. La grille s'efface lorsque ses lignes seraient
|
||||
espacées de moins de huit pixels. L'échelle affiche les blocs par pixel au
|
||||
lieu d'un multiplicateur arrondi à zéro.
|
||||
|
||||
## Persistance et compatibilité
|
||||
|
||||
Les fichiers `data/sanctuary-atlas/<UUID>.json` et leurs six couches gardent
|
||||
le schéma 2, les mêmes coordonnées, couleurs, propriétaires et graines.
|
||||
Les lecteurs historiques de schéma 1 restent identiques. Aucun niveau réduit
|
||||
n'est écrit dans les sauvegardes. La limite de taille acceptée passe de 12 à
|
||||
64 Mio par fichier pour accueillir le plafond élargi ; les écritures atomiques
|
||||
et le refus d'écraser un fichier modifié extérieurement sont conservés.
|
||||
Aucun changement de génération, chunk, identifiant ou expansion.
|
||||
|
||||
Le protocole `sanctuary:atlas_request` ajoute le niveau de détail : mettre à
|
||||
jour client et serveur ensemble. Un retour vers beta.278 exige la copie
|
||||
antérieure des relevés dès qu'une couche a dépassé 16 384 chunks : l'ancien
|
||||
lecteur refuse un tel fichier. Aucune sauvegarde personnelle ni instance de
|
||||
jeu n'est ouverte ou modifiée par ce ticket.
|
||||
|
||||
## Vérification
|
||||
|
||||
Les contrôles purs couvrent les seize réductions, les coordonnées négatives,
|
||||
le bord du monde, la conservation d'un petit îlot, l'invalidation après une
|
||||
construction, les zones inconnues, les bornes des requêtes et les marqueurs
|
||||
lointains. Le schéma 2 est sauvegardé puis relu avec 17 000 chunks ; le plafond
|
||||
courant est aussi atteint sans éviction.
|
||||
|
||||
Commandes de validation :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=map244,map,claims273,claims277,waystones239 \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryMap279ClientTests=true -PsanctuaryClientGraphicsBackend=vulkan \
|
||||
-PsanctuaryClientHeapGb=8 -PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le parcours graphique utilise un monde plat de développement neuf, graine
|
||||
`279`, et cinq relevés de contrôle espacés de 8 192 blocs pour isoler les
|
||||
problèmes d'échelle. Il ne constitue pas une visite des cinq continents
|
||||
Sanctuary ni un benchmark multijoueur. Les déplacements lointains, envois
|
||||
natifs de chunks et changements de blocs utilisent le vrai serveur intégré.
|
||||
Le parcours **Vulkan / MoltenVK 1.4.2 / Apple M1** passe en **1 min 07 s**,
|
||||
avec **11 captures**. Il vérifie les cinq relevés simultanés, une arrivée réelle
|
||||
à 9 008 blocs sans déplacer le centre de la carte ni changer son jeton,
|
||||
un bloc d'or natif nouvellement relevé, un dézoom au-delà de 256 blocs par pixel puis au
|
||||
niveau maximal, l'emprise du monde sur les deux axes, le retour à la couleur
|
||||
exacte du bloc, Pause, FR/EN GUI 2/3/4 et le retrait de l'aptitude Atlas.
|
||||
Une tuile chargée pour le seul contrôle opérateur, à 12 000 blocs, apparaît
|
||||
dans son aperçu réduit sans entrer dans les relevés personnels, puis disparaît
|
||||
quand les commandes sont retirées. Le chargement forcé appartient uniquement
|
||||
à la fixture du monde de test ; les requêtes Atlas n'en créent pas.
|
||||
|
||||
Les captures de vue d'ensemble FR GUI 4, de retour au détail, d'échelle du
|
||||
monde et d'opérateur ont été inspectées. Les cinq petits carrés colorés sont
|
||||
des relevés de contrôle, pas des captures du relief des continents.
|
||||
Captures : `build/map279-screenshots/` ; log :
|
||||
`build/map279-client-vulkan.log`, marqueur `MAP279_CLIENT_PASS`.
|
||||
|
||||
La construction complète et les **20 tests serveur ciblés** passent : relevé
|
||||
natif au-delà de l'ancien plafond, six couches, absence de découverte chez un
|
||||
autre habitant ou un spectateur, droits Atlas, claims, Demeure et Waystones.
|
||||
Le log est `build/map279-check-build-pack.log`. Les contrôles purs du dépôt
|
||||
passent également. La capacité maximale en multijoueur et le coût de sauvegarde
|
||||
d'une couche entièrement remplie ne sont pas mesurés par ce lot.
|
||||
|
||||
|
||||
## Artefacts locaux
|
||||
|
||||
La dernière passe `check build assemblePack` passe en **3 min 54 s**.
|
||||
Le MRpack est exporté et vérifié : intégrité ZIP, Minecraft 26.3, Loader 0.19.5,
|
||||
un seul JAR Sanctuary beta.279 identique au build local, nouvelle pyramide
|
||||
présente, fixtures de tests absentes et trois libellés FR/EN embarqués. Le JAR
|
||||
JEI est également identique au build local ; les trois dépendances distantes
|
||||
gardent leurs empreintes. Reçu : `build/map279-validation.json`.
|
||||
|
||||
- JAR : `mods/sanctuary/build/libs/sanctuary-beta.279.jar`, 16 239 330 octets.
|
||||
- MRpack : `build/Sanctuary-beta.279.mrpack`, 16 593 044 octets.
|
||||
- SHA-256 du MRpack : `1ebe43f559cec3727fea17ed8cf5593702109ceb6151f5e45125beda83cda6c8`.
|
||||
|
||||
Cette livraison est locale : aucun canal, tag distant, serveur personnel ou
|
||||
instance Prism n'est modifié.
|
||||
@@ -0,0 +1,118 @@
|
||||
# MAP-319 — Coupe de la carte à hauteur du joueur
|
||||
|
||||
## Intégration beta.320
|
||||
|
||||
Cette note conserve les preuves du chantier MAP-319 sur le prototype Under.
|
||||
Le [regroupement beta.320](integration-beta320.md) reprend le correctif de carte
|
||||
sans activer les dimensions ni les portails du prototype. Ses tests et artefacts
|
||||
sont vérifiés séparément ; les empreintes historiques ci-dessous ne sont pas
|
||||
celles du nouveau binaire.
|
||||
|
||||
|
||||
Demande du 30 octobre 2026, branche `codex/map-player-height`.
|
||||
Base isolée : `c15b4ba2` (`codex/under-portal-transit`, beta.316), après
|
||||
confirmation du périmètre Island et Under. Les changements locaux
|
||||
insectes/propriétés du checkout initial restent intacts. Les autres branches
|
||||
ont déjà réservé des numéros jusqu'à beta.318 ; ce correctif prend beta.319.
|
||||
|
||||
## Contrat avant implémentation
|
||||
|
||||
L'Atlas et son aperçu de Pause suivent automatiquement le bloc Y des pieds
|
||||
du joueur. Chaque colonne montre le premier bloc cartographiable à ce Y ou
|
||||
plus bas : les plafonds au-dessus sont exclus, une roche traversée par la
|
||||
coupe reste visible. Aucun arrondi aux six anciens paliers. Les boutons
|
||||
manuels de couche sont retirés ; le déplacement horizontal et le zoom restent
|
||||
libres. Un changement de Y vide terrain et calques et renouvelle le token.
|
||||
|
||||
Le serveur continue à ne lire que des chunks FULL, sans chargement distant.
|
||||
Les permissions et la séparation des relevés personnels restent en place.
|
||||
L’Atlas est disponible dans Island (Overworld) et les dimensions Under
|
||||
reconnues par leur type. Les autres dimensions gardent leur refus existant.
|
||||
|
||||
## Contrat de données additif et retour arrière
|
||||
|
||||
Les relevés Under utilisent un sous-dossier distinct
|
||||
`data/sanctuary-atlas/dimensions/<base64url de l’identifiant de dimension>/`,
|
||||
avec les mêmes fichiers par habitant et altitude et la graine de cette dimension.
|
||||
L’Overworld conserve ses chemins historiques. Les transitions ferment l’ancien
|
||||
flux, vident les chunks visibles et changent le token client. Les bannières et
|
||||
trésors historiques restent en Overworld ; les propriétés restent limitées à
|
||||
l’Overworld. Joueurs, pierres de voyage et Demeure restent liés à leur dimension.
|
||||
Aucun portail, accès ou réglage de génération n’est changé par ce ticket.
|
||||
|
||||
Les six fichiers historiques, leurs pixels et leur schéma 2 gardent leur
|
||||
signification. Une coupe exacte supplémentaire utilise le même schéma et le
|
||||
chemin déjà établi `data/sanctuary-atlas/layers/<UUID>/<Y>.json` ; aucun ancien
|
||||
relevé n'est transformé. Les coupes exactes inconnues se remplissent à partir
|
||||
des chunks déjà découverts et actuellement chargés, puis se conservent sur
|
||||
disque. Un terrain distant jamais relevé à ce Y reste inconnu jusqu'à revisite.
|
||||
Le serveur ne substitue jamais la surface à une coupe manquante.
|
||||
|
||||
Au plus quatre coupes supplémentaires sont gardées en mémoire par habitant
|
||||
et par dimension ;
|
||||
une coupe évincée est sauvegardée avant retrait. Les anciennes versions
|
||||
ignorent les fichiers supplémentaires. Le protocole conserve sa structure,
|
||||
mais accepte désormais un plafond entier entre -2048 et 2048 inclus : client
|
||||
et serveur doivent être mis à jour ensemble. Aucun monde, chunk, identifiant
|
||||
de jeu ou format de sauvegarde existant n'est migré.
|
||||
|
||||
## Vérifications
|
||||
|
||||
La validation finale réussit en **4 min 53 s** : `check build assemblePack`,
|
||||
**9 tests serveur requis** et le parcours client **Vulkan** sur Apple M1,
|
||||
avec les marqueurs `MAP319_CLIENT_PASS` et `MAP319_UNDER_PASS`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack :sanctuary:runClientGameTest \
|
||||
-PsanctuaryFocusedTests=map319,map244,map,portals316 \
|
||||
-PsanctuaryAtlasOnly=true -PsanctuaryClientTests=true \
|
||||
-PsanctuaryMap319ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
- Serveur : toit exclu, coupe inclusive, descente d’un bloc, altitude négative,
|
||||
transparence, vide relevé et consultation distante sans chargement. Sauvegarde
|
||||
avant éviction, relecture d’une coupe exacte, isolation entre habitants et
|
||||
fichier historique de surface inchangé. Régressions de livraison des chunks,
|
||||
achat de Carte et portails beta.316 réussies.
|
||||
- Client : Y=65 puis 63 sans changer le zoom ou le centre ; modification réelle
|
||||
du sol reçue dans la même coupe, vieux paquets terrain/Demeure ignorés,
|
||||
Y=-18 et réouverture d’une coupe déjà connue. Atlas et Pause en FR/EN aux
|
||||
échelles GUI 2/3/4. **17 captures** dans `build/map319-evidence/` ; vues de
|
||||
carte et Pause inspectées, y compris le petit format et Under.
|
||||
- Vraie dimension `sanctuary_test:under_v10`, graine 312, dans le préréglage
|
||||
de portails beta.316 : mêmes coordonnées/Y, sol or en Island et lapis en
|
||||
Under, toit en bedrock exclu. Les vieux paquets Island et les claims reçus
|
||||
avec un token de mise à jour globale sont ignorés en Under. Pause puis retour
|
||||
Island réussis. Les deux fichiers de coupe Y=65 sont relus séparément en
|
||||
schéma 2 et gardent leurs couleurs distinctes. Fermetures propres réussies.
|
||||
- Codec : des altitudes intermédiaires, y compris sous zéro, survivent à un
|
||||
aller-retour réseau ; valeurs hors limites refusées.
|
||||
|
||||
Le MRpack est exporté localement avec `packwiz modrinth export`. ZIP,
|
||||
Minecraft 26.3, Loader 0.19.5, version interne, toutes les classes du JAR,
|
||||
libellés FR/EN et octets du JAR embarqué sont vérifiés ; le module de laboratoire
|
||||
n’est pas inclus dans le pack normal. Reçu : `build/map319-validation.json` ;
|
||||
journal : `build/map319-final.log`.
|
||||
|
||||
- JAR : `mods/sanctuary/build/libs/sanctuary-beta.319.jar`, 18 347 427 octets ;
|
||||
SHA-256 `2ec65e9ce4c250dc27472d6a44ad94397a75874e9d2aa1639225d9dce2ef94db`.
|
||||
- MRpack : `build/Sanctuary-beta.319.mrpack`, 16 886 967 octets ;
|
||||
SHA-256 `e30b3af37ed665d51791490983788364e5703bd34656df8920a097ab1634223b`.
|
||||
|
||||
## Portée et limites
|
||||
|
||||
Préparation locale sur la branche du prototype Under beta.316. Les chantiers
|
||||
culinaires et médias des autres branches ne sont pas intégrés par ce ticket.
|
||||
L’accès à Under reste celui du prototype existant ; aucune dimension n’est
|
||||
activée dans une installation personnelle ou sur le serveur public.
|
||||
Aucune publication Gitea, modification du canal packwiz ou synchronisation Prism.
|
||||
|
||||
Le brouillard reste horizontal : cette coupe ne simule pas la visibilité
|
||||
optique de chaque caverne. Une ancienne découverte de surface ne suffit pas
|
||||
à reconstruire une coupe exacte distante ; il faut la revisiter. Les coupes
|
||||
relevées sont conservées sur disque ; leur volume après une longue exploration
|
||||
à de nombreuses altitudes et la charge d’un serveur très peuplé ne sont pas
|
||||
mesurés. Le parcours graphique utilise Vulkan avec le moteur Fabric natif ;
|
||||
aucun essai Sodium supplémentaire n’est revendiqué.
|
||||
@@ -0,0 +1,70 @@
|
||||
# MEDIA-07 — normales résiduelles de l'ancre
|
||||
|
||||
Retour du 27 octobre 2026 : une bordure légèrement brillante reste sur la
|
||||
vidéo à l'emplacement de l'ancre, dans le coin inférieur gauche.
|
||||
Branche `codex/media-anchor-model`, **beta.298**, Media **0.3.2**.
|
||||
[Livraison complète du 27 octobre 2026](release-beta298.md).
|
||||
|
||||
## Cause et correction
|
||||
|
||||
Le bloc est invisible pour le rendu Minecraft, mais conserve un ancien modèle
|
||||
de cadre 1 × 1 avec **30 faces**. La passe PBR de Sanctuary collectait aussi
|
||||
les modèles des blocs invisibles. Elle dessinait donc les normales et le
|
||||
matériau de ce petit cadre, alors que sa couleur n'était pas rendue.
|
||||
Les essais graphiques de MEDIA-06 avaient les shaders Sanctuary désactivés ;
|
||||
ils ne couvraient pas cette passe.
|
||||
|
||||
La collecte PBR des modèles opaques et du verre respecte maintenant
|
||||
`RenderShape.MODEL`. Les fluides gardent leur chemin dédié, y compris l'eau
|
||||
contenue dans un bloc. Le modèle de bloc de l'ancre est également vidé ;
|
||||
sa texture de particules reste disponible. L'objet utilise déjà un modèle
|
||||
indépendant et garde son apparence dans l'inventaire et dans la main.
|
||||
Le grand cadre reste dessiné par son maillage aux dimensions de l'écran.
|
||||
|
||||
Aucun identifiant, paquet, format de données ou règle d'interaction ne change.
|
||||
Les ancres existantes bénéficient du correctif au chargement du client.
|
||||
La sauvegarde et les dimensions ne nécessitent aucune migration.
|
||||
|
||||
## Validation
|
||||
|
||||
Reproduction avec le JAR beta.297 publié : deux clients Vulkan, Sodium,
|
||||
Sound Physics et **shaders Sanctuary/PBR actifs**. Le diagnostic constate
|
||||
`INVISIBLE`, 30 faces et admission de l'ancre dans la passe PBR opaque.
|
||||
Le bois et le verre visibles sont admis dans leurs passes respectives, l'eau
|
||||
dans la passe transparente.
|
||||
|
||||
Après correction, les deux clients constatent **zéro face**, ancre refusée
|
||||
par les deux passes de matériau, PBR réellement appliqué et vidéo en mouvement.
|
||||
Les chemins bois, verre et eau restent admis. Pose, taille 9 × 5 et ouverture
|
||||
du lecteur testées dans le laboratoire ; un clic de pose a dû être rejoué
|
||||
après la réception de l'inventaire du test.
|
||||
|
||||
Captures finales du client A inspectées, en gros plan du coin inférieur gauche,
|
||||
de face et en vue rasante : aucune empreinte du cadre 1 × 1 sur la vidéo.
|
||||
La sortie OpenAL est active sur les deux clients. Le JAR Sanctuary testé,
|
||||
avec un seul Media embarqué et sans sonde, a pour SHA-256
|
||||
`e6fdc36a212dcfcc89d31fbb29bc8eeec9d002cc9223ea6dcbfb31b7df17ec23`.
|
||||
|
||||
`check build assemblePack assembleServerPack :sanctuary-test:exportDuoLaunch`
|
||||
réussis en **3 min 6 s**, 162 tâches, **18 GameTests requis** au profil
|
||||
`property270,claims272,claims277,claims278`, atlas ciblé. Contrats Media inclus.
|
||||
Compilation des vérifications client PBR, y compris les nouveaux contrôles
|
||||
des blocs invisibles et des modèles visibles, réussie en **37 s**. La suite
|
||||
graphique PBR historique complète n'est pas rejouée ; ce parcours ciblé
|
||||
exerce la sélection réelle des matériaux du JAR construit.
|
||||
|
||||
Un lancement de client a automatiquement basculé hors Vulkan après une course
|
||||
d'extraction MoltenVK entre les deux processus : il a été rejeté, arrêté et
|
||||
relancé sous Vulkan. Seuls les relevés Vulkan sont retenus. Après les captures
|
||||
et les relevés valides, le client B s'est arrêté sur l'écriture du journal de
|
||||
la sonde (`No space left on device`). Le disque local ne disposait plus que
|
||||
de 136 Mio au contrôle suivant ; ce parcours ne vaut donc pas essai d'endurance.
|
||||
Ce défaut d'espace appartient au laboratoire, la sonde n'est pas distribuée.
|
||||
|
||||
[Relevé structuré](media-anchor-normals-results.json). Pas de nouvelle mesure
|
||||
de synchronisation vidéo/live ou de source publique. Mur graphique orienté sud.
|
||||
Laboratoires isolés sous `build/media-prototype/anchor-model-*`, captures finales
|
||||
dans `anchor-model-after/client-a/screenshots/`. Aucun monde personnel utilisé.
|
||||
Le correctif est maintenant publié et installé sur le canal, la Beta et la
|
||||
même instance Prism. Le [reçu](release-beta298.md) distingue ces essais
|
||||
graphiques des vérifications effectuées pendant la livraison.
|
||||
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"ticket": "MEDIA-07",
|
||||
"state": "published and installed on Beta server, Web distribution and existing Prism instance",
|
||||
"artifact": {
|
||||
"version": "beta.298",
|
||||
"bytes": 18301295,
|
||||
"sha256": "e6fdc36a212dcfcc89d31fbb29bc8eeec9d002cc9223ea6dcbfb31b7df17ec23",
|
||||
"media_version": "0.3.2",
|
||||
"nested_media_count": 1,
|
||||
"anchor_block_faces": 0,
|
||||
"probe_embedded": false
|
||||
},
|
||||
"backend": "Vulkan",
|
||||
"clients": [
|
||||
{
|
||||
"client": "client-a",
|
||||
"model": {
|
||||
"anchor_model_quads": 0,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"pbr_applied": true,
|
||||
"anchor_pbr_opaque": false,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
"vulkan_video_uploads": 1625
|
||||
},
|
||||
{
|
||||
"client": "client-b",
|
||||
"model": {
|
||||
"anchor_model_quads": 0,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"pbr_applied": true,
|
||||
"anchor_pbr_opaque": false,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
"vulkan_video_uploads": 1448
|
||||
}
|
||||
],
|
||||
"before": {
|
||||
"version": "beta.297",
|
||||
"clients": [
|
||||
{
|
||||
"client": "client-a",
|
||||
"anchor_model_quads": 30,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"anchor_pbr_opaque": true,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
},
|
||||
{
|
||||
"client": "client-b",
|
||||
"anchor_model_quads": 30,
|
||||
"anchor_render_shape": "INVISIBLE",
|
||||
"shaders_active": true,
|
||||
"pbr_enabled": true,
|
||||
"anchor_pbr_opaque": true,
|
||||
"water_pbr_opaque": false,
|
||||
"wood_pbr_opaque": true,
|
||||
"anchor_pbr_transparent": false,
|
||||
"water_pbr_transparent": true,
|
||||
"glass_pbr_transparent": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"build": {
|
||||
"check_build_assemble": "passed",
|
||||
"duration": "3m06s",
|
||||
"tasks": 162,
|
||||
"required_gametests": 18,
|
||||
"client_checks_compile": "passed, 37s, 6 tasks; historical PBR graphic suite not rerun"
|
||||
},
|
||||
"limits": [
|
||||
"No new live synchronization or public-source validation",
|
||||
"Graphical wall faces south",
|
||||
"Graphical validation used isolated instances; deployment to Beta and existing Prism is recorded in the delivery receipt",
|
||||
"One automatic fallback after concurrent MoltenVK extraction was rejected and the client relaunched in Vulkan",
|
||||
"Client B stopped after valid samples and captures because the probe could not write its log: No space left on device; not an endurance test"
|
||||
],
|
||||
"graphics_checks": {
|
||||
"lower_left_front_video": "inspected, no 1x1 frame imprint",
|
||||
"lower_left_grazing_video": "inspected, no 1x1 frame imprint",
|
||||
"placement_resize_reader": "passed; placement replayed after inventory arrival",
|
||||
"final_screenshots": [
|
||||
"anchor-model-shaders-front-settled.png",
|
||||
"anchor-model-shaders-side-settled.png"
|
||||
]
|
||||
},
|
||||
"delivery": {
|
||||
"date": "2026-10-27",
|
||||
"receipt": "release-beta298.md",
|
||||
"source_tag": "fb8705369e3834c66d965108d609ec704b584ec2",
|
||||
"packwiz_commit": "7fa08625a4fa89391d64b4b4fc0859611ecf0952",
|
||||
"fresh_check_build_assemble": "passed, 2m50s, 158 tasks, 18 required GameTests; identical JAR to final Vulkan validation"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,217 @@
|
||||
# MEDIA-04 — Un cadre comme ancre, agrandissement gratuit
|
||||
|
||||
Branche `codex/media-anchor`, 26 octobre 2026. Suite du
|
||||
[prototype de synchronisation](media-sync-audio-prototype.md).
|
||||
|
||||
Décision de Koka : **un seul cadre est consommé pour poser l'ancre ; aucun
|
||||
cadre supplémentaire pour agrandir, aucun remboursement quand on réduit**.
|
||||
Cette décision remplace le coût par bloc envisagé dans MEDIA-01.
|
||||
|
||||
L'extension expérimentale `sanctuary_media` passe en **0.3.0-prototype** ;
|
||||
elle reste séparée du pack beta.293. Aucun compteur Sanctuary, manifeste,
|
||||
serveur personnel ou installation Prism modifié.
|
||||
|
||||
## Contrat de données avant le premier essai
|
||||
|
||||
Nouveaux identifiants : bloc, objet et block entity
|
||||
`sanctuary_media:redstone_frame`. Recette : huit bâtons autour d'une redstone.
|
||||
Le bloc représente uniquement l'ancre, placée devant un mur, au coin inférieur
|
||||
gauche vu de face. Une seule block entity et une seule surface Dream par écran.
|
||||
|
||||
La block entity utilise **AnchorVersion=1**, avec Width, Height, Revision,
|
||||
Owner et Display (UUID Dream). Dream conserve la source et sa timeline dans
|
||||
son propre stockage. Le chargement/déchargement d'un chunk ne détruit pas
|
||||
l'écran et ne donne aucun objet. Casser l'ancre ou perdre un support chargé
|
||||
supprime le display une fois ; le loot normal rend un cadre en survie.
|
||||
La taille n'est pas copiée dans l'objet récupéré.
|
||||
|
||||
Le marqueur Dream final `sanctuary_media:anchor_v2` encode 28 octets : version
|
||||
2, position longue, largeur, hauteur, révision, orientation. Il permet le rendu
|
||||
et le raycast même sans block entity dans l'index local. Les premiers essais
|
||||
non livrés utilisaient un marqueur V1 de 24 octets ; au chargement de leur
|
||||
ancre, `ensureDisplay` reconstruit le V2 depuis le BlockState, vérifie son
|
||||
enregistrement, puis retire le V1, en conservant UUID, source et géométrie.
|
||||
Le format de la block entity ne change pas. Cette migration concerne seulement
|
||||
les mondes expérimentaux créés par ce ticket ; aucun monde personnel n'est ouvert.
|
||||
|
||||
Le schéma apparaît seulement dans un **nouveau monde de laboratoire** pour ces
|
||||
essais. Le redémarrage de ce même laboratoire vérifie la relecture d'AnchorVersion=1 sans
|
||||
changement de format. Aucun monde personnel ni conversion d'un format existant.
|
||||
Une future évolution incompatible devra définir sa migration avant utilisation.
|
||||
|
||||
## Interaction
|
||||
|
||||
- Poser sur une face verticale : ancre 1 × 1, puis menu largeur/hauteur.
|
||||
- Dimensions entières libres, formats rapides facultatifs 4 × 3, 8 × 4, 16 × 9
|
||||
et aperçu du ratio. Aucun catalogue de tailles imposées.
|
||||
- Confirmer modifie le rectangle ; fermer laisse la taille précédente.
|
||||
- Clic droit sur toute la surface jusqu'à **16 blocs**, depuis les yeux, pour
|
||||
le lecteur commun. Les murs bloquent le rayon.
|
||||
- Maj + clic droit ou bouton Taille à portée de construction de l'ancre :
|
||||
menu de dimensions si les droits de construction l'autorisent.
|
||||
- Source, lecture, pause et seek sont communs. Volume et muet sont personnels.
|
||||
Ouvrir le menu ne met pas la séance en pause.
|
||||
|
||||
**Il s'agit d'une extension, pas d'un portage ni d'une réécriture du lecteur.**
|
||||
À la demande de Koka, le petit lecteur Sanctuary provisoire a été retiré :
|
||||
le clic normal ouvre le véritable `DisplayMenu` de Dream Displays 1.10.4,
|
||||
avec son champ de recherche/liens, ses cartes, aperçu et commandes existantes.
|
||||
Seul le menu des dimensions est ajouté, avec un bouton Taille dans l'en-tête
|
||||
natif. Les commandes restent communes et les modes/access restent fixés sur
|
||||
Synchronisé/Tout le monde. La suppression se fait via l'ancre ; la double
|
||||
acoustique Dream est désactivée au profit du pont Minecraft/Sound Physics.
|
||||
|
||||
Le cadre visuel dessine les quatre bords dans **le même repère et le même
|
||||
pipeline Vulkan que l'image**, avec une épaisseur constante d'un seizième de
|
||||
bloc. Son contour extérieur correspond exactement au rectangle demandé, y
|
||||
compris avant de charger une source. L'ancien contour du seul bloc 1 × 1 est
|
||||
invisible. Un petit repère de redstone marque le coin d'ancrage.
|
||||
|
||||
Budgets serveur dans `config/sanctuary-media-anchors.json` : par défaut largeur
|
||||
256, hauteur 256, surface 16 384 blocs ; zéro retire le plafond correspondant.
|
||||
Les limites du monde et les chunks réellement chargés restent des contraintes.
|
||||
Le plafond fixe 32 × 18 du premier essai a été retiré après la précision de Koka.
|
||||
La résolution des textures garde le ratio, avec 4096 pixels par axe et au plus
|
||||
8 388 608 pixels, pour que la taille physique ne déclenche pas une allocation
|
||||
vidéo immense. Les cas extrêmes sont vérifiés dans le contrat Java.
|
||||
|
||||
Le serveur recalcule cible, visibilité, portée et droits, vérifie chaque cellule
|
||||
du mur et de l'espace avant, les limites du monde et les autres ancres chargées.
|
||||
Un rectangle partiellement déchargé est refusé sans charger les chunks.
|
||||
Révision et UUID protègent contre une ancienne fenêtre. Les paquets natifs
|
||||
Dream concernant un écran ancré passent par le contrat de l'ancre ; ses API
|
||||
de géométrie et suppression refusent les appels hors transaction autorisée.
|
||||
Les écrans Dream ordinaires conservent leur comportement.
|
||||
|
||||
Le prototype réutilise la synchro et le réglage personnel d'acoustique de
|
||||
MEDIA-03. Le filtre 16 pixels par bloc, les sources publiques et les disques
|
||||
blancs restent des lots distincts.
|
||||
|
||||
Un redimensionnement pendant la lecture recrée les textures et recharge le
|
||||
décodeur aux nouvelles proportions, puis redemande la timeline commune. Cela
|
||||
évite d'étirer l'ancienne texture ; une brève remise en tampon est attendue.
|
||||
L'image garde son ratio, avec des bandes noires si celui-ci diffère du cadre.
|
||||
L'UUID et la source restent identiques.
|
||||
|
||||
## Vérification du prototype
|
||||
|
||||
Laboratoire `anchor-03`, créé pour ce ticket, deux vrais clients Minecraft
|
||||
26.3 sous **Vulkan**, serveur dédié local, Dream Displays 1.10.4, Sound Physics
|
||||
Remastered 1.5.1+26.3 et Sodium 0.9.2+mc26.3, Java 25. Même méthode et même
|
||||
source synthétique à 30 images/s que MEDIA-03, Apple M1 8 Gio. Le backend libav
|
||||
embarqué reste indisponible sur ce poste : le chemin natif Dream utilise
|
||||
FFmpeg externe 8.1.2. Aucun essai OpenGL.
|
||||
|
||||
La suite `scripts/anchor_lab_checks.py` a passé ses **14 contrôles** :
|
||||
consommation unique, agrandissement gratuit, réduction sans remboursement,
|
||||
même UUID, budget, mur complet, révision périmée, accès natifs protégés,
|
||||
obstacle/chevauchement/chunk absent, permissions de construction, lecteur
|
||||
Dream à distance avec un cadre en main, redimensionnement lointain refusé,
|
||||
mur bloquant le clic et le paquet forgé, second spectateur. Les interactions
|
||||
passent par les widgets et les paquets du jeu ; le monde n'est pas modifié
|
||||
hors des gestes explicites du scénario de laboratoire.
|
||||
|
||||
Essais complémentaires :
|
||||
|
||||
- Recette et loot chargés par le serveur ; calculs des quatre orientations,
|
||||
raycast et bornes de texture vérifiés par le contrat Java.
|
||||
- Véritable menu `DisplayMenu` en FR et EN, deux échelles d'interface ; lien
|
||||
saisi dans sa recherche puis carte sélectionnée, source propagée aux deux
|
||||
clients, pause/reprise depuis le second spectateur.
|
||||
- Passage de 7 × 4 à **33 × 7** pendant le live, cadre autour de tout le
|
||||
rectangle, vidéo centrée sans étirement ; inventaire toujours à trois
|
||||
après une seule pose depuis une pile de quatre.
|
||||
- Index local d'ancres retiré : rendu, lecteur et commandes retrouvent la
|
||||
surface via les métadonnées Dream répliquées.
|
||||
- Redémarrage du laboratoire : mêmes dimensions 33 × 7, révision, UUID
|
||||
`111fe5e2-a78e-4541-8d7c-cab51901d326` et source ; un seul display.
|
||||
- Reconnexion d'un client au même serveur puis réouverture du lecteur.
|
||||
Le délai anti-spam utilise maintenant une horloge monotone, avec nettoyage
|
||||
à la déconnexion, au lieu de l'âge du nouveau joueur.
|
||||
- Pause du live dépassant la fenêtre de segments, puis reprise : chaque
|
||||
session froide épingle un manifeste récent et son origine PCM. L'essai a
|
||||
découvert puis corrigé la réutilisation d'une ancienne origine, qui figeait
|
||||
l'image et vidait l'audio après reprise.
|
||||
- Option personnelle d'acoustique désactivée sur A pendant le live : ses
|
||||
appels SPR cessent, ceux de B continuent, audio OpenAL actif sur les deux.
|
||||
- Hors champ sur A : plus d'uploads GPU, curseur audio toujours en mouvement.
|
||||
- Retrait d'un support du mur : disparition de l'ancre et du display, un seul
|
||||
cadre lâché, aucun doublon cinq secondes plus tard.
|
||||
|
||||
Les phases anciennes `live-anchor-rejoin-play` et les premiers essais de
|
||||
redimensionnement sont des diagnostics **avant correction**, pas des tests
|
||||
réussis. Les séries finales et leurs couvertures sont conservées dans le
|
||||
[relevé de résultats](media-anchor-results.json). Les traces détaillées et
|
||||
captures restent dans `build/media-prototype/anchor-03/`, hors Git.
|
||||
|
||||
La mesure compare les numéros d'images réellement envoyées au GPU, à la
|
||||
résolution d'une image à 30 i/s, et les curseurs OpenAL. Elle ne mesure ni le
|
||||
scanout des moniteurs ni l'écoute des haut-parleurs. Les valeurs après les
|
||||
quinze premières secondes ne garantissent pas une latence réseau ; les
|
||||
chargements et pointes restent comptés dans les traces.
|
||||
|
||||
| Phase contrôlée | Durée | Paires après 15 s | Médiane | P95 | Maximum |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| VOD via menu Dream, 7 × 4 | 200 s | 738 | 22 ms | 118 ms | 200 ms |
|
||||
| Live, reprise après pause froide | 68,5 s | 208 | 15 ms | 249 ms | 579 ms |
|
||||
| Live final stabilisé, 33 × 7 | 74,6 s | 237 | 14 ms | 33 ms | 242 ms |
|
||||
|
||||
Couverture utilisable de la dernière phase : 99,3 % sur A et 100 % sur B,
|
||||
médiane 30 FPS. Le tout dernier redémarrage des deux JVM n'a que cinq paires
|
||||
après 15 s (P95 526 ms, couverture 27–28 %) : c'est un échantillon de démarrage
|
||||
insuffisant pour conclure sur le régime stable. Le relevé le conserve, ainsi
|
||||
que les pointes de la reprise froide ; la synchro n'est pas instantanée.
|
||||
|
||||
Après les tests, les clients, le générateur HLS et le serveur HTTP ont été
|
||||
arrêtés. Le serveur de laboratoire est resté bloqué plus d'une minute dans
|
||||
`ServerChunkCache.runDistanceManagerUpdates` pendant `stopServer` ; dump des
|
||||
threads conservé dans `build/media-fix/anchor-server-stop-threads.log`, puis
|
||||
arrêt forcé du seul processus identifié. Le test de persistance avait réussi
|
||||
lors du redémarrage précédent ; cet arrêt forcé n'est pas une validation de
|
||||
sauvegarde propre. Aucune installation personnelle n'est concernée.
|
||||
|
||||
Vérification finale du code :
|
||||
|
||||
- `./gradlew check build --max-workers=1 -Dorg.gradle.jvmargs=-Xmx1G
|
||||
-PsanctuaryFocusedTests=property270,claims272,claims277,claims278
|
||||
-PsanctuaryAtlasOnly=true --console=plain` : **réussi en 2 min 51 s**, 145
|
||||
tâches, **18 GameTests requis réussis**. Java 25 via `JAVA_HOME`.
|
||||
- `python3.14 scripts/media_lab.py test-media` : contrats horloge, timeline,
|
||||
HLS, isolation d'origine après reprise, géométrie et textures réussis ;
|
||||
construction du JAR expérimental séparé réussie.
|
||||
- Sept tests du rapport de mesure et compilation syntaxique Python réussis.
|
||||
- Aucun changement de distribution, donc pas d'`assemblePack`, publication,
|
||||
changement de version Beta ou synchronisation Prism.
|
||||
|
||||
## Reproduire
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary-test:exportDuoLaunch
|
||||
python3.14 scripts/media_lab.py prepare --run anchor-test --anchors
|
||||
python3.14 scripts/media_lab.py serve --run anchor-test
|
||||
# Dans d'autres terminaux :
|
||||
python3.14 scripts/media_lab.py server --run anchor-test
|
||||
python3.14 scripts/media_lab.py client-a --run anchor-test
|
||||
python3.14 scripts/media_lab.py client-b --run anchor-test
|
||||
python3.14 scripts/anchor_lab_checks.py --run anchor-test
|
||||
python3.14 scripts/media_lab.py test-media
|
||||
```
|
||||
|
||||
La suite interactive attend que les deux joueurs aient rejoint le laboratoire.
|
||||
Pour vérifier les flux, lancer `live --run anchor-test`, puis saisir l'URL
|
||||
loopback de `manifest.json` dans le menu Dream ; les médias restent des
|
||||
fixtures synthétiques locales. Arrêter avec `stop --run anchor-test`, puis
|
||||
fermer le serveur HTTP du terminal `serve`.
|
||||
|
||||
## Limites encore ouvertes
|
||||
|
||||
Les dimensions libres désignent des **blocs entiers**, sur un mur complet ;
|
||||
les budgets configurables du serveur protègent le coût des validations. Les
|
||||
tailles extrêmes n'ont pas été essayées dans le monde ; seules leurs bornes
|
||||
de calcul et d'allocation ont été vérifiées. Les quatre orientations ont un
|
||||
contrat de géométrie, le parcours graphique est orienté sud.
|
||||
|
||||
Twitch/YouTube publics, playlists HLS maître, LL-HLS, discontinuités, DRM,
|
||||
résolution ANI-CLI, filtre 16 pixels/bloc et disques blancs ne sont pas
|
||||
validés dans ce ticket. Le lecteur et ses réglages restent ceux de Dream.
|
||||
L'extension expérimentale n'est pas encore distribuée dans Sanctuary Beta.
|
||||
@@ -0,0 +1,489 @@
|
||||
{
|
||||
"ticket": "MEDIA-04",
|
||||
"date": "2026-10-26",
|
||||
"branch": "codex/media-anchor",
|
||||
"version": "0.3.0-prototype",
|
||||
"environment": {
|
||||
"minecraft": "26.3",
|
||||
"java": 25,
|
||||
"dream_displays": "1.10.4",
|
||||
"sound_physics_remastered": "1.5.1+26.3",
|
||||
"backend": "Vulkan",
|
||||
"machine": "Apple M1, 8 GiB",
|
||||
"lab": "anchor-03",
|
||||
"seed": 2602,
|
||||
"media": "synthetic H264/AAC 320x180, 30fps; dated 1s HLS segments"
|
||||
},
|
||||
"method": "16-bit frame code, 30 fps, successful GPU upload, nearest observations within 150 ms; no display-scanout or subjective listening measurement",
|
||||
"interaction_checks": {
|
||||
"passed": [
|
||||
"one frame consumed on placement",
|
||||
"custom 7x4 and free enlargement",
|
||||
"shrinking does not refund frames",
|
||||
"resizing keeps the same display",
|
||||
"oversize refused",
|
||||
"incomplete wall refused",
|
||||
"stale revision refused",
|
||||
"native delete, overlap, obstacle and unloaded chunks refused",
|
||||
"building permission required",
|
||||
"original Dream reader on remote overlay while holding frame",
|
||||
"forged remote resize refused",
|
||||
"wall blocks normal interaction",
|
||||
"wall blocks forged open packet",
|
||||
"original Dream reader available to second spectator"
|
||||
]
|
||||
},
|
||||
"lifecycle": {
|
||||
"culling_audio_continues": true,
|
||||
"support_loss_one_drop": true,
|
||||
"no_duplicate_drop_after_5s": true,
|
||||
"final_server": {
|
||||
"assertions": {
|
||||
"reloaded": true
|
||||
},
|
||||
"server_step": "remove-support",
|
||||
"anchor": false,
|
||||
"frames_in_inventory": 3,
|
||||
"frame_drops": 1,
|
||||
"displays": 0,
|
||||
"wall_ns": 1793006462588000000,
|
||||
"mono_ns": 2229766026712875,
|
||||
"phase": "anchor-support-loss"
|
||||
}
|
||||
},
|
||||
"phases": {
|
||||
"final-native-video": {
|
||||
"duration_seconds": 200.023,
|
||||
"after_15s_skew_ms": {
|
||||
"count": 738,
|
||||
"median": 22.000000000000007,
|
||||
"p95": 118.00000000000001,
|
||||
"max": 200.33333333333334
|
||||
},
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 799,
|
||||
"median": 26.00000000000001,
|
||||
"p95": 151.66666666666669,
|
||||
"max": 200.99999999999997
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 800,
|
||||
"usable_video_samples": 800,
|
||||
"usable_fraction": 1.0,
|
||||
"largest_sample_gap_seconds": 0.398,
|
||||
"fps": {
|
||||
"count": 800,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 24,
|
||||
"error_ns": 2222222
|
||||
},
|
||||
"media_audio_last": {
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 814,
|
||||
"error_ns": 7551020
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 800,
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 801,
|
||||
"usable_video_samples": 800,
|
||||
"usable_fraction": 0.9987515605493134,
|
||||
"largest_sample_gap_seconds": 0.322,
|
||||
"fps": {
|
||||
"count": 800,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 181406,
|
||||
"effects_calls": 24
|
||||
},
|
||||
"media_audio_last": {
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.004580499,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 9160998,
|
||||
"effects_calls": 814
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 800,
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-anchor-rejoin": {
|
||||
"duration_seconds": 23.226,
|
||||
"after_15s_skew_ms": {
|
||||
"count": 32,
|
||||
"median": 12.333333333333334,
|
||||
"p95": 25.666666666666664,
|
||||
"max": 29.666666666666668
|
||||
},
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 91,
|
||||
"median": 38.666666666666664,
|
||||
"p95": 76.00000000000001,
|
||||
"max": 105.66666666666666
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 94,
|
||||
"usable_video_samples": 94,
|
||||
"usable_fraction": 1.0,
|
||||
"largest_sample_gap_seconds": 0.534,
|
||||
"fps": {
|
||||
"count": 94,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": -6167800,
|
||||
"effects_calls": 466,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"media_audio_last": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": -6009070,
|
||||
"effects_calls": 556,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 94,
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 93,
|
||||
"usable_video_samples": 93,
|
||||
"usable_fraction": 1.0,
|
||||
"largest_sample_gap_seconds": 0.41,
|
||||
"fps": {
|
||||
"count": 93,
|
||||
"median": 29,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 3854875,
|
||||
"effects_calls": 169,
|
||||
"resets": 0
|
||||
},
|
||||
"media_audio_last": {
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.004319728,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 8639456,
|
||||
"effects_calls": 260,
|
||||
"resets": 0
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 93,
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-fresh-pin-resume": {
|
||||
"duration_seconds": 68.542,
|
||||
"after_15s_skew_ms": {
|
||||
"count": 208,
|
||||
"median": 15.0,
|
||||
"p95": 249.33333333333334,
|
||||
"max": 578.6666666666666
|
||||
},
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 247,
|
||||
"median": 14.333333333333337,
|
||||
"p95": 133.66666666666666,
|
||||
"max": 578.6666666666666
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 274,
|
||||
"usable_video_samples": 251,
|
||||
"usable_fraction": 0.916058394160584,
|
||||
"largest_sample_gap_seconds": 0.526,
|
||||
"fps": {
|
||||
"count": 251,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 267,
|
||||
"error_ns": 6757370,
|
||||
"video_acoustics": true
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 251,
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 274,
|
||||
"usable_video_samples": 251,
|
||||
"usable_fraction": 0.916058394160584,
|
||||
"largest_sample_gap_seconds": 1.047,
|
||||
"fps": {
|
||||
"count": 251,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 266,
|
||||
"error_ns": -8934240,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 0.99553288
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 251,
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-anchor-final-rejoin": {
|
||||
"duration_seconds": 16.718,
|
||||
"after_15s_skew_ms": {
|
||||
"count": 5,
|
||||
"median": 375.0,
|
||||
"p95": 526.3333333333334,
|
||||
"max": 526.3333333333334
|
||||
},
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 15,
|
||||
"median": 184.33333333333331,
|
||||
"p95": 375.3333333333333,
|
||||
"max": 526.3333333333334
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 62,
|
||||
"usable_video_samples": 17,
|
||||
"usable_fraction": 0.27419354838709675,
|
||||
"largest_sample_gap_seconds": 1.865,
|
||||
"fps": {
|
||||
"count": 17,
|
||||
"median": 29,
|
||||
"p95": 29,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 36,
|
||||
"error_ns": 59138322,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 17,
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 60,
|
||||
"usable_video_samples": 17,
|
||||
"usable_fraction": 0.2833333333333333,
|
||||
"largest_sample_gap_seconds": 2.436,
|
||||
"fps": {
|
||||
"count": 17,
|
||||
"median": 27,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"effects_calls": 35,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.02,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 176575964
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 18,
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-anchor-stable-final": {
|
||||
"duration_seconds": 74.563,
|
||||
"after_15s_skew_ms": {
|
||||
"count": 237,
|
||||
"median": 14.333333333333334,
|
||||
"p95": 33.0,
|
||||
"max": 242.33333333333334
|
||||
},
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 297,
|
||||
"median": 16.0,
|
||||
"p95": 951.3333333333334,
|
||||
"max": 1175.6666666666667
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 299,
|
||||
"usable_video_samples": 297,
|
||||
"usable_fraction": 0.9933110367892977,
|
||||
"largest_sample_gap_seconds": 0.756,
|
||||
"fps": {
|
||||
"count": 297,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 456,
|
||||
"error_ns": 476190,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0
|
||||
},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 459,
|
||||
"error_ns": -2857143,
|
||||
"video_acoustics": false,
|
||||
"playing": true,
|
||||
"rate": 1.0
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 298,
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 299,
|
||||
"usable_video_samples": 299,
|
||||
"usable_fraction": 1.0,
|
||||
"largest_sample_gap_seconds": 0.431,
|
||||
"fps": {
|
||||
"count": 299,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"media_audio_first": {
|
||||
"effects_calls": 456,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 2766440
|
||||
},
|
||||
"media_audio_last": {
|
||||
"effects_calls": 750,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": -1337868
|
||||
},
|
||||
"java_sound_active_samples": 0,
|
||||
"openal_active_samples": 299,
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"interpretation": {
|
||||
"vod": "Native Dream search/card/playback at 7x4; measurement through anchor",
|
||||
"live-anchor-rejoin": "Single client rejoin at 33x7; native menu and shared pause checked; predates cold-pause fix",
|
||||
"live-fresh-pin-resume": "First live restart after cold-pause fix; includes warmup and scheduling spikes during tools/build; no frozen playback",
|
||||
"live-anchor-final-rejoin": "Latest code, both JVMs restarted: short startup sample, only five stable pairs, insufficient for steady-state conclusion",
|
||||
"live-anchor-stable-final": "Latest code after warmup, 33x7; A video acoustics off and B on; occasional upload/scheduling spikes retained"
|
||||
},
|
||||
"limits": [
|
||||
"No monitor scanout or loudspeaker capture",
|
||||
"Only controlled local VOD/HLS; no public Twitch/YouTube validation",
|
||||
"Final short reconnect phase has low usable coverage, not an instantaneous reconnect claim"
|
||||
],
|
||||
"checks": {
|
||||
"java_contracts": "passed",
|
||||
"python_report_tests": 7,
|
||||
"root_check_build": {
|
||||
"status": "passed",
|
||||
"seconds": 171,
|
||||
"actionable_tasks": 145,
|
||||
"executed": 120,
|
||||
"game_tests": 18,
|
||||
"focused_tests": "property270,claims272,claims277,claims278",
|
||||
"atlas_only": true,
|
||||
"command": "JAVA_HOME=$(/usr/libexec/java_home -v 25) ./gradlew check build --max-workers=1 -Dorg.gradle.jvmargs=-Xmx1G -PsanctuaryFocusedTests=property270,claims272,claims277,claims278 -PsanctuaryAtlasOnly=true --console=plain"
|
||||
}
|
||||
},
|
||||
"publication": "none; independent experimental addon, Beta pack unchanged",
|
||||
"shutdown": {
|
||||
"server_pid": 44868,
|
||||
"forced_after_seconds": 63,
|
||||
"reason": "Server thread blocked in ServerChunkCache.runDistanceManagerUpdates during MinecraftServer.stopServer; shutdown hook waiting",
|
||||
"thread_dump": "build/media-fix/anchor-server-stop-threads.log",
|
||||
"clients_live_and_http_stopped": true
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,76 @@
|
||||
# MEDIA-05 — livrer les écrans dans Sanctuary beta.296
|
||||
|
||||
Demande du 26 octobre 2026 : mettre Sanctuary à jour pour essayer les cadres.
|
||||
Branche `codex/media-beta296`, intégration de `codex/media-anchor` et du socle
|
||||
publié beta.295, favori serveur et commandes de propriété conservés.
|
||||
|
||||
## Distribution
|
||||
|
||||
Le JAR Sanctuary contient maintenant le module Fabric `sanctuary_media`
|
||||
**0.3.0**, construit par Gradle depuis `mods/sanctuary-media/`. Ses identifiants
|
||||
et entrées restent ceux du prototype ; aucun deuxième JAR Media à installer.
|
||||
L'assemblage vérifie la présence d'un seul module, ses dépendances, sa licence
|
||||
et l'absence de code de sonde. Le module compile contre les classes Sanctuary
|
||||
pour éviter un cycle avec le JAR qui l'embarque.
|
||||
|
||||
Dream Displays **1.10.4**, artefact Modrinth **siUKU04U** pour Minecraft **26.3**,
|
||||
est une dépendance packwiz commune aux clients et au serveur, vérifiée par
|
||||
SHA-512. Les profils serveur possèdent désormais cinq mods externes/principaux :
|
||||
Fabric API, Sanctuary (JEI et Media inclus), Dream Displays, Lithium et Simple
|
||||
Voice Chat. Sound Physics reste facultatif côté client. Pas de mise à jour de
|
||||
Minecraft, Fabric, JEI ni des autres dépendances.
|
||||
|
||||
Le décodeur reste sur les clients. Sur ce Mac Apple Silicon, le chemin validé
|
||||
utilise FFmpeg 8.1.2 ; le backend libav embarqué ne se charge pas. Dream peut
|
||||
télécharger ses outils au premier lancement. L'installation locale réutilise
|
||||
le FFmpeg système vérifié pour éviter une autre variante du décodeur.
|
||||
|
||||
## Contrat des données
|
||||
|
||||
L'ajout n'effectue aucune conversion, génération ou modification de blocs
|
||||
existants. Il enregistre `sanctuary_media:redstone_frame` et ses nouvelles
|
||||
données **AnchorVersion=1**, seulement quand un joueur pose une ancre. Dream
|
||||
garde sa propre source et sa timeline ; la surface reçoit le marqueur V2
|
||||
documenté dans [MEDIA-04](media-anchor-prototype.md).
|
||||
|
||||
Sauvegarder l'instance Beta entière, configuration et environnement privé
|
||||
avant changement du canal. Préserver mondes, joueurs, permissions, admission,
|
||||
communauté et réglages. Aucun monde personnel n'est ouvert pour la validation
|
||||
locale. Après utilisation des nouveaux écrans, un retour à beta.295 demande
|
||||
la restauration de la sauvegarde correspondante ; ne pas lancer l'ancien
|
||||
binaire sur un monde contenant les nouveaux blocs.
|
||||
|
||||
## Essayer en jeu
|
||||
|
||||
1. Lancer l'instance Sanctuary Beta habituelle ; packwiz télécharge la mise à
|
||||
jour. Rejoindre le favori Sanctuary Beta.
|
||||
2. Fabriquer un **cadre de redstone** : huit bâtons et une redstone au centre.
|
||||
3. Poser le cadre sur un mur plein : il devient le coin inférieur gauche.
|
||||
Saisir largeur et hauteur, puis Appliquer. Un seul cadre est consommé et
|
||||
tout redimensionnement est gratuit.
|
||||
4. Clic droit sur la surface, jusqu'à 16 blocs : le véritable menu Dream
|
||||
Displays s'ouvre. Coller un lien, lancer sa recherche puis choisir la carte.
|
||||
Les commandes de lecture sont communes ; volume et muet sont personnels.
|
||||
5. Près de l'ancre, utiliser Maj + clic droit ou le bouton Taille pour ajuster
|
||||
les dimensions. Le mur complet doit rester derrière l'écran.
|
||||
|
||||
Le contour correspond exactement au rectangle ; la vidéo conserve son ratio.
|
||||
Budgets dans `config/sanctuary-media-anchors.json` (256 × 256, surface 16 384
|
||||
par défaut ; zéro enlève le plafond concerné). Aucun format prédéfini imposé.
|
||||
|
||||
Pour garder le son sans réverbération/occlusion : **Options → Sons → Sound
|
||||
Physics Remastered → Acoustique des vidéos : Non**. Le choix est personnel.
|
||||
L'audio continue quand l'écran sort du champ de vision.
|
||||
|
||||
## Vérifications et limites
|
||||
|
||||
Le prototype a été exercé avec deux clients Vulkan : vidéo synthétique, HLS
|
||||
daté, reconnexion, pause froide, cadre 33 × 7, menu natif FR/EN, droits et
|
||||
inventaire. [Mesures détaillées et pointes](media-anchor-results.json).
|
||||
Cette livraison ajoute les contrôles Gradle, des archives et des installations
|
||||
réelles ; voir le [reçu de livraison](release-beta296.md).
|
||||
|
||||
Twitch/YouTube publics ne sont pas une validation obtenue par les fixtures
|
||||
locales. DRM, HLS maître/LL-HLS, ANI-CLI, pixellisation 16 pixels/bloc et disques
|
||||
blancs restent hors de cette livraison. La reprise d'un live peut remettre
|
||||
quelques secondes en tampon pour retrouver le retard commun.
|
||||
@@ -0,0 +1,334 @@
|
||||
# MEDIA-01 — Écrans et séances partagées
|
||||
|
||||
Étude du **26 octobre 2026**, branche `codex/media-displays-study`, issue du
|
||||
commit Sanctuary `74dc1265` (**beta.293**). Les modifications beta.294 en cours
|
||||
dans le checkout `codex/property-command` sont laissées dans leur checkout.
|
||||
|
||||
**Statut : cadrage documentaire, aucun mod implémenté ni installé.** Les choix
|
||||
ci-dessous proviennent de la discussion avec Koka ; les propositions techniques
|
||||
et les critères d'essai ne constituent pas des résultats mesurés.
|
||||
|
||||
Suite de ce cadrage initial : le [prototype MEDIA-02](media-playback-prototype.md)
|
||||
consigne les essais réels à deux clients Vulkan. Il ajoute uniquement une sonde
|
||||
de développement et une scène Dream Displays, sans les cadres Sanctuary.
|
||||
|
||||
## Choix confirmés
|
||||
|
||||
| Sujet | Décision du créateur |
|
||||
| --- | --- |
|
||||
| Pose | Une ancre, puis un menu largeur/hauteur |
|
||||
| Support | Surface murale complète, comme un tableau |
|
||||
| Fabrication | Recette du tableau avec redstone au centre, à la place de la laine |
|
||||
| Coût | **Décision révisée : une seule ancre, agrandissement gratuit** — voir [MEDIA-04](media-anchor-prototype.md) |
|
||||
| Image | Option de pixellisation à **16 × 16 pixels par bloc** |
|
||||
| Séance | Priorité à la synchronisation du groupe, quitte à retarder le direct |
|
||||
| Commandes de lecture | Tous les spectateurs peuvent changer la source et mettre en pause |
|
||||
| Audio initial | Son émis par l'écran ; disques blancs et jukebox ensuite |
|
||||
| Interaction | Lecteur accessible à 16 blocs en visant ; redimensionnement à proximité |
|
||||
| Référence animés | **ANI-CLI**, projet GitHub ; aucune dépendance existante identifiée dans Sanctuary |
|
||||
|
||||
Volume et muet personnels accompagnent les commandes communes. Les systèmes
|
||||
utilisés par tous les joueurs restent à inventorier ; Windows, macOS Intel,
|
||||
macOS Apple Silicon et Linux ne sont pas considérés comme validés par défaut.
|
||||
Le disque blanc est une intention de la [vision](vision.md), pas une mécanique
|
||||
trouvée dans le code actuel. L'acoustique existante est **Sound Physics Remastered**,
|
||||
mod facultatif [documenté ici](../mods/sound-physics-remastered/PROVENANCE.md).
|
||||
|
||||
## Options de réalisation
|
||||
|
||||
| Option | Ce qu'elle apporte | Travail ou limite déterminante | Avis |
|
||||
| --- | --- | --- | --- |
|
||||
| Dream Displays intact | Sources en ligne et lecture multijoueur déjà prévues | Contrat Sanctuary de pose/coût/filtre à adapter ; synchronisation live insuffisante pour ce contrat | Référence et candidat d'essai |
|
||||
| Extension Sanctuary de Dream Displays | Réutiliser la lecture, ajouter objets, pose et règles de jeu | API expérimentale ; vérifier les points d'extension du filtre, du son et de l'horloge | **Premier chemin à éprouver** |
|
||||
| Fork ciblé de Dream Displays | Modifier précisément synchronisation, sortie audio et rendu | Entretenir le fork et les mises à jour du résolveur et des composants natifs | Repli si l'extension ne suffit pas |
|
||||
| Mod original avec moteur natif | Maîtrise du modèle écran/séance et du son Minecraft | Décodage, composants natifs, reprise réseau et maintenance des sources à prendre en charge | Plus coûteux ; réserver aux blocages démontrés |
|
||||
| Navigateur embarqué, type MCEF | Pages et lecteurs web dans le jeu | Port 26.3/Vulkan non établi, son spatial et horloges peu contrôlables, contraintes des embeds | Mauvais point de départ pour ce besoin |
|
||||
|
||||
Ces avis sont une évaluation d'architecture, pas un benchmark. Une extension
|
||||
qui ne pourrait pas changer la synchronisation ne satisferait pas le besoin
|
||||
complet, même si la pose fonctionnait. Un fork éventuel doit rester une
|
||||
dépendance clairement identifiée ; ne pas copier un moteur dans Sanctuary sans
|
||||
sa provenance et ses notices.
|
||||
|
||||
Proposition d'organisation : un module dédié sous `mods/` pour les cadres,
|
||||
surfaces et séances, un adaptateur pour les claims Sanctuary, et une interface
|
||||
de moteur média. Le nom et les identifiants restent à fixer. Cette séparation
|
||||
permet de changer de moteur sans réécrire la fabrication ou les règles de pose ;
|
||||
elle ne suppose pas que l'API Dream fournisse déjà tous les points nécessaires.
|
||||
|
||||
### Dream Displays : compatibilité vérifiée et limites observées
|
||||
|
||||
Le candidat exact est [Dream Displays 1.10.4 Fabric 26.3](https://modrinth.com/mod/dreamdisplays/version/siUKU04U),
|
||||
publié le 25 octobre 2026. Son JAR a été téléchargé **en mémoire seulement**,
|
||||
son SHA-512 comparé à l'API Modrinth et son `fabric.mod.json` lu :
|
||||
|
||||
- fichier `dreamdisplays-fabric-26.3-1.10.4.jar`, **26 809 153 octets** ;
|
||||
- Loader `>=0.19`, Minecraft `~26.3-`, Java `>=25`, Fabric API requise ;
|
||||
- points d'entrée client et serveur Fabric ; licence déclarée `LGPL-3.0` ;
|
||||
- SHA-512 :
|
||||
`c034f3e890fed144832b27442459d254ad553cbaec592d2da50162711e0f71f2313ec52639c6b1a576890b909b935c98f3699da296801dde7db81ced6d9d9eca`.
|
||||
|
||||
Cela satisfait les versions déclarées du socle **26.3 / Loader 0.19.5 /
|
||||
Fabric API 0.160.5+26.3 / Java 25**. Cela ne valide ni son démarrage avec le
|
||||
pack, ni son affichage, ni ses performances sous Vulkan et Sodium.
|
||||
|
||||
Les sources consultées sont figées au
|
||||
[commit `0d13cb8`](https://github.com/arnodoelinger/dreamdisplays/tree/0d13cb865ac4d4d6783f556b6e8130291056ccef).
|
||||
Constats distincts des annonces du projet :
|
||||
|
||||
1. Le [serveur expose création et redimensionnement](https://github.com/arnodoelinger/dreamdisplays/blob/0d13cb865ac4d4d6783f556b6e8130291056ccef/api/src/main/kotlin/com/dreamdisplays/api/server/ServerDisplays.kt)
|
||||
par deux coins et orientation. L'appelant doit vérifier le mur. Ces API sont
|
||||
marquées `@Unstable` : épingler la version et tester les refus côté serveur.
|
||||
2. Le [rendu détecte Vulkan](https://github.com/arnodoelinger/dreamdisplays/blob/0d13cb865ac4d4d6783f556b6e8130291056ccef/platform/client/common/src/main/kotlin/com/dreamdisplays/platform/client/render/RenderBackendCompat.kt)
|
||||
et prévoit l'envoi des textures par l'encodeur de commandes Minecraft.
|
||||
Un essai Vulkan réel reste nécessaire, y compris pour le filtre pixel.
|
||||
3. Le [suivi de timeline](https://github.com/arnodoelinger/dreamdisplays/blob/0d13cb865ac4d4d6783f556b6e8130291056ccef/platform/client/common/src/main/kotlin/com/dreamdisplays/platform/client/displays/TimelineFollower.kt)
|
||||
abandonne la correction de position lorsque `screen.isLive` est vrai.
|
||||
Pour les VOD, les tolérances initiales sont de **1 500 ms de retard** et
|
||||
**3 500 ms d'avance**, avec élargissement possible du retard toléré.
|
||||
Ce code ne démontre donc pas la synchronisation fine demandée.
|
||||
4. La [sortie audio effective](https://github.com/arnodoelinger/dreamdisplays/blob/0d13cb865ac4d4d6783f556b6e8130291056ccef/media/player/src/main/kotlin/com/dreamdisplays/media/player/pipeline/AudioSink.kt)
|
||||
utilise Java Sound (`SourceDataLine`). Le projet possède sa propre acoustique,
|
||||
mais cette sortie ne traverse pas automatiquement celle de Minecraft.
|
||||
L'interface publique `AudioSink` ne prouve pas qu'un remplacement soit câblable.
|
||||
5. Le [code des écrans](https://github.com/arnodoelinger/dreamdisplays/blob/0d13cb865ac4d4d6783f556b6e8130291056ccef/platform/client/common/src/main/kotlin/com/dreamdisplays/platform/client/displays/DisplayScreen.kt)
|
||||
prévoit déjà un état masqué sans upload vidéo, en maintenant le décodeur.
|
||||
Il faudra distinguer ce gain GPU d'un véritable arrêt du décodage vidéo.
|
||||
|
||||
### Autres moteurs
|
||||
|
||||
[WATERMeDIA v3](https://github.com/WaterMediaTeam/watermedia-v3) décrit des
|
||||
moteurs Vulkan et OpenAL séparés. C'est une piste technique réelle, mais le
|
||||
[commit consulté `2c3dc07`](https://github.com/WaterMediaTeam/watermedia-v3/tree/2c3dc07148a3a16d99d4b9b530e76e0e2c066828)
|
||||
ne déclare pas 26.3 dans ses propriétés, et l'API Modrinth ne renvoie aucune
|
||||
version Fabric 26.3 pour `watermedia` ou `waterframes` lors de cette étude.
|
||||
Son [texte de licence](https://github.com/WaterMediaTeam/watermedia-v3/blob/2c3dc07148a3a16d99d4b9b530e76e0e2c066828/LICENSE.md)
|
||||
est **Defensive Public Source (Non-Commercial) v1.0.1** : ne pas le traiter
|
||||
comme une bibliothèque librement interchangeable avec le socle GPL.
|
||||
|
||||
Un décodeur FFmpeg ou libVLC peut produire des images CPU et du PCM, puis
|
||||
Sanctuary peut les envoyer à ses moteurs graphique et audio. C'est réalisable
|
||||
en architecture ; cela laisse à éprouver les copies mémoire, les composants
|
||||
natifs par système et la tenue des horloges. Aucun gain matériel ni absence
|
||||
de copie ne doit être promis sans mesure. Pour
|
||||
[MCEF](https://github.com/CinemaMod/mcef), aucune version Fabric 26.3 n'est
|
||||
retournée par la même requête Modrinth ; cela ne prouve pas l'absence d'un port
|
||||
sur un autre canal, mais ne permet aucune intégration immédiate vérifiée.
|
||||
|
||||
## Pose et interactions proposées à partir des décisions
|
||||
|
||||
Fabriquer un **cadre de redstone** avec huit bâtons et une redstone centrale.
|
||||
Poser le cadre sur un mur crée une ancre 1 × 1 et ouvre le menu. L'ancre reste
|
||||
le coin **inférieur gauche vu de face** ; le choix du mur fixe l'orientation.
|
||||
Le menu donne largeur, hauteur, aperçu dans le monde et coût restant.
|
||||
Annuler conserve le cadre 1 × 1 déjà posé ; confirmer applique l'agrandissement.
|
||||
|
||||
Les dimensions sont entières, sans fusion automatique avec les écrans voisins.
|
||||
Des boutons 4 × 3, 8 × 4 et 16 × 9 peuvent accompagner la saisie libre. Une
|
||||
limite initiale **proposée**, à mesurer, serait 32 × 18 blocs : la taille dans
|
||||
le monde ne doit pas imposer le décodage d'une vidéo 4K.
|
||||
L'image conserve son ratio par défaut, avec bandes si nécessaire.
|
||||
|
||||
Le coût a été révisé par Koka après les essais du moteur : **un cadre pour
|
||||
l'ancre, aucun coût pour agrandir**. Réduire ne rend aucun objet ; casser
|
||||
l'ancre rend un seul cadre en survie. Le [prototype MEDIA-04](media-anchor-prototype.md)
|
||||
conserve le menu Dream d'origine pour les flux et dessine le cadre sur toute
|
||||
la surface, avec dimensions libres et budgets serveur configurables.
|
||||
|
||||
Avant confirmation, vérifier tout le rectangle : support mural, espace devant,
|
||||
absence de chevauchement, limites du monde, inventaire et droits de construction
|
||||
sur chaque chunk traversé. La propriété des commandes de lecture reste distincte
|
||||
du droit de déplacer ou casser une construction. Perdre un support doit déposer
|
||||
l'écran une seule fois ; un chunk déchargé ne constitue pas un support détruit.
|
||||
Le changement de dimensions ne charge pas de chunks de force.
|
||||
|
||||
Le rectangle entier est interactif. Le rayon part **des yeux du joueur**, dans
|
||||
la direction du viseur ; il rencontre le premier obstacle ou écran admissible.
|
||||
Le serveur recalcule portée, visibilité, dimension et cible pour chaque action :
|
||||
un paquet client ne suffit pas à autoriser l'interaction.
|
||||
|
||||
- **Clic droit jusqu'à 16 blocs** : ouvrir le lecteur ; changer la vidéo,
|
||||
lecture/pause et déplacement dans une VOD agissent sur la séance commune.
|
||||
- **Volume, muet, qualité et participation** : réglages personnels.
|
||||
- **Maj + clic droit à portée habituelle de construction** : dimensions et
|
||||
entretien pour les joueurs ayant les droits de construction. À distance,
|
||||
présenter le lecteur sans accorder la modification de géométrie.
|
||||
- Une action explicite du lecteur modifie la séance ; ouvrir le menu seul
|
||||
ne met pas tous les joueurs en pause. Afficher qui a déclenché une action
|
||||
et borner sa fréquence pour éviter les répétitions accidentelles.
|
||||
|
||||
Une seule ancre logique et un seul rectangle sont préférables à une entité
|
||||
et un lecteur par bloc. L'index spatial doit couvrir toute la surface : un
|
||||
grand écran ne doit pas disparaître parce que son ancre est hors du champ.
|
||||
Prévoir les libellés FR/EN, par exemple « Cadre de redstone / Redstone frame »,
|
||||
« Largeur / Width », « Hauteur / Height » et « Séance partagée / Shared session ».
|
||||
Les identifiants de nouveaux objets seront fixés avant leur premier enregistrement.
|
||||
|
||||
## Synchronisation et charge
|
||||
|
||||
Le serveur garde l'identité du média, l'identifiant de séance, la révision,
|
||||
l'état lecture/pause, une position de référence et une horloge. Les clients
|
||||
récupèrent le média directement auprès de sa source, le décodent et l'affichent.
|
||||
Les images et les échantillons audio ne transitent pas par les paquets Minecraft.
|
||||
Cela épargne le trafic vidéo au serveur ; chaque spectateur utilise néanmoins
|
||||
sa propre bande passante. « Sans télécharger » signifie sans télécharger
|
||||
préalablement tout le fichier : les données doivent toujours arriver chez lui.
|
||||
|
||||
Pour une VOD, estimer le décalage d'horloge avec plusieurs échanges réseau,
|
||||
programmer le démarrage après une prélecture et calculer la position attendue
|
||||
depuis une horloge monotone, indépendante du temps du monde et des TPS.
|
||||
Corriger progressivement les petits écarts si le lecteur le permet ; réserver
|
||||
les sauts aux écarts importants. Les événements lecture/pause/source sont
|
||||
immédiatement annoncés avec leur instant d'effet ; les états périodiques sont
|
||||
espacés. Les révisions empêchent un ancien paquet de rétablir une ancienne vidéo.
|
||||
|
||||
Un entrant rejoint la position commune. Un client lent rebufférise puis rejoint
|
||||
la séance ; proposition : il ne met pas automatiquement tous les autres en pause.
|
||||
Si l'API amont ne permet pas cette horloge et ces corrections, un fork ou un
|
||||
autre moteur devient nécessaire. Diminuer ses seuils de seek ne suffit pas à
|
||||
prouver une synchronisation plus stable.
|
||||
|
||||
Pour le direct, lancer la même URL simultanément ne garantit pas le même contenu
|
||||
au même instant. Il faut une référence temporelle commune dans le média, puis
|
||||
viser cette référence avec un retard partagé. Les dates de segments HLS
|
||||
[`EXT-X-PROGRAM-DATE-TIME`](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.6)
|
||||
peuvent aider lorsqu'elles existent ; les discontinuités et variantes doivent
|
||||
être traitées. Sans timeline comparable ou fenêtre de reprise suffisante,
|
||||
signaler une synchronisation approximative ou refuser le mode strict.
|
||||
|
||||
L'[embed officiel Twitch](https://dev.twitch.tv/docs/embed/video-and-clips/)
|
||||
ne fournit pas de seek live et réserve `getCurrentTime` aux VOD : un navigateur
|
||||
ne résout donc pas à lui seul la contrainte. Publicités individualisées,
|
||||
buffering, restrictions d'accès ou variantes différentes peuvent séparer les
|
||||
spectateurs. Une source commune contrôlée ou un relais média **distinct**
|
||||
pourrait améliorer la maîtrise, mais ajouterait exploitation et bande passante ;
|
||||
ce serait un choix séparé, jamais une charge vidéo implicite du serveur Minecraft.
|
||||
|
||||
Objectifs de prototype proposés, **non mesurés** : écart entre clients ≤250 ms
|
||||
pour une VOD stable et ≤500 ms pour un live offrant une référence commune,
|
||||
au 95e percentile sur dix minutes. Mesurer séparément retard sur le direct,
|
||||
écart entre spectateurs et désynchronisation audio/vidéo. Un tampon de plusieurs
|
||||
secondes est envisageable ; sa valeur dépend de la source et des connexions.
|
||||
|
||||
## Pixellisation et culling
|
||||
|
||||
Un écran `W × H` blocs a une grille de `16W × 16H` pixels :
|
||||
8 × 4 → 128 × 64 ; 16 × 9 → 256 × 144. Réduire l'image avec préfiltrage,
|
||||
puis agrandir sans lissage pour conserver des pixels nets. Un simple
|
||||
échantillonnage nearest d'une vidéo haute résolution peut scintiller ; comparer
|
||||
le résultat sur du mouvement. Le filtre reste une option par écran ; un réglage
|
||||
personnel de qualité peut limiter la charge sans changer la séance.
|
||||
|
||||
Ce filtre réduit le coût d'affichage et de transfert si la réduction est faite
|
||||
avant l'upload. Il ne réduit pas automatiquement le débit ou le coût du décodage
|
||||
d'une source 1080p. Sélectionner aussi une variante adaptée et borner cadence,
|
||||
mémoire et nombre de séances actives. Partager un décodeur entre plusieurs
|
||||
surfaces **de la même séance**, pas simplement entre deux URLs identiques
|
||||
qui pourraient être lues à des positions différentes.
|
||||
|
||||
| État local | Vidéo | Audio |
|
||||
| --- | --- | --- |
|
||||
| Surface visible | Décodage et upload dans les budgets fixés | Son spatial |
|
||||
| Hors champ ou derrière le joueur, son audible | Aucun dessin ni upload ; supprimer le décodage vidéo si le moteur le permet | Continue |
|
||||
| Masqué par un mur | Même politique de visibilité, sans confondre masquage et mute | Propagation et absorption acoustiques |
|
||||
| Hors portée visuelle et auditive, sans aperçu ouvert | Libérer le lecteur après une courte temporisation | Arrêt local |
|
||||
| Retour dans la zone | Reprendre la position de séance actuelle | Reprendre synchronisé |
|
||||
|
||||
L'occlusion visuelle ne prouve pas l'inaudibilité. L'abonnement à l'audio doit
|
||||
rester indépendant de la visibilité et du suivi des entités Minecraft.
|
||||
Éviter les changements incessants à la limite de portée. Le déchargement d'un
|
||||
lecteur local ne met pas la séance serveur en pause et ne force aucun chunk.
|
||||
|
||||
## Audio, disques et sources
|
||||
|
||||
Le premier écran émet son propre son à un point de sa surface, avec atténuation
|
||||
spatiale, volume personnel et catégorie dédiée. Pour que Sound Physics
|
||||
l'affecte, il faut fournir le PCM au moteur audio Minecraft ou appeler une
|
||||
intégration explicite sur une source compatible. Son
|
||||
[code `processSound`](https://github.com/henkelmax/sound-physics-remastered/blob/06368ea194f056097201f8395ea418c831d562da/common/src/main/java/com/sonicether/soundphysics/SoundPhysics.java)
|
||||
travaille sur des sources OpenAL : Java Sound seul ne suffit pas. Même une
|
||||
source OpenAL extérieure doit partager le contexte et les hooks appropriés.
|
||||
Éviter d'appliquer simultanément l'acoustique Dream et celle de Sound Physics.
|
||||
Le son spatial de base doit fonctionner lorsque ce dernier est absent ou éteint.
|
||||
|
||||
Le disque blanc pourra porter une référence stable validée, jamais un fichier
|
||||
audio complet ni une URL signée expirante sauvegardée comme identité. Proposition :
|
||||
renommer avec une référence YouTube reconnue permet son inscription ; un petit
|
||||
menu de collage évite les limites pratiques d'une longue URL dans un nom.
|
||||
Le jukebox créera ensuite une séance audio avec le même modèle de serveur et
|
||||
les mêmes contrôles personnels. Enceintes liées et mixeur spatial restent un
|
||||
lot ultérieur, pour ne pas multiplier les décodages ni faire doubler le son
|
||||
de l'écran et du jukebox.
|
||||
|
||||
| Source | Faisabilité et périmètre proposé |
|
||||
| --- | --- |
|
||||
| Fichier vidéo/audio HTTP(S), flux HLS compatible | Première preuve du lecteur, du son et de l'horloge ; vérifier les codecs exacts |
|
||||
| YouTube VOD puis live | Connecteur de résolution ; revalider les liens expirants et les erreurs de lecture |
|
||||
| Twitch | Connecteur live spécifique et preuve de timeline commune ; aucune promesse de synchro stricte par simple URL |
|
||||
| Page contenant un lecteur HTML5 | Une page n'est pas une URL média ; connecteur nécessaire si elle cache son manifeste ou dépend de scripts/authentification |
|
||||
| ANI-CLI | Référence de recherche/résolution de sources, à traiter séparément du lecteur Minecraft |
|
||||
| Spotify | Ne pas annoncer la lecture de morceaux complets comme une simple URL audio |
|
||||
|
||||
[ANI-CLI](https://github.com/pystardust/ani-cli/tree/0301d67d5768d332b049821a30082ad43d9a215a)
|
||||
est un outil shell qui résout des liens et lance un lecteur externe. Une
|
||||
intégration éventuelle doit séparer catalogue, sélection d'épisode, résolution,
|
||||
pistes audio/sous-titres et lecture. Le lien peut nécessiter des métadonnées
|
||||
de requête et expirer ; il ne devient pas une source universelle parce qu'il
|
||||
fonctionne dans mpv. Ne pas imposer Bash et ANI-CLI à tous les clients avant
|
||||
d'avoir défini et éprouvé ce connecteur sur leurs systèmes.
|
||||
|
||||
La [politique Spotify](https://developer.spotify.com/policy) réserve le streaming
|
||||
aux abonnés Premium et exclut notamment les jeux et certains usages simultanés.
|
||||
Ce scénario n'a donc pas de voie officielle simple identifiée. Une référence
|
||||
Spotify pourrait servir à identifier un titre et proposer une autre source
|
||||
explicitement choisie ; cela ne constitue pas une prise en charge audio Spotify.
|
||||
|
||||
Les URLs média doivent être validées côté serveur et client : HTTP(S), limites
|
||||
de taille et de redirections, pas de fichier local ni d'accès réseau privé
|
||||
déclenché par un autre joueur. Les liens autorisés et la participation restent
|
||||
configurables ; aucun cookie personnel partagé ni URL à jeton dans les journaux.
|
||||
|
||||
## Lots vérifiables proposés
|
||||
|
||||
1. **MEDIA-02 — Faisabilité du moteur.** Monde neuf de développement, serveur et
|
||||
deux clients 26.3 ; vidéo de test horodatée et flux live contrôlé, Vulkan
|
||||
avec Sodium puis sans. Vérifier image, son, dérive, retour dans la zone,
|
||||
mémoire et arrêt propre. Produire une décision extension/fork/moteur original.
|
||||
2. **MEDIA-03 — Cadre et surface.** Recette, menu FR/EN, aperçu, coût par bloc,
|
||||
restitution, mur et claims, raycast 16 blocs, clics sur toute la surface,
|
||||
concurrence et rechargement. Source contrôlée seulement, puis filtre 16 pixels.
|
||||
3. **MEDIA-04 — Séances et sources publiques.** Contrôles communs à tous les
|
||||
spectateurs, arrivée tardive, buffering et déconnexion ; YouTube puis Twitch,
|
||||
avec métriques et limites annoncées pour chaque source.
|
||||
4. **MEDIA-05 — Disque blanc.** Inscription, lecture audio par jukebox, éjection,
|
||||
sauvegarde et reconnexion ; réutilisation du lecteur et de l'horloge.
|
||||
5. **MEDIA-06 — Sources complémentaires.** ANI-CLI/catalogue et sous-titres,
|
||||
puis éventuellement enceintes et mixeur selon les besoins constatés.
|
||||
|
||||
Pour chaque lot de code : branche dédiée, prochain compteur beta libre,
|
||||
`./gradlew check build`, tests ciblés du comportement ; `assemblePack` lorsque
|
||||
la distribution change. Vérifier les composants natifs par OS/architecture,
|
||||
leurs licences, leur intégrité et les téléchargements du premier lancement.
|
||||
Épingler les artefacts packwiz avant une livraison demandée. Aucun décodeur
|
||||
ni navigateur ne doit être chargé par erreur côté serveur dédié.
|
||||
Toute donnée persistante nouvelle doit avoir son contrat de version avant
|
||||
son premier usage dans un monde existant.
|
||||
|
||||
## Vérifications de cette étude et limites
|
||||
|
||||
- État Git initial lu ; travail isolé depuis beta.293 et changements beta.294
|
||||
conservés dans leur checkout.
|
||||
- Requêtes Modrinth filtrées exactement par `game_versions=["26.3"]` et
|
||||
`loaders=["fabric"]` : huit versions Dream, zéro pour chacun des projets
|
||||
`watermedia`, `waterframes`, `mcef` et `webdisplays` au moment de la lecture.
|
||||
- Intégrité et métadonnées du JAR Dream 1.10.4 vérifiées sans l'installer.
|
||||
- Sources amont et contrats d'API lus aux références précisées dans ce document.
|
||||
- Aucune compilation, mesure de performances, lecture audible, synchronisation
|
||||
réelle à deux clients ou validation graphique n'a été réalisée pour ce ticket
|
||||
documentaire. Aucun essai OpenGL ne fait partie du plan de validation.
|
||||
- Les plafonds de taille et de lecteurs, le comportement d'un client lent,
|
||||
les restitutions et l'inventaire des systèmes clients restent des propositions
|
||||
à préciser dans les lots de réalisation.
|
||||
|
||||
Le choix d'implémentation reste conditionné par MEDIA-02. Aucun artefact pack,
|
||||
serveur Beta, canal stable, installation Prism ou monde personnel n'est modifié.
|
||||
@@ -0,0 +1,88 @@
|
||||
# MEDIA-06 — interaction et épaisseur des cadres
|
||||
|
||||
Retours du 26 octobre 2026 après essai de beta.296. Branche
|
||||
`codex/media-frame-fixes`, **beta.297**, module Media **0.3.1**.
|
||||
[Livraison complète du 27 octobre 2026](release-beta297.md).
|
||||
|
||||
## Comportement demandé
|
||||
|
||||
Le menu largeur/hauteur s'ouvre automatiquement seulement à la pose. Ensuite,
|
||||
clic droit et **Maj + clic droit** ouvrent le lecteur Dream. Le bouton
|
||||
**Taille / Size** de ce lecteur reste le point d'entrée pour redimensionner,
|
||||
avec les mêmes vérifications serveur de proximité et de construction.
|
||||
Appliquer une taille garde le menu ouvert pour l'ajuster ; aucune modification
|
||||
du coût, de la recette ou des tailles autorisées.
|
||||
|
||||
Les trois chemins sont alignés : raycast client, paquet d'ouverture serveur
|
||||
et interaction directe avec le bloc. La pose initiale conserve sa demande
|
||||
explicite du menu de taille.
|
||||
|
||||
## Rendu
|
||||
|
||||
Le pixel rouge était un repère d'ancrage ajouté par Sanctuary. Il est retiré
|
||||
du cadre du monde et de l'aperçu de taille.
|
||||
|
||||
Le cadre précédent utilisait le repère vidéo Dream. Celui-ci applique une
|
||||
échelle Z nulle : c'est un dessin plat, sans faces latérales. Le nouveau
|
||||
maillage est un anneau fermé en unités de blocs : quatre bandes avant,
|
||||
quatre arrière, quatre côtés extérieurs et quatre faces de feuillure.
|
||||
Épaisseur et largeur du bois : **1/16 de bloc**, indépendamment de la taille.
|
||||
Le contour extérieur est exactement celui de l'écran, au contact du mur.
|
||||
La vidéo conserve son plan et ses proportions, en retrait du bois.
|
||||
|
||||
Les sommets sont calculés depuis la géométrie de l'ancre et ramenés dans le
|
||||
repère du renderer Dream sans passer par sa transformation vidéo aplatie.
|
||||
Ils gardent les mêmes positions dans les passes normale et de reprise :
|
||||
aucune deuxième bordure décalée. Le pipeline Vulkan Dream et sa profondeur
|
||||
restent utilisés, sans nouveau shader.
|
||||
|
||||
La vidéo et les sous-titres sont masqués depuis l'arrière du plan, et depuis
|
||||
les côtés lorsque l'observateur est derrière la face avant du bois et hors
|
||||
de l'ouverture. Cela évite un liseré vidéo en vue rasante ; une caméra située
|
||||
dans l'ouverture conserve l'image. Le cadre en volume reste visible.
|
||||
Le son reste actif, et les uploads vidéo
|
||||
sont suspendus comme pour un écran hors champ. Les écrans Dream ordinaires
|
||||
gardent leur rendu.
|
||||
|
||||
L'ancre invisible ne dessine plus son contour de sélection vanilla 1 × 1 à
|
||||
l'intérieur d'un grand écran. Sa forme d'occlusion est explicitement vide ;
|
||||
sa forme de ciblage reste disponible pour casser le bloc. Les validations
|
||||
du mur et le retrait de l'écran côté serveur sont conservés.
|
||||
|
||||
## Données et livraison
|
||||
|
||||
Aucun identifiant, paquet ou format de sauvegarde ne change. Les écrans posés
|
||||
en beta.296 retrouvent le nouveau rendu à partir de leurs données existantes,
|
||||
sans remplacement de blocs ni conversion de monde. Aucun monde personnel
|
||||
ou serveur personnel n'est utilisé pour la validation.
|
||||
|
||||
Le correctif est publié en beta.297 et installé sur la Beta, le site et la
|
||||
même instance Prism. Les essais de développement ont précédé cette livraison.
|
||||
|
||||
## Validation
|
||||
|
||||
- `check build assemblePack assembleServerPack` : **réussi en 4 min 17 s**,
|
||||
158 tâches, **18 GameTests requis** (`property270,claims272,claims277,claims278`).
|
||||
- Contrat Java du maillage : 16 faces non dégénérées, bornes exactes et
|
||||
épaisseur constante sur quatre tailles et les quatre orientations ; vidéo
|
||||
visible dans l'ouverture et masquée derrière le bois depuis les côtés.
|
||||
- **17 contrôles interactifs** réussis : nouvelle pose, réouverture normale,
|
||||
Maj réellement maintenue, bouton Taille et protections/inventaire existants.
|
||||
- Après correction du dernier liseré vidéo : contrats Media et assemblages
|
||||
ciblés réussis en **21 s**, puis nouvel essai avec le JAR final embarqué.
|
||||
- Deux clients **Vulkan**, Sodium et Sound Physics, vidéo synthétique sur
|
||||
écran **9 × 5**. Captures inspectées de face, de droite, de gauche, du haut
|
||||
et de l'arrière : côtés présents, aucun repère rouge ni fente colorée.
|
||||
- Depuis droite/gauche/haut/arrière : uploads de l'image arrêtés et curseur
|
||||
OpenAL toujours en mouvement ; retour devant : uploads repris.
|
||||
- Sept tests du rapport et compilation syntaxique Python réussis.
|
||||
|
||||
Le premier laboratoire `frame-fixes-01` valide l'interaction ; ses premières
|
||||
vues rasantes ont révélé le liseré restant. Seules les captures de
|
||||
`build/media-prototype/frame-fixes-02/` valident son retrait final. Le maillage
|
||||
est testé numériquement sur quatre orientations ; le parcours graphique est
|
||||
orienté sud. Aucune nouvelle validation de live public ou d'écoute subjective.
|
||||
|
||||
[Relevé structuré](media-frame-fixes-results.json). Le
|
||||
[reçu de livraison](release-beta297.md) distingue ces essais du déploiement
|
||||
et de ses vérifications opérationnelles.
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"ticket": "MEDIA-06",
|
||||
"version": "beta.297",
|
||||
"media_version": "0.3.1",
|
||||
"state": "published and installed on Beta server, Web distribution and existing Prism instance",
|
||||
"delivery": {
|
||||
"date": "2026-10-27",
|
||||
"receipt": "release-beta297.md",
|
||||
"source_tag": "bad2bdb0d12295a736aee64e08b9f6f5a8ae81d3",
|
||||
"packwiz_commit": "e40b0d372af9fa43a301b842661c131f4e69f7c7",
|
||||
"fresh_check_build_assemble": "passed, 2m57s, 158 tasks, 18 required GameTests; identical JAR to final Vulkan validation"
|
||||
},
|
||||
"branch": "codex/media-frame-fixes",
|
||||
"artifact_sha256": "f9bfffb0198abb8a4eae8a6d76a1ad3f1190edda7ce33f719bd47f0f4da27d9d",
|
||||
"interaction_suite": {
|
||||
"passed": [
|
||||
"one frame consumed on placement",
|
||||
"first placement opens dimensions",
|
||||
"reopening near the anchor opens native player",
|
||||
"Shift-right-click also opens native player",
|
||||
"custom 7x4 and free enlargement",
|
||||
"shrinking does not refund frames",
|
||||
"resizing keeps the same display",
|
||||
"oversize refused",
|
||||
"incomplete wall refused",
|
||||
"stale revision refused",
|
||||
"native delete, overlap, obstacle and unloaded chunks refused",
|
||||
"building permission required",
|
||||
"original Dream reader on remote overlay while holding frame",
|
||||
"forged remote resize refused",
|
||||
"wall blocks normal interaction",
|
||||
"wall blocks forged open packet",
|
||||
"original Dream reader available to second spectator"
|
||||
]
|
||||
},
|
||||
"final_graphics_checks": {
|
||||
"placement_opens_dimensions": true,
|
||||
"ordinary_click_player": true,
|
||||
"shift_click_player": true,
|
||||
"right_video_hidden_audio_continues": true,
|
||||
"left_video_hidden_audio_continues": true,
|
||||
"top_video_hidden_audio_continues": true,
|
||||
"back_video_hidden_audio_continues": true,
|
||||
"front_picture_resumes": true
|
||||
},
|
||||
"environment": {
|
||||
"minecraft": "26.3",
|
||||
"backend": "Vulkan",
|
||||
"clients": 2,
|
||||
"dream": "1.10.4",
|
||||
"sound_physics": "1.5.1+26.3",
|
||||
"screen_blocks": [
|
||||
9,
|
||||
5
|
||||
],
|
||||
"camera_views": [
|
||||
"front",
|
||||
"right grazing",
|
||||
"left grazing",
|
||||
"top grazing",
|
||||
"back",
|
||||
"front after hidden"
|
||||
]
|
||||
},
|
||||
"validation": {
|
||||
"full_check_build_assemble": "passed, 4m17s, 158 tasks, 18 required GameTests",
|
||||
"final_client_visibility_contracts_and_assembly": "passed, 21s, 27 tasks",
|
||||
"image_inspection": "five final views inspected; no red marker, no colored video slit through sides",
|
||||
"python_report_tests": 7
|
||||
},
|
||||
"diagnostic": "frame-fixes-01 grazing images precede the final video visibility fix; final images are frame-fixes-02",
|
||||
"limits": [
|
||||
"No new public streaming or audio listening validation",
|
||||
"Graphical wall faces south; all four orientations checked numerically",
|
||||
"Graphical tests used development instances; deployment to the existing personal installation is documented in the delivery receipt, no personal world opened"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,232 @@
|
||||
# MEDIA-02 — Prototype de lecture à deux clients Vulkan
|
||||
|
||||
Suite : [MEDIA-03 — correction de synchronisation et pont audio](media-sync-audio-prototype.md).
|
||||
Les mesures ci-dessous décrivent Dream Displays intact, avant cette extension.
|
||||
|
||||
Branche `codex/media-playback-prototype`, **26 octobre 2026**, base Sanctuary
|
||||
**beta.293**, à la suite de [MEDIA-01](media-displays-study.md).
|
||||
|
||||
Le prototype utilise de vrais clients Minecraft réseau et un serveur dédié
|
||||
local. Aucun cadre Sanctuary n'est développé. Le module de mesure
|
||||
[`mods/media-probe`](../mods/media-probe/README.md) est compilé séparément et
|
||||
n'entre dans aucun pack : aucune livraison du mod Sanctuary, aucun compteur
|
||||
beta ni manifeste packwiz modifié.
|
||||
|
||||
## Décision issue de l'essai
|
||||
|
||||
**Dream Displays constitue une base de rendu et de lecture utilisable sous
|
||||
Vulkan, mais son comportement intact ne satisfait pas la synchronisation fine
|
||||
du groupe et ne fait pas passer le son vidéo dans Sound Physics.** La prochaine
|
||||
preuve doit porter sur l'horloge commune du live et une sortie PCM compatible
|
||||
avec le moteur audio Minecraft, avant les cadres.
|
||||
|
||||
Les premières tentatives avaient un défaut du laboratoire : les deux clients
|
||||
choisissaient la même couleur dans Hello World. L'un restait dans le formulaire,
|
||||
pendant que l'autre commençait à lire. Koka l'a observé et signalé. Le lancement
|
||||
retenu utilise des couleurs distinctes et attend **les deux joueurs admis,
|
||||
dans le monde, sans menu bloquant**, avant de transmettre la nouvelle source.
|
||||
Le départ décalé de cette première tentative n'est pas une mesure de la dérive
|
||||
du lecteur. Les résultats ci-dessous viennent de la relance `review-05` corrigée.
|
||||
|
||||
## Environnement et méthode
|
||||
|
||||
- Minecraft **26.3**, Fabric Loader **0.19.5**, API **0.160.5+26.3**, Java **25**.
|
||||
- Dream Displays **1.10.4**, JAR exact `siUKU04U`, SHA-512 vérifié par le lanceur.
|
||||
- Sound Physics Remastered **1.5.1+26.3** ; activé et désactivé uniquement dans
|
||||
les configurations des clients de laboratoire.
|
||||
- Série principale : Sodium **0.9.2+mc26.3**, backend **Vulkan**, MoltenVK **1.4.2**,
|
||||
Apple M1 et **8 Gio de RAM système**. Serveur et deux clients sur le même Mac.
|
||||
- Tas plafonnés à 768 Mio serveur et 1 536 Mio par client. Vue de trois chunks,
|
||||
deux joueurs créatifs dans un monde plat neuf, graine **2602**, écran Dream
|
||||
de béton noir de 9 × 5 blocs. Shaders Sanctuary éteints.
|
||||
- Source synthétique H.264/AAC de **320 × 180 à 30 images/s**, durée **660 s**,
|
||||
motif animé et numéro d'image encodé en 16 bandes noires/blanches. Le live HLS
|
||||
répète cette source, avec segments d'une seconde, fenêtre de douze segments
|
||||
et `EXT-X-PROGRAM-DATE-TIME`. Source desservie sur loopback avec HTTP Range.
|
||||
- FFmpeg système **8.1.2**, sélectionné par le cache amont isolé. La bibliothèque
|
||||
libav embarquée ne s'ouvre pas sur cette machine ; Dream utilise son chemin
|
||||
natif de tuyauterie avec processus FFmpeg. Ce repli fait partie du résultat.
|
||||
Des logs montrent des sorties de décodage redimensionnées à 1296 × 720 :
|
||||
la petite source ne signifie donc pas que toutes les copies internes sont petites.
|
||||
|
||||
Le code temporel est vérifié après encodage aux secondes 1, 10 et 25 : images
|
||||
30, 300 et 750 retrouvées. La sonde lit ensuite ce code et note les **uploads
|
||||
GPU réussis** dans chaque client, avec leur heure. Le rapport aligne les
|
||||
observations distantes d'au plus 150 ms, corrige leur décalage d'observation
|
||||
et sépare les quinze premières secondes de chaque phase. Le bouclage de la
|
||||
source est pris en compte. Résolution temporelle du média : environ 33 ms.
|
||||
|
||||
Ce sont des mesures d'envoi d'images au GPU, **pas du balayage physique de
|
||||
l'écran**. Les captures Minecraft vérifient que les surfaces sont réellement
|
||||
visibles. Le rapport expose aussi les échantillons manquants et les erreurs
|
||||
de sonde ; une absence de données n'est jamais un succès.
|
||||
|
||||
## Résultats de la série avec Sodium
|
||||
|
||||
Écarts absolus entre les deux clients, après les quinze premières secondes :
|
||||
|
||||
| Phase | Durée observée | Paires | Médiane | 95e percentile | Maximum |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| VOD, départ avec les deux clients prêts | 142 s | 504 | 181 ms | **337 ms** | 368 ms |
|
||||
| Même VOD, Sound Physics activé | 126 s | 443 | 242 ms | **332 ms** | 335 ms |
|
||||
| Live, départ commun | 175 s | 640 | 25 ms | **57 ms** | 75 ms |
|
||||
| Live, Sound Physics activé | 90 s | 299 | 49 ms | **128 ms** | 134 ms |
|
||||
| Live, après arrêt puis retour du client B | 139 s | 374 | 549 ms | **580 ms** | 592 ms |
|
||||
| Retour des caméras vers l'écran | 35 s | 80 | 611 ms | **636 ms** | 639 ms |
|
||||
| Fin du live après le retour | 91 s | 304 | 721 ms | **741 ms** | 745 ms |
|
||||
|
||||
Les durées incluent les transitions et, pour la reconnexion, l'absence du client ;
|
||||
le nombre de paires indique ce qui a effectivement été comparable. Le client B
|
||||
est arrêté, attendu vingt secondes, puis relancé dans le live en cours.
|
||||
Il ne s'agit pas d'un simple joueur simulé sur le serveur.
|
||||
|
||||
Les deux clients tiennent une médiane de **30 FPS** dans les phases de lecture
|
||||
stable de cette scène. Aucun échec de sonde n'est enregistré dans la série.
|
||||
Cela ne constitue pas une validation de plusieurs écrans, de contenu 1080p/4K
|
||||
ou de machines différentes.
|
||||
|
||||
Les cibles exploratoires de MEDIA-01 étaient 250 ms pour une VOD et 500 ms
|
||||
pour un live. La VOD dépasse sa cible et le live la dépasse après reconnexion.
|
||||
Le bon résultat du départ live reflète ici une source et un réseau locaux
|
||||
communs ; il ne prouve pas une correction serveur de la position live.
|
||||
Les sources amont examinées dans MEDIA-01 ignorent justement cette correction
|
||||
pour les médias live. Les résultats ne démontrent pas une causalité de Sound
|
||||
Physics sur la dérive : l'ordre des phases et le temps écoulé diffèrent.
|
||||
|
||||
## Audio et visibilité
|
||||
|
||||
L'activité réelle de la ligne **Java Sound** est observée dans les deux clients.
|
||||
Sound Physics initialise ses effets EFX et la sonde voit notamment ses appels
|
||||
pour les sons témoins `minecraft:block.note_block.pling`, joués toutes les cinq
|
||||
secondes. La ligne vidéo continue à avancer pendant l'activation de Sound Physics
|
||||
et le rechargement du moteur audio Minecraft.
|
||||
|
||||
**Coexistence observée ; intégration acoustique vidéo absente.** Le son vidéo
|
||||
sort par `SourceDataLine`, tandis que Sound Physics traite les sources OpenAL
|
||||
Minecraft. Aucun nouvel appel Sound Physics correspondant à la source vidéo
|
||||
n'apparaît. Le traitement spatial propre de Dream est désactivé pour cet essai,
|
||||
afin de ne pas lui attribuer les effets de Sound Physics. Une passerelle PCM
|
||||
ou une autre sortie audio est donc requise. Aucune écoute subjective de
|
||||
réverbération, mesure de sortie physique ou capture du microphone n'est revendiquée.
|
||||
|
||||
Pendant la phase hors champ de 35 secondes, les caméras regardent à l'opposé :
|
||||
|
||||
| Client | Intervalle comparable | Nouveaux uploads GPU | Trames PCM jouées |
|
||||
| --- | ---: | ---: | ---: |
|
||||
| A | 34,25 s | **0** | **1 510 454** |
|
||||
| B | 34,00 s | **0** | **1 499 165** |
|
||||
|
||||
L'audio continue donc quand l'image n'est plus envoyée au GPU. Au retour,
|
||||
les uploads reprennent. Le décodeur reste actif : ce résultat valide le masquage
|
||||
des uploads, pas une économie complète de décodage. Le coût de plusieurs sources
|
||||
et l'occlusion par un mur restent à tester séparément.
|
||||
|
||||
## Reproduire dans un nouveau laboratoire
|
||||
|
||||
Java 25, Python **3.11 ou plus récent**, FFmpeg avec encodeur H.264 et un poste
|
||||
graphique Vulkan sont requis. Garder de l'espace disque pour les dépendances,
|
||||
le swap du système et les mondes de test ; la saturation observée lors d'une
|
||||
première tentative a été exclue de la série retenue. Seuls des doublons de
|
||||
médias et binaires générés par ce laboratoire ont été supprimés ou dédupliqués.
|
||||
|
||||
```sh
|
||||
JAVA_HOME=$(/usr/libexec/java_home -v 25) ./gradlew \
|
||||
:sanctuary-test:exportDuoLaunch --max-workers=1 \
|
||||
-Dorg.gradle.jvmargs=-Xmx1G
|
||||
python3.14 scripts/media_lab.py prepare --run essai-neuf
|
||||
python3.14 scripts/media_lab.py server --run essai-neuf
|
||||
# Attendre MEDIA_PROBE_SERVER_READY, puis lancer les deux clients :
|
||||
python3.14 scripts/media_lab.py client-a --run essai-neuf
|
||||
python3.14 scripts/media_lab.py client-b --run essai-neuf
|
||||
# Dans un terminal distinct ; cette commande reste active :
|
||||
python3.14 scripts/media_lab.py serve --run essai-neuf
|
||||
```
|
||||
|
||||
Dans un autre terminal, conserver chaque phase de lecture deux à trois minutes
|
||||
avant la transition suivante. Les commandes ci-dessous décrivent les transitions,
|
||||
pas un scénario à exécuter sans attente :
|
||||
|
||||
```sh
|
||||
python3.14 scripts/media_lab.py control --run essai-neuf \
|
||||
--phase vod --source vod
|
||||
# L'URL n'est appliquée qu'après admission effective des deux clients.
|
||||
python3.14 scripts/media_lab.py control --run essai-neuf \
|
||||
--phase vod-spr --sound-physics
|
||||
python3.14 scripts/media_lab.py live --run essai-neuf
|
||||
python3.14 scripts/media_lab.py control --run essai-neuf \
|
||||
--phase live --source live --sound-physics
|
||||
# Tester aussi une arrivée tardive : arrêter seulement B, attendre, puis relancer.
|
||||
python3.14 scripts/media_lab.py stop --run essai-neuf --target client-b
|
||||
sleep 20
|
||||
python3.14 scripts/media_lab.py client-b --run essai-neuf
|
||||
python3.14 scripts/media_lab.py control --run essai-neuf \
|
||||
--phase live-hidden --sound-physics --look-away
|
||||
python3.14 scripts/media_lab.py control --run essai-neuf \
|
||||
--phase live-visible --sound-physics
|
||||
python3.14 scripts/media_lab_report.py build/media-prototype/essai-neuf
|
||||
python3.14 scripts/media_lab.py stop --run essai-neuf
|
||||
# Arrêter aussi le terminal « serve » avec Ctrl-C.
|
||||
```
|
||||
|
||||
Un nom de session existant est refusé par `prepare`. Les sources, paramètres,
|
||||
PID, scènes et configurations résident exclusivement sous `build/media-prototype/`.
|
||||
Le mode hors ligne et l'autorisation d'URL privées concernent uniquement ces
|
||||
processus sur `127.0.0.1`. Ne pas transposer ces réglages au pack ou à la Beta.
|
||||
Pour le parcours sans Sodium, ajouter `--without-sodium` à `prepare`.
|
||||
|
||||
## Preuves locales et vérifications
|
||||
|
||||
- Série principale : `build/media-prototype/review-05/report.json`, journaux
|
||||
`server.log`, `client-a.log`, `client-b.log`, mesures `*.jsonl` et manifeste.
|
||||
- Captures de contrôle :
|
||||
[client A](../build/media-prototype/review-05/client-a/screenshots/media-live-final-proof.png),
|
||||
[client B](../build/media-prototype/review-05/client-b/screenshots/media-live-final-proof.png).
|
||||
- Six tests du calcul de mesure : observation décalée sans dérive, décalage réel
|
||||
de 300 ms, image ancienne, deuxième client absent, observations trop éloignées
|
||||
et passage au bouclage de la source. `python3 -m unittest discover -s scripts
|
||||
-p test_media_lab_report.py` réussi.
|
||||
- Les sources de la sonde sont compilées par `javac --release 25` dans le
|
||||
lanceur. L'intégrité des artefacts Dream et Sodium est vérifiée avant usage ;
|
||||
le profil Loom conserve la vérification SPR du dépôt.
|
||||
|
||||
Le parcours **sans Sodium** utilise `build/media-prototype/without-sodium-01/`,
|
||||
deux vrais clients Vulkan et Sound Physics activé. Sur **162 s** de VOD,
|
||||
588 paires après quinze secondes : médiane **172 ms**, 95e percentile **242 ms**,
|
||||
maximum **265 ms**, médiane de 30 FPS. Le rendu est aussi vérifié par les captures
|
||||
et les compteurs d'upload. Ce parcours court ne démontre pas que Sodium explique
|
||||
la différence avec la première série, et ne valide pas le live sans Sodium.
|
||||
|
||||
`check build` réussit en **3 min 4 s**, 145 tâches, avec les **18 GameTests serveur
|
||||
requis réussis** et les autres contrôles du dépôt. Commande exacte :
|
||||
|
||||
```sh
|
||||
JAVA_HOME=$(/usr/libexec/java_home -v 25) ./gradlew check build \
|
||||
--max-workers=1 -Dorg.gradle.jvmargs=-Xmx1G \
|
||||
-PsanctuaryFocusedTests=property270,claims272,claims277,claims278 \
|
||||
-PsanctuaryAtlasOnly=true --console=plain
|
||||
```
|
||||
|
||||
Journal : `build/media-prototype/check-build-retry.log`. La première invocation
|
||||
échouait dans la préparation du cache Loom, avant les tests, faute d'espace.
|
||||
Seul le cache régénérable de ce worktree et un téléchargement du laboratoire
|
||||
ont été retirés avant la relance. Les mesures des deux séries retenues ne
|
||||
contiennent pas d'erreur de disque plein. Aucun `assemblePack` n'est nécessaire
|
||||
pour cette sonde séparée ; la distribution est inchangée.
|
||||
|
||||
Les processus Minecraft et FFmpeg des deux séries, ainsi que leurs serveurs
|
||||
HTTP, sont arrêtés après les mesures. Les fichiers de preuve restent présents.
|
||||
Aucune installation personnelle, aucun monde de joueur,
|
||||
serveur Beta, canal packwiz ou instance Prism n'a été modifié.
|
||||
|
||||
## Limites et suite
|
||||
|
||||
Les phases sont exploratoires et durent quelques minutes, pas dix minutes
|
||||
chacune. Les clients partagent le même Mac et le même réseau loopback ; les
|
||||
résultats ne prouvent pas une tenue à distance, sous pertes réseau ou sur Windows
|
||||
et Linux. YouTube et Twitch n'ont pas été utilisés comme sources pendant ces
|
||||
mesures : leur résolution, leurs variantes et leurs publicités restent ouverts.
|
||||
|
||||
Avant les cadres, réaliser une preuve ciblée de suivi live par référence de
|
||||
média commune, y compris après reconnexion, et une preuve de sortie PCM vers
|
||||
Minecraft/OpenAL avec Sound Physics. Éviter de diminuer seulement les seuils
|
||||
de seek VOD : ce prototype ne montre pas que cela corrigerait le live.
|
||||
@@ -0,0 +1,175 @@
|
||||
# MEDIA-03 — Synchronisation et acoustique des vidéos
|
||||
|
||||
Suite : [MEDIA-04 — ancre unique, cadre complet et menu Dream d'origine](media-anchor-prototype.md).
|
||||
|
||||
Branche `codex/media-sync-audio`, **26 octobre 2026**, base Sanctuary **beta.293**.
|
||||
Suite de [MEDIA-02](media-playback-prototype.md). Le module séparé
|
||||
[`sanctuary-media`](../mods/sanctuary-media/README.md), **0.2.0-prototype**, corrige
|
||||
le lecteur expérimental ; aucun cadre n'est développé, aucun pack ni monde
|
||||
personnel modifié. Ce n'est pas une nouvelle livraison des binaires Sanctuary :
|
||||
les compteurs beta et le canal stable restent inchangés.
|
||||
|
||||
## Comportement
|
||||
|
||||
Chaque client estime l'heure du serveur avec des échanges ping/réponse et remet
|
||||
son estimation à zéro après déconnexion. Le serveur garde la timeline, sans
|
||||
décoder, télécharger ou retransmettre la vidéo. L'estimation retient le plus
|
||||
petit aller-retour récent ; son évolution est bornée et monotone.
|
||||
|
||||
La VOD utilise cette timeline dès le démarrage des décodeurs audio **et vidéo**.
|
||||
Avancer seulement le curseur audio était insuffisant : lors d'une première
|
||||
tentative de reconnexion, FFmpeg redécodait la vidéo depuis zéro. Le correctif
|
||||
`SessionStartMixin` donne maintenant l'offset serveur à la session de décodage.
|
||||
Les commandes FFmpeg de la reprise vérifiée contiennent `-ss 96.593000` pour
|
||||
les deux pistes. Les petites corrections suivent le nombre d'échantillons
|
||||
effectivement consommés par OpenAL, avec une vitesse limitée à ±2 %. Un retard
|
||||
de plus de 200 ms supprime le PCM en retard. Le rattrapage ne dépend pas du motif
|
||||
de la vidéo de test. L'avance empirique de 2,5 secondes de Dream est retirée.
|
||||
|
||||
Pour le live **HLS média avec `EXT-X-PROGRAM-DATE-TIME`**, un service loopback
|
||||
propre à chaque client fixe les trois premiers segments et leurs origines
|
||||
audio/vidéo. Il réécrit les manifestes, pas les médias : les segments restent
|
||||
téléchargés directement par le client. Les deux lecteurs suivent la même heure
|
||||
avec **huit secondes de retard commun**. L'origine vidéo et l'origine audio
|
||||
peuvent différer ; le pont compense cet écart. Les nouvelles images restent
|
||||
masquées tant que leur origine est dans le futur par rapport à ce retard.
|
||||
|
||||
Le PCM Dream passe dans une source **OpenAL mono spatialisée**, dans le contexte
|
||||
audio de Minecraft, au centre de l'écran. Le curseur de volume **Jukebox / blocs
|
||||
musicaux** reste applicable. Dream conserve son atténuation de distance ; son
|
||||
DSP acoustique est désactivé pour éviter l'empilement. Sound Physics évalue la
|
||||
source fixe quatre fois par seconde. L'évaluation utilise la catégorie interne
|
||||
BLOCKS, car SPR ignore RECORDS quand `update_moving_sounds=false` ; le volume
|
||||
reste celui des disques. Le pont ne possède ni ne ferme le contexte Minecraft.
|
||||
|
||||
## Réglage demandé : exclure les vidéos de Sound Physics
|
||||
|
||||
Dans **Options → Sons → Sound Physics Remastered → Acoustique des vidéos** :
|
||||
|
||||
- **Oui**, par défaut : réverbération, occlusion et absorption Sound Physics.
|
||||
- **Non** : détache le filtre direct et les quatre envois de réverbération,
|
||||
remet l'absorption de l'air à zéro ; son positionnel, volume et synchro conservés.
|
||||
|
||||
Le choix est propre au client, persiste dans `config/sanctuary-media.json` sous
|
||||
`videoAcoustics` et prend effet pendant la lecture, sans recharger tout le son.
|
||||
Libellés et infobulle FR/EN. L'autre joueur et les sons Minecraft conservent leur
|
||||
propre acoustique. Le module de test actionne le vrai bouton dans l'interface.
|
||||
|
||||
## Méthode et preuves
|
||||
|
||||
Même environnement contrôlé que MEDIA-02 : Minecraft **26.3**, Java **25**,
|
||||
Dream **1.10.4** exact, SPR **1.5.1+26.3**, Sodium **0.9.2+mc26.3**, deux JVM
|
||||
clientes et serveur dédié local, **Vulkan / MoltenVK 1.4.2 / Apple M1 8 Gio**.
|
||||
Monde plat neuf, graine **2602**, joueurs admis avec couleurs Hello World
|
||||
distinctes avant transmission de la source. VOD synthétique H.264/AAC 30 i/s,
|
||||
660 secondes ; live généré à partir de cette source, segments d'une seconde
|
||||
avec date UTC. Chemin natif Dream avec processus FFmpeg système **8.1.2** ;
|
||||
le backend libav embarqué ne se charge pas sur ce poste.
|
||||
|
||||
La sonde lit le numéro d'image sur les uploads GPU réussis et compare les
|
||||
clients avec correction de l'instant d'observation. Résolution d'une image
|
||||
à 30 i/s, pas une mesure de scanout des moniteurs. Les observations distantes
|
||||
de plus de 150 ms, les images figées depuis 500 ms, les clients déconnectés
|
||||
et les sorties OpenAL en attente sont exclues du calcul de dérive ; leur
|
||||
couverture reste comptée. Aucune mesure d'écoute subjective ni de sortie
|
||||
haut-parleur : la preuve audio porte sur les curseurs PCM et filtres appliqués.
|
||||
|
||||
Traces et captures conservées sous `build/media-prototype/sync-audio-04/`.
|
||||
Les séries `sync-audio-01/02/03` sont des diagnostics intermédiaires, pas la
|
||||
validation finale. Dans `04`, la phase `vod-rejoin` reproduit le défaut de
|
||||
décodage avant `SessionStartMixin` ; seules les phases `vod-final-*` valident
|
||||
sa correction. Les phases finales chargent la même extension sur les deux
|
||||
clients. Le JAR et les dépendances restent ignorés par Git.
|
||||
|
||||
Résultats finaux de synchronisation, après les quinze premières secondes de
|
||||
chaque phase ; la durée comprend le chargement et la reconnexion :
|
||||
|
||||
| Phase | Durée | Paires | Médiane | P95 | Maximum |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: |
|
||||
| VOD, départ | 83,6 s | 260 | 70 ms | **140 ms** | 278 ms |
|
||||
| VOD, reconnexion à environ 1 min 40 | 49,6 s | 88 | 19 ms | **55 ms** | 87 ms |
|
||||
| Live, départ | 85,6 s | 266 | 9 ms | **38 ms** | 322 ms |
|
||||
| Live, reconnexion | 55,5 s | 97 | 11 ms | **96 ms** | 156 ms |
|
||||
|
||||
Médiane de **30 FPS** dans les deux clients pour ces phases. Les couvertures
|
||||
de vidéo utilisable au départ sont 84,5/83,3 % en VOD et 90,1/91,2 % en live.
|
||||
La reconnexion froide inclut le redémarrage complet d'une JVM et de Minecraft :
|
||||
ce n'est pas une reprise réseau instantanée. Les durées sans image et les pics
|
||||
restent dans les traces ; les P95 ne constituent pas une garantie de latence.
|
||||
Dream intact donnait environ 337 ms en VOD et 580 à 741 ms après reprise live.
|
||||
|
||||
Preuves acoustiques : avec le mur de pierre, le filtre de la vidéo passe à
|
||||
`cutoff=0.049787067`, `gain=0.7408182` contre `1/1` sans mur, avec envois de
|
||||
réverbération non nuls. Quand A désactive son option, ses appels vidéo se
|
||||
stabilisent à 312 tandis que ceux de B continuent ; les notes Minecraft de A
|
||||
progressent encore de 23 à 26. Le fichier de préférence est relu après redémarrage
|
||||
avec la valeur désactivée. Les captures montrent les boutons FR Oui et Non.
|
||||
|
||||
Hors champ, après deux secondes de transition, **zéro upload vidéo pendant
|
||||
environ 69 secondes**, mais **3 042 629 / 3 064 928 échantillons PCM** joués.
|
||||
Les erreurs OpenAL rapportées par la sortie sont nulles dans ces phases.
|
||||
|
||||
Le rechargement global de Sound Physics a révélé une réutilisation du même
|
||||
pointeur natif OpenAL après destruction : le pont distingue désormais les
|
||||
générations du contexte, puis recrée ses sources et abandonne le PCM devenu
|
||||
périmé. Les phases `live-global-off/on` reproduisent l'ancien blocage et sont
|
||||
des diagnostics, comme `live-context-*` qui a permis de trouver un second cas :
|
||||
une tâche annulée par l'ancien exécuteur laissait le verrou de pompe occupé.
|
||||
Le nouveau contexte libère aussi ce verrou. La série `live-reload-*` vérifie
|
||||
quatre remplacements successifs, désactivation/réactivation deux fois.
|
||||
Les deux clients terminent avec `resets=4`, PCM et uploads en progression,
|
||||
30 FPS, `al_error=0`. Cette dernière modification ne touche que le cycle de vie
|
||||
du moteur audio ; elle est testée dans `live-reload-*`, après les mesures VOD
|
||||
et live du tableau. [Résumé JSON conservé](media-sync-audio-results.json).
|
||||
|
||||
Construction du prototype et contrôles dédiés :
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary-test:exportDuoLaunch
|
||||
python3.14 scripts/media_lab.py prepare --run mon-essai --media-fix
|
||||
python3.14 scripts/media_lab.py test-media
|
||||
python3.14 -m unittest discover -s scripts -p 'test_media_lab_report.py'
|
||||
```
|
||||
|
||||
Le contrat Java vérifie l'estimation de l'heure face aux réponses retardées,
|
||||
la monotonie, une reconnexion avec changement d'époque, pause/boucle, le bornage
|
||||
de vitesse et les manifestes HLS relatifs/datés/discontinus. Les **sept tests
|
||||
du rapport** empêchent les fausses réussites avec image périmée, client manquant,
|
||||
observations trop éloignées ou sortie audio en attente. Ils ne remplacent pas
|
||||
les vrais clients. Les formats HLS refusés reprennent le chemin amont.
|
||||
|
||||
La suite du dépôt se lance séparément, le module expérimental étant construit
|
||||
par `test-media` plutôt qu'inclus dans les sous-projets Gradle :
|
||||
|
||||
```sh
|
||||
JAVA_HOME=$(/usr/libexec/java_home -v 25) ./gradlew check build \
|
||||
--max-workers=1 -Dorg.gradle.jvmargs=-Xmx1G \
|
||||
-PsanctuaryFocusedTests=property270,claims272,claims277,claims278 \
|
||||
-PsanctuaryAtlasOnly=true --console=plain
|
||||
```
|
||||
|
||||
`check build` réussit en **2 min 55 s**, 145 tâches, dont **18 GameTests serveur
|
||||
réussis**. Compilation du prototype et contrat Java réussis, sept tests du
|
||||
rapport réussis. Journal : `build/media-fix/check-build.log`. Pas d'`assemblePack`, puisque la
|
||||
distribution n'est pas modifiée. Les JVM de jeu, FFmpeg et le service HTTP du
|
||||
laboratoire sont arrêtés après les mesures. Deux serveurs des premiers diagnostics
|
||||
se sont bloqués à l'arrêt et ont été forcés après capture de leurs threads ;
|
||||
la dernière série s'est fermée. Aucun processus de jeu personnel n'est arrêté.
|
||||
|
||||
## Limites
|
||||
|
||||
Cette preuve locale ne valide pas Twitch/YouTube publics, des liens résolus par
|
||||
ANI-CLI, Spotify, des sessions authentifiées, DRM, publicités personnalisées,
|
||||
playlists maîtres, LL-HLS, byte ranges ou changements de timeline. Une playlist
|
||||
sans date exploitable reprend le chemin Dream d'origine et ne bénéficie pas
|
||||
de la synchronisation live précise. Les horloges UTC du fournisseur et du
|
||||
serveur doivent être cohérentes ; la fenêtre HLS doit contenir le retard choisi.
|
||||
Le réglage de huit secondes est fixé pour le prototype, pas encore une option
|
||||
de séance. La correction ±2 % change temporairement la hauteur audio. Mono
|
||||
positionnel, huit sources simultanées au maximum ; Windows et Linux restent
|
||||
à tester. Les mixins visent les versions exactes ; pas de compatibilité déduite.
|
||||
|
||||
Les tests ciblent Vulkan avec Sodium. Aucun nouveau test OpenGL, aucune
|
||||
promesse de publication ou de prise en charge des autres profils. Les cadres,
|
||||
le dimensionnement, le filtre 16 pixels par bloc et les disques blancs restent
|
||||
les étapes suivantes après validation de cette base.
|
||||
@@ -0,0 +1,815 @@
|
||||
{
|
||||
"lab": "sync-audio-04",
|
||||
"backend": "Vulkan",
|
||||
"date": "2026-10-26",
|
||||
"minecraft": "26.3",
|
||||
"dream": "1.10.4",
|
||||
"sound_physics": "1.5.1+26.3",
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"measurement": "16-bit frame code, 30 fps, successful GPU upload, nearest observations within 150 ms; no display-scanout or subjective listening measurement",
|
||||
"final_addon_sha256": "cbc0ebca949acb87b5c4afe13e61910685354285cb93033d06342ea577a22daf",
|
||||
"phases": {
|
||||
"vod-final-start": {
|
||||
"duration_seconds": 83.603,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 263,
|
||||
"median": 70.33333333333333,
|
||||
"p95": 140.0,
|
||||
"max": 278.0
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 260,
|
||||
"median": 70.33333333333333,
|
||||
"p95": 140.0,
|
||||
"max": 278.0
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 329,
|
||||
"usable_video_samples": 278,
|
||||
"usable_fraction": 0.8449848024316109,
|
||||
"fps": {
|
||||
"count": 278,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 278,
|
||||
"median": 8.114512499997062,
|
||||
"p95": 21.84807333333305,
|
||||
"max": 37.15192766666675
|
||||
},
|
||||
"openal_active_samples": 278,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 7845805,
|
||||
"effects_calls": 296,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 317,
|
||||
"usable_video_samples": 264,
|
||||
"usable_fraction": 0.832807570977918,
|
||||
"fps": {
|
||||
"count": 264,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 264,
|
||||
"median": 31.379819166666323,
|
||||
"p95": 47.10430866666826,
|
||||
"max": 194.07936433333361
|
||||
},
|
||||
"openal_active_samples": 264,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"effects_calls": 281,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal",
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": -3900227
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"vod-final-rejoin": {
|
||||
"duration_seconds": 49.611,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 88,
|
||||
"median": 18.99999999999999,
|
||||
"p95": 54.66666666666666,
|
||||
"max": 87.33333333333333
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 88,
|
||||
"median": 18.99999999999999,
|
||||
"p95": 54.66666666666666,
|
||||
"max": 87.33333333333333
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 199,
|
||||
"usable_video_samples": 199,
|
||||
"usable_fraction": 1.0,
|
||||
"fps": {
|
||||
"count": 199,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 199,
|
||||
"median": 6.954647999990016,
|
||||
"p95": 18.23582666665402,
|
||||
"max": 44.9251706666729
|
||||
},
|
||||
"openal_active_samples": 199,
|
||||
"media_audio_first": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": -1541950,
|
||||
"effects_calls": 297,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"media_audio_last": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 204082,
|
||||
"effects_calls": 492,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 116,
|
||||
"usable_video_samples": 88,
|
||||
"usable_fraction": 0.7586206896551724,
|
||||
"fps": {
|
||||
"count": 88,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 88,
|
||||
"median": 10.12811800000435,
|
||||
"p95": 23.564625999995314,
|
||||
"max": 37.9297059999999
|
||||
},
|
||||
"openal_active_samples": 88,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 91,
|
||||
"error_ns": 3242630,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-final": {
|
||||
"duration_seconds": 85.586,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 296,
|
||||
"median": 9.66666666666666,
|
||||
"p95": 37.666666666666664,
|
||||
"max": 650.6666666666667
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 266,
|
||||
"median": 8.999999999999995,
|
||||
"p95": 37.666666666666664,
|
||||
"max": 322.0
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 342,
|
||||
"usable_video_samples": 308,
|
||||
"usable_fraction": 0.9005847953216374,
|
||||
"fps": {
|
||||
"count": 308,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 311,
|
||||
"media_audio_first": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 6553288,
|
||||
"effects_calls": 493,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"media_audio_last": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 5895692,
|
||||
"effects_calls": 309,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 331,
|
||||
"usable_video_samples": 302,
|
||||
"usable_fraction": 0.9123867069486404,
|
||||
"fps": {
|
||||
"count": 302,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 304,
|
||||
"media_audio_first": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 92,
|
||||
"error_ns": 952381,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0
|
||||
},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 301,
|
||||
"error_ns": -90703,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-final-rejoin": {
|
||||
"duration_seconds": 55.501,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 97,
|
||||
"median": 11.333333333333334,
|
||||
"p95": 95.66666666666666,
|
||||
"max": 155.66666666666666
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 97,
|
||||
"median": 11.333333333333334,
|
||||
"p95": 95.66666666666666,
|
||||
"max": 155.66666666666666
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 223,
|
||||
"usable_video_samples": 223,
|
||||
"usable_fraction": 1.0,
|
||||
"fps": {
|
||||
"count": 223,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 223,
|
||||
"media_audio_first": {
|
||||
"rate": 1.0,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 4693878,
|
||||
"effects_calls": 310,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"media_audio_last": {
|
||||
"rate": 1.02,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 63560091,
|
||||
"effects_calls": 528,
|
||||
"resets": 0,
|
||||
"al_error": 0,
|
||||
"backend": "openal"
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 142,
|
||||
"usable_video_samples": 97,
|
||||
"usable_fraction": 0.6830985915492958,
|
||||
"fps": {
|
||||
"count": 97,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 102,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"backend": "openal",
|
||||
"rate": 1.0045351475,
|
||||
"playing": true,
|
||||
"video_acoustics": true,
|
||||
"error_ns": 9070295,
|
||||
"effects_calls": 117,
|
||||
"resets": 0,
|
||||
"al_error": 0
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-reload-ready": {
|
||||
"duration_seconds": 16.169,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 20,
|
||||
"median": 21.33333333333333,
|
||||
"p95": 174.66666666666666,
|
||||
"max": 284.3333333333333
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 5,
|
||||
"median": 174.0,
|
||||
"p95": 284.3333333333333,
|
||||
"max": 284.3333333333333
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 60,
|
||||
"usable_video_samples": 20,
|
||||
"usable_fraction": 0.3333333333333333,
|
||||
"fps": {
|
||||
"count": 20,
|
||||
"median": 29.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 20,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"error_ns": 7165533,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 38
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 60,
|
||||
"usable_video_samples": 19,
|
||||
"usable_fraction": 0.31666666666666665,
|
||||
"fps": {
|
||||
"count": 19,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 19,
|
||||
"media_audio_first": {},
|
||||
"media_audio_last": {
|
||||
"error_ns": 152630385,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 35
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-reload-off-1": {
|
||||
"duration_seconds": 11.816,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 47,
|
||||
"median": 20.33333333333333,
|
||||
"p95": 54.33333333333333,
|
||||
"max": 108.00000000000001
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 48,
|
||||
"usable_fraction": 1.0,
|
||||
"fps": {
|
||||
"count": 48,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 48,
|
||||
"media_audio_first": {
|
||||
"error_ns": 12471655,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0062358275,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 0,
|
||||
"effects_calls": 39
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": 6167800,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 1,
|
||||
"effects_calls": 39
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 46,
|
||||
"usable_fraction": 0.9583333333333334,
|
||||
"fps": {
|
||||
"count": 46,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 46,
|
||||
"media_audio_first": {
|
||||
"error_ns": 408163,
|
||||
"video_acoustics": true,
|
||||
"playing": false,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 40964,
|
||||
"resets": 0,
|
||||
"effects_calls": 36
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": 8866213,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0044331065,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 1,
|
||||
"effects_calls": 36
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-reload-on-1": {
|
||||
"duration_seconds": 11.776,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 47,
|
||||
"median": 32.0,
|
||||
"p95": 41.66666666666666,
|
||||
"max": 47.666666666666664
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 48,
|
||||
"usable_fraction": 1.0,
|
||||
"fps": {
|
||||
"count": 48,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 48,
|
||||
"media_audio_first": {
|
||||
"error_ns": 54126984,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02,
|
||||
"backend": "openal",
|
||||
"al_error": 40964,
|
||||
"resets": 1,
|
||||
"effects_calls": 40
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": -634921,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 2,
|
||||
"effects_calls": 87
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 47,
|
||||
"usable_fraction": 0.9791666666666666,
|
||||
"fps": {
|
||||
"count": 47,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 47,
|
||||
"media_audio_first": {
|
||||
"error_ns": 92607710,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02,
|
||||
"backend": "openal",
|
||||
"al_error": 40964,
|
||||
"resets": 1,
|
||||
"effects_calls": 37
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": -566893,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 2,
|
||||
"effects_calls": 84
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-reload-off-2": {
|
||||
"duration_seconds": 11.868,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 44,
|
||||
"median": 12.50000000000001,
|
||||
"p95": 25.999999999999996,
|
||||
"max": 59.333333333333336
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 45,
|
||||
"usable_fraction": 0.9375,
|
||||
"fps": {
|
||||
"count": 45,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 47,
|
||||
"media_audio_first": {
|
||||
"error_ns": 2630385,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 3,
|
||||
"effects_calls": 88
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": -136054,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 3,
|
||||
"effects_calls": 88
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 48,
|
||||
"usable_video_samples": 47,
|
||||
"usable_fraction": 0.9791666666666666,
|
||||
"fps": {
|
||||
"count": 47,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 47,
|
||||
"media_audio_first": {
|
||||
"error_ns": 340136,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 2,
|
||||
"effects_calls": 84
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": 7324263,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 3,
|
||||
"effects_calls": 84
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
},
|
||||
"live-reload-on-2": {
|
||||
"duration_seconds": 38.686,
|
||||
"all_pairs_skew_ms": {
|
||||
"count": 154,
|
||||
"median": 16.0,
|
||||
"p95": 30.333333333333336,
|
||||
"max": 92.33333333333333
|
||||
},
|
||||
"after_15s_skew_ms": {
|
||||
"count": 95,
|
||||
"median": 18.333333333333325,
|
||||
"p95": 29.333333333333336,
|
||||
"max": 92.33333333333333
|
||||
},
|
||||
"clients": {
|
||||
"client-a": {
|
||||
"samples": 155,
|
||||
"usable_video_samples": 154,
|
||||
"usable_fraction": 0.9935483870967742,
|
||||
"fps": {
|
||||
"count": 154,
|
||||
"median": 30.0,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 154,
|
||||
"media_audio_first": {
|
||||
"error_ns": 52811791,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02,
|
||||
"backend": "openal",
|
||||
"al_error": 40964,
|
||||
"resets": 3,
|
||||
"effects_calls": 89
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": 7074830,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 4,
|
||||
"effects_calls": 242
|
||||
},
|
||||
"probe_errors": []
|
||||
},
|
||||
"client-b": {
|
||||
"samples": 156,
|
||||
"usable_video_samples": 155,
|
||||
"usable_fraction": 0.9935897435897436,
|
||||
"fps": {
|
||||
"count": 155,
|
||||
"median": 30,
|
||||
"p95": 30,
|
||||
"max": 30
|
||||
},
|
||||
"av_clock_error_ms": {
|
||||
"count": 0,
|
||||
"median": null,
|
||||
"p95": null,
|
||||
"max": null
|
||||
},
|
||||
"openal_active_samples": 155,
|
||||
"media_audio_first": {
|
||||
"error_ns": 63900227,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.02,
|
||||
"backend": "openal",
|
||||
"al_error": 40964,
|
||||
"resets": 4,
|
||||
"effects_calls": 85
|
||||
},
|
||||
"media_audio_last": {
|
||||
"error_ns": -634921,
|
||||
"video_acoustics": true,
|
||||
"playing": true,
|
||||
"rate": 1.0,
|
||||
"backend": "openal",
|
||||
"al_error": 0,
|
||||
"resets": 4,
|
||||
"effects_calls": 238
|
||||
},
|
||||
"probe_errors": []
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"artifact_scope": "Final SHA-256 is for live-reload-* after the audio lifecycle-only correction; prior named phases measure the VOD/live sync implementation."
|
||||
}
|
||||
@@ -1,5 +1,15 @@
|
||||
# Menus Sanctuary — organisation
|
||||
|
||||
Évolution courante du 24 octobre 2026 : [Habitant et Pause beta.275](menu-atlas-beta275.md).
|
||||
La fiche ne contient plus que Factions/Familier en navigation, avec statistiques,
|
||||
personnage et biographie en trois colonnes. Une fois Carte débloquée, Pause garde
|
||||
Aventure à gauche, Communauté à droite et Partie sous la carte centrale ; Gazette
|
||||
et Tableau conservent les colonnes latérales. Les descriptions historiques
|
||||
ci-dessous et la [première fiche beta.271](inhabitant-menu-beta271.md) restent des références.
|
||||
|
||||
Évolution du 24 octobre 2026 : [fiche Habitant et Pause beta.271](inhabitant-menu-beta271.md).
|
||||
Le cadrage ci-dessous conserve l’organisation historique de beta.083.
|
||||
|
||||
Cadrage du 15 septembre 2026, à partir de beta.077.
|
||||
Branche documentaire initiale : `codex/menu-architecture`.
|
||||
**Statut : organisation appliquée en [beta.083](menu-organization-beta083.md).
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
# MENU-275 — Habitant et Pause autour de la carte
|
||||
|
||||
Branche `codex/inhabitant-property`, demande du 24 octobre 2026.
|
||||
|
||||
- Retirer le conseil d’arrivée sur la première propriété gratuite.
|
||||
- Habitant : Factions et Familier en haut, statistiques transparentes à gauche,
|
||||
personnage au centre avec de l’air, biographie à droite. Retirer le panneau
|
||||
d’activité et son bouton Historique de cette fiche ; conserver les données.
|
||||
- Temps joué en jours, heures, minutes et secondes entières, à partir des ticks
|
||||
Minecraft. Aucune minute décimale. Retour à la ligne en petit format.
|
||||
- Les propriétés exigent l’aptitude Carte achetée et active. Aucun bouton dans
|
||||
Habitant ; accès depuis le clic droit sur l’Atlas ou la commande après déblocage.
|
||||
Le serveur applique cette condition aux commandes, actions et ancien paquet
|
||||
de carte locale. Les données et protections acquises restent conservées.
|
||||
- Avant Carte : conserver la disposition actuelle du menu Pause.
|
||||
- Après Carte : Gazette à gauche, Tableau à droite ; dans la colonne centrale,
|
||||
Découvertes, Progression, Habitant et Combats au-dessus de la carte, puis Options,
|
||||
Options du monde et Sauvegarder/quitter ou Déconnexion sous la carte.
|
||||
Les rubriques restent visibles : **Aventure** forme toujours la colonne de
|
||||
gauche (Découvertes puis Progression), **Communauté** celle de droite
|
||||
(Habitant puis Combats), même en grande vue. **Partie / Game** reste au-dessus
|
||||
des options. Le rectangle de carte remplit l’espace restant, réduit pour
|
||||
conserver ces titres. Reprendre reste dans le pied natif.
|
||||
|
||||
Aucun format de sauvegarde ni génération ne change. Les nouveaux prérequis
|
||||
n’attribuent ni ne retirent de propriété. Les protections existantes et leur
|
||||
prédiction de minage s’appliquent aussi aux joueurs sans Carte ; seul l’accès
|
||||
à leur gestion est verrouillé. La refonte habitation/duels/prix reste en attente.
|
||||
|
||||
## Vérification
|
||||
|
||||
`check build assemblePack` réussit en **2 min 45 s**, avec **30 tests serveur
|
||||
ciblés**. Les prérequis de Carte sont testés avant achat, après achat et après
|
||||
désactivation ; refus sans débit, conservation du claim et des protections,
|
||||
réactivation et multiplicateurs de minage pour les joueurs sans Carte.
|
||||
Le format de durée couvre dix limites de ticks et un compteur long.
|
||||
|
||||
Le parcours **Vulkan FR/EN GUI 2/3/4** réussit en **56 s**, avec **18 captures**.
|
||||
Il passe par Hello World réel, vérifie l’absence du conseil de propriété,
|
||||
la commande bloquée et le paquet de carte locale forgé, puis les trois colonnes
|
||||
d’Habitant, les unités de temps, la transparence et l’absence d’activité.
|
||||
Factions et Familier reviennent à la fiche. Les vues Pause avant/après Carte,
|
||||
les deux colonnes Aventure/Communauté même en grande vue, la rubrique Partie,
|
||||
les côtés Gazette/Tableau, la disposition des options, leur retour natif et la
|
||||
mise à jour après désactivation de Carte sont contrôlés. Les textes longs
|
||||
conservent les défilements et infobulles natifs dans les petits formats.
|
||||
|
||||
Captures dans `build/menu275-screenshots/`, avec inspections FR GUI 2/4 de
|
||||
Pause, FR GUI 4 d’Habitant. Le MRpack beta.275 est exporté et vérifié : ZIP,
|
||||
Minecraft 26.3, Loader 0.19.5 et octets des deux JAR locaux identiques aux builds.
|
||||
Les archives beta.270 à beta.274 restent identiques. Reçu :
|
||||
`build/menu275-validation.json`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=menu275,claims273,claims272,property270,mining,overview271,menus,map,demeure \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryMenu275ClientTests=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Aucune publication de canal ni synchronisation d’instance personnelle.
|
||||
@@ -0,0 +1,23 @@
|
||||
{
|
||||
"version": "beta.306",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.306.jar",
|
||||
"sha256": "a58ddb731719b5bcd975ac86acb95941f0f1bfe49cbefab429b01d47e847af60",
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 192,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_classes": 44,
|
||||
"server_required": 52,
|
||||
"manual_mill_scenarios": 10,
|
||||
"manual_mill_recipes": 9,
|
||||
"physical_recipes": 80,
|
||||
"device_blueprints": 90,
|
||||
"client_vulkan": {
|
||||
"manual_mill": "build/mill306-client.log",
|
||||
"screenshots": "build/mill306-screenshots",
|
||||
"backend": "Vulkan",
|
||||
"sodium": "0.9.2+mc26.3",
|
||||
"world_seed": 306
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
# CUI-306 — moulin manuel, sans combustible
|
||||
|
||||
> Suite locale : [beta.307 adapte aussi la recette de fabrication, sans
|
||||
> redstone](mill-recipe-beta307.md). Cette page conserve le résultat de beta.306.
|
||||
|
||||
Choix du créateur du 28 octobre 2026 : **manuel, comme le tailleur de pierre**.
|
||||
Préparation **beta.306** sur la même branche `codex/itsalive-26-3`, après
|
||||
beta.305. Travail local, sans publication, installation dans Prism, mise à
|
||||
jour de canal ou déploiement serveur.
|
||||
|
||||
## Résultat jouable
|
||||
|
||||
Le bloc, l'objet, le titre de menu et la catégorie JEI s'appellent désormais
|
||||
**Moulin / Mill**. L'interface propose une entrée et un résultat immédiat.
|
||||
Chaque joueur possède sa propre surface de travail, comme dans un menu de
|
||||
fabrication vanilla.
|
||||
|
||||
L'aperçu ne consomme rien. Prendre le résultat paie **un ingrédient** et donne
|
||||
le rendement prévu par la recette. Par exemple, un blé donne deux farines de
|
||||
blé, y compris au clic droit qui prend le lot entier. Le Maj-clic traite les
|
||||
lots disponibles dans la limite de l'inventaire.
|
||||
Si seul un morceau du dernier lot tient, le surplus payé tombe au sol, selon
|
||||
le comportement natif du tailleur de pierre. Un inventaire plein ne consomme
|
||||
pas d'ingrédient. Les récipients réellement payés sont rendus une seule fois.
|
||||
Fermer le menu ou casser le moulin rend les ingrédients inutilisés ; aucun
|
||||
aperçu n'est sauvegardé ou lâché comme objet.
|
||||
|
||||
Le moulin ne consomme **aucun combustible**, n'attend pas un délai, ne produit
|
||||
pas passivement et n'accorde pas d'XP de cuisson. Il ne demande aucun signal
|
||||
redstone. Les entonnoirs n'ont pas accès à cette fabrication manuelle.
|
||||
|
||||
Le feu et les commandes de combustible disparaissent du menu. Les deux
|
||||
sprites historiques conservent un bref mouvement mécanique descendant puis
|
||||
ascendant, de **12 ticks**, après une prise de résultat. Le son réutilise
|
||||
celui du tailleur de pierre. L'ancien état `lit` sert uniquement à afficher
|
||||
brièvement la face active du bloc, sans chaleur ni combustion.
|
||||
|
||||
Les **neuf recettes**, leurs rendements, les ingrédients reconnus et la
|
||||
recette de fabrication du moulin sont conservés. JEI affiche « Mouture
|
||||
manuelle / Manual milling » au lieu d'une durée. Le champ historique
|
||||
`processing_time` reste accepté dans les données pour garder les recettes
|
||||
compatibles ; il ne pilote plus le moulin.
|
||||
|
||||
## Continuité des objets déjà stockés
|
||||
|
||||
Les identifiants `sanctuary:redstone_mill` du bloc, de l'objet, du menu et du
|
||||
bloc entité restent stables. Les trois anciennes cases gardent leur encodage
|
||||
natif et leur version de stockage 2. La lecture historique de version 1 est
|
||||
conservée. Aucun monde existant n'est ouvert, modifié ou converti par ce lot.
|
||||
|
||||
À la première ouverture d'un ancien moulin, son entrée stockée rejoint la
|
||||
surface de travail du joueur. L'ancien combustible et l'ancien résultat
|
||||
restent visibles dans deux cases **de récupération uniquement**, affichées
|
||||
tant qu'elles contiennent un objet. Ils peuvent être retirés par clic ou
|
||||
Maj-clic. Ils sont aussi conservés à la casse du bloc. Ces cases n'acceptent
|
||||
aucun nouvel apport et disparaissent de l'affichage une fois vidées.
|
||||
|
||||
Les anciens compteurs de chauffe et de progression sont ignorés. Ils ne
|
||||
consomment pas le combustible restant, ne créent pas de résultat et ne
|
||||
remboursent pas un combustible déjà brûlé. Les objets réellement stockés
|
||||
restent récupérables, sans conversion automatique en farine.
|
||||
|
||||
## Vérifications
|
||||
|
||||
Minecraft **26.3**, Fabric API **0.160.5+26.3**, Java 25. Les tests graphiques
|
||||
ciblent uniquement **Vulkan avec Sodium 0.9.2**, dans un monde de développement
|
||||
neuf de graine **306**, ignoré par Git.
|
||||
|
||||
`check build assemblePack` passe en **3 min 11 s**, avec **52 tests serveur
|
||||
requis réussis**, dont les dix scénarios du moulin et les régressions
|
||||
appareils, cuisine, recettes, progression et connaissances alimentaires.
|
||||
|
||||
Les dix nouveaux tests serveur couvrent l'aperçu sans paiement, le clic droit,
|
||||
les prises et Maj-clics natifs, l'inventaire plein ou presque plein, la
|
||||
fermeture/casse, deux joueurs indépendants, les anciens stocks et compteurs, l'absence de
|
||||
combustible et d'accès par entonnoir, ainsi que les récipients payés. La
|
||||
régression des appareils exécute les neuf recettes réelles du moulin.
|
||||
|
||||
Le parcours client Vulkan passe en **1 min 8 s** : vrais paquets
|
||||
d'insertion, prise, Maj-clic et fermeture, mouvement mécanique sans feu,
|
||||
deux cases de travail, noms FR/EN aux échelles GUI 2/3/4 et neuf recettes
|
||||
dans JEI. Une fermeture/réouverture réelle du monde conserve les anciens
|
||||
stocks ; leur extraction rend exactement sept charbons, cinq blés et trois
|
||||
farines, en plus des objets déjà possédés. Les dix captures sont archivées
|
||||
dans `build/mill306-screenshots/` ; journal `build/mill306-client.log`.
|
||||
|
||||
Le JAR contient les **432 JSON culinaires**, **192 JSON d'appareils** et
|
||||
**376 JSON agricoles**, identiques aux générateurs, ainsi que les 44 classes
|
||||
culinaires et les libellés FR/EN. Les trois classes du moulin sont identiques
|
||||
aux fichiers compilés ; les neuf recettes sont présentes. Les **343 PNG
|
||||
importés** restent identiques, dont les 38 fournis ; les 13 PNG de vanille
|
||||
restent en 16 × 16. Les copies packwiz client et serveur sont identiques au
|
||||
JAR contrôlé. Le template conserve les mêmes textures et les notices à jour.
|
||||
|
||||
SHA-256 de `sanctuary-beta.306.jar` :
|
||||
|
||||
```text
|
||||
a58ddb731719b5bcd975ac86acb95941f0f1bfe49cbefab429b01d47e847af60
|
||||
```
|
||||
|
||||
[Reçu de validation](mill-beta306-verification.json), journaux de build et
|
||||
d'archives dans `build/mill306-build.log` et `build/mill306-artifacts.log`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryMill306ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=mill306 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
La recette de fabrication du moulin et les autres appareils culinaires
|
||||
sont conservés. L'automatisation ne fait pas partie du fonctionnement manuel
|
||||
retenu. Les textures importées, les catégories créatives et les cultures
|
||||
sont conservées.
|
||||
@@ -0,0 +1,41 @@
|
||||
{
|
||||
"version": "beta.307",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.307.jar",
|
||||
"sha256": "e510871bd515e5b52f2e1b218b593b49ff74ffae320e9b6b665ef1629c53d3d0",
|
||||
"previous_verified_sha256": "a58ddb731719b5bcd975ac86acb95941f0f1bfe49cbefab429b01d47e847af60",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"data/sanctuary/recipe/redstone_mill.json",
|
||||
"fabric.mod.json",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 192,
|
||||
"agriculture": 376
|
||||
},
|
||||
"server_required": 52,
|
||||
"recipe_id": "sanctuary:redstone_mill",
|
||||
"pattern": [
|
||||
"SSS",
|
||||
"GCG",
|
||||
" B "
|
||||
],
|
||||
"ingredients": {
|
||||
"S": "minecraft:smooth_stone_slab",
|
||||
"G": "minecraft:copper_ingot",
|
||||
"C": "minecraft:stonecutter",
|
||||
"B": "minecraft:stick"
|
||||
},
|
||||
"result": {
|
||||
"id": "sanctuary:redstone_mill"
|
||||
},
|
||||
"crafting_category": "misc",
|
||||
"runtime_classes_unchanged": 2745,
|
||||
"pngs_unchanged": 973,
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"build_log": "build/mill307-build.log"
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
# CUI-307 — recette du moulin manuel
|
||||
|
||||
Demande du créateur du 28 octobre 2026 : adapter la fabrication au
|
||||
fonctionnement manuel du moulin, **sans redstone**. Préparation **beta.307**
|
||||
sur la même branche `codex/itsalive-26-3`, après beta.306. Travail local,
|
||||
sans publication, installation, mise à jour de canal ou déploiement serveur.
|
||||
|
||||
## Fabrication
|
||||
|
||||
La table de fabrication donne **un moulin** avec :
|
||||
|
||||
| Dalle de pierre lisse | Dalle de pierre lisse | Dalle de pierre lisse |
|
||||
| --- | --- | --- |
|
||||
| Lingot de cuivre | Tailleur de pierre | Lingot de cuivre |
|
||||
| Vide | Bâton | Vide |
|
||||
|
||||
Le bâton représente la poignée du mécanisme manuel. Il remplace la poudre
|
||||
de redstone de la recette précédente ; les autres ingrédients et leurs
|
||||
quantités sont conservés. Aucun de ces composants ne demande de redstone.
|
||||
La catégorie du livre de fabrication devient **Divers / Miscellaneous** au
|
||||
lieu de Redstone ; les objets et leurs noms FR/EN restent ceux du jeu.
|
||||
Les onglets créatifs ne changent pas.
|
||||
|
||||
La recette garde l'identifiant **`sanctuary:redstone_mill`** et sa découverte
|
||||
dans la collection des appareils culinaires. Les moulins déjà placés, les
|
||||
inventaires et les neuf recettes de mouture gardent le comportement manuel
|
||||
de beta.306. Ce lot change uniquement les données de fabrication, sans
|
||||
nouveau Java de jeu, nouveau PNG ou modification de sauvegarde.
|
||||
|
||||
La source adaptée est `scripts/data/kitchen-crafting.json`, distribuée par
|
||||
`scripts/kitchen_resources.py`. Les reçus historiques 26.2 et beta.304 restent
|
||||
inchangés ; cette page documente l'évolution de la copie Sanctuary.
|
||||
|
||||
## Vérifications
|
||||
|
||||
`check build assemblePack` passe en **2 min 53 s**, avec **52 tests serveur
|
||||
requis réussis**. La nouvelle grille est chargée et produit un moulin sans
|
||||
résultat concurrent ; la découverte du plan et les transformations manuelles
|
||||
restent vérifiées.
|
||||
|
||||
Minecraft **26.3**, Fabric API **0.160.5+26.3**, Java 25. Les tests serveur
|
||||
existants chargent les dix fabrications d'appareils/stockage, font correspondre
|
||||
leurs grilles réelles et vérifient l'absence de résultat concurrent. Ils
|
||||
couvrent également la découverte du plan et les neuf recettes du moulin
|
||||
manuel. Le code de menu et les textures sont inchangés ; le parcours Vulkan
|
||||
de beta.306 reste le reçu graphique de référence et n'est pas présenté comme
|
||||
un nouvel essai de beta.307.
|
||||
|
||||
Les **1 000 JSON générés** correspondent aux sources : 432 culinaires,
|
||||
192 d'appareils et 376 agricoles. Comparé au JAR vérifié de beta.306, seuls
|
||||
la recette du moulin, la version du manifeste et les deux copies des notices
|
||||
changent. Les **2 745 classes et 973 PNG** de l'archive sont identiques octet
|
||||
pour octet. Les copies du JAR packwiz client et serveur sont identiques au
|
||||
binaire contrôlé ; le template ne change que par sa notice.
|
||||
|
||||
SHA-256 de `sanctuary-beta.307.jar` :
|
||||
|
||||
```text
|
||||
e510871bd515e5b52f2e1b218b593b49ff74ffae320e9b6b665ef1629c53d3d0
|
||||
```
|
||||
|
||||
[Reçu de validation](mill-recipe-beta307-verification.json). Journaux dans
|
||||
`build/mill307-build.log` et `build/mill307-artifacts.log`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
```
|
||||
@@ -3,6 +3,12 @@
|
||||
16 septembre 2026. Cadrage corrigé après clarification du créateur.
|
||||
Aucun portage, adaptateur ou changement de sauvegarde livré ici.
|
||||
|
||||
**Suite du 28 octobre 2026 :** le créateur ouvre la
|
||||
[refonte 26.3 d'It's Alive !](itsalive-26-3.md). Le premier lot importe les
|
||||
textures ; les mécaniques restent en tickets. La cuisinière four + table de
|
||||
fabrication et son lien avec le Fourneau seront examinés dans IA-08. Le texte
|
||||
ci-dessous conserve les décisions et constats du cadrage du 16 septembre.
|
||||
|
||||
## Direction retenue
|
||||
|
||||
Le créateur souhaite intégrer **tout It's Alive dans Sanctuary**, mais
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# Sanctuary beta.289
|
||||
|
||||
Six nouveaux infectés rejoignent Sanctuary : Infecté, Charger, Spitter, Boomer,
|
||||
Smoker et Hunter, chacun avec son œuf et son comportement. Le Spitter laisse
|
||||
une flaque d’acide ; le Smoker doit toucher avec son lasso avant de tirer sa
|
||||
cible ; le Hunter prépare un bond qui peut être esquivé.
|
||||
|
||||
Neuf tenues aléatoires sont partagées avec le zombie classique. Les bras restent
|
||||
en avant, avec le Hunter accroupi au sol. Les infectés restent sans variante
|
||||
bébé ; leurs familiers reprennent le modèle adulte en miniature, à taille
|
||||
variable, avec leurs pouvoirs.
|
||||
|
||||
Les objets lumineux tenus en main éclairent de nouveau le terrain avec Sodium,
|
||||
y compris sans PBR. JEI est intégré au même JAR Sanctuary sur le client et le
|
||||
serveur. Le grand dézoom de carte et les relevés lointains sont conservés.
|
||||
|
||||
Minecraft 26.3 · Fabric 0.19.5. Construction complète, 31 tests serveur et parcours
|
||||
Vulkan des zombies/familiers vérifiés pour cette livraison. Les lumières utilisent
|
||||
le correctif de beta.288, dont les classes sont conservées à l’identique.
|
||||
|
||||
Le téléchargement du site reste l’instance Prism prête à suivre le canal stable.
|
||||
@@ -0,0 +1,19 @@
|
||||
# Sanctuary beta.293
|
||||
|
||||
- Happy Creepers repris de la branche dédiée `codex/happy-creepers` : Maj +
|
||||
clic droit avec une fleur pour la porter, visage souriant et comportement
|
||||
passif ; retrait à main vide avec le même geste. Charge électrique conservée.
|
||||
- Baleines fantômes volantes et œuf natif de beta.290 inclus.
|
||||
- Logo Sanctuary affiché pendant les téléchargements et mises à jour packwiz,
|
||||
avec l'installateur intégré au ZIP Prism prêt à importer.
|
||||
- Simple Voice Chat 2.6.24+26.3, Bobby 5.2.16+mc26.3, Lithium 0.26.2+mc26.3 et
|
||||
Entity Culling 1.11.3 pour 26.3 disponibles comme choix facultatifs du client.
|
||||
Lithium et la voix font également partie du profil serveur.
|
||||
- Sound Physics 1.5.1, Sodium 0.9.2, JEI embarqué et Minecraft 26.3 / Fabric
|
||||
0.19.5 conservés. La version vocale retenue respecte ces dépendances.
|
||||
- Sauvegardes et réglages restent attachés à la même instance ; aucun changement
|
||||
de génération ou de format de monde. Dozei Stream et Only Fun restent futurs.
|
||||
|
||||
Le ZIP Prism suit le canal stable à chaque lancement. Les anciens utilisateurs
|
||||
gardent leur instance ; la première mise à jour de l'habillage doit aussi
|
||||
installer le nouvel outil packwiz et conserver `--bootstrap-no-update`.
|
||||
@@ -0,0 +1,17 @@
|
||||
# Sanctuary beta.295
|
||||
|
||||
Le serveur **Sanctuary Beta** est enregistré automatiquement au premier
|
||||
lancement du client, avec le logo du modpack. Il utilise l'adresse publique
|
||||
`beta.sanctuary-minecraft.net`. Les autres favoris restent conservés ; vous
|
||||
pouvez ensuite renommer, déplacer ou supprimer cette entrée.
|
||||
|
||||
Le serveur annonce aussi le logo Sanctuary dans la liste multijoueur.
|
||||
Le même parcours s'applique au ZIP Prism du site, au MRpack et aux instances
|
||||
existantes qui suivent le canal packwiz.
|
||||
|
||||
La commande de propriété est unifiée : **`/sanctuary property`**, avec
|
||||
`claim`, `protect` et `duel`. Les alias `propriete` et `propriété` sont retirés.
|
||||
Les règles, prix et protections des claims restent identiques.
|
||||
|
||||
Les sauvegardes et paramètres de génération sont conservés ; aucun nouveau
|
||||
monde n'est nécessaire.
|
||||
@@ -0,0 +1,20 @@
|
||||
# Sanctuary beta.296
|
||||
|
||||
Les écrans partagés arrivent dans Sanctuary, avec le menu original de Dream
|
||||
Displays 1.10.4. Huit bâtons autour d'une redstone fabriquent une ancre ; la
|
||||
largeur et la hauteur se règlent librement, sans cadre supplémentaire.
|
||||
Le contour suit toute la surface et l'image conserve ses proportions.
|
||||
|
||||
Le serveur garde la séance commune, les clients lisent la vidéo. Clic droit
|
||||
sur l'écran à 16 blocs pour le lecteur ; Maj + clic droit près de l'ancre ou
|
||||
bouton Taille pour redimensionner. Sound Physics peut être désactivé pour les
|
||||
vidéos uniquement, dans ses options de son.
|
||||
|
||||
Le favori Sanctuary Beta, les dernières commandes de propriété, les mondes et
|
||||
les réglages sont conservés. Minecraft 26.3 / Fabric 0.19.5 inchangés.
|
||||
Le module Media est inclus dans Sanctuary ; Dream Displays est installé par
|
||||
packwiz sur les deux côtés.
|
||||
|
||||
Fonction expérimentale à tester : vidéos et live HLS daté contrôlés vérifiés
|
||||
sous Vulkan, sources publiques Twitch/YouTube encore à essayer. Le filtre
|
||||
16 pixels/bloc et les disques blancs ne sont pas inclus.
|
||||
@@ -0,0 +1,18 @@
|
||||
# Sanctuary beta.297
|
||||
|
||||
Le menu de dimensions s'ouvre automatiquement à la première pose du cadre.
|
||||
Ensuite, clic droit et Maj + clic droit ouvrent directement le lecteur Dream ;
|
||||
le bouton Taille / Size permet toujours de redimensionner près de l'ancre.
|
||||
|
||||
Le cadre possède maintenant une vraie épaisseur de 1/16 de bloc, avec des
|
||||
faces latérales qui suivent exactement la surface de l'écran. Le repère rouge,
|
||||
le contour de sélection du bloc invisible et les liserés vidéo visibles de
|
||||
côté sont retirés. Le son continue lorsque l'image est masquée.
|
||||
|
||||
Les écrans déjà posés en beta.296 conservent leur source, leurs dimensions et
|
||||
leurs données. Aucun bloc à remplacer et aucun changement de format de monde.
|
||||
Media passe en 0.3.1 ; Minecraft 26.3, Fabric, Dream Displays 1.10.4 et les
|
||||
autres dépendances restent inchangés.
|
||||
|
||||
Correctif vérifié sous Vulkan avec deux clients, 17 contrôles d'interaction
|
||||
et des vues de face, des côtés, du haut et de l'arrière.
|
||||
@@ -0,0 +1,15 @@
|
||||
# Sanctuary beta.298
|
||||
|
||||
Le petit cadre brillant dans le coin inférieur gauche de la vidéo est corrigé
|
||||
avec les shaders Sanctuary activés. Le modèle invisible de l'ancre ne fournit
|
||||
plus de faces à la passe des normales PBR. Le grand cadre conserve sa taille
|
||||
et son épaisseur ; le lecteur et le redimensionnement gardent leurs gestes.
|
||||
|
||||
Les écrans déjà posés conservent leur source, leurs dimensions et leurs données.
|
||||
Aucun bloc à remplacer ni conversion de sauvegarde. Media passe en 0.3.2 ;
|
||||
Minecraft 26.3, Fabric et Dream Displays 1.10.4 restent inchangés.
|
||||
|
||||
Correctif vérifié à deux clients Vulkan avec PBR actif, vidéo en mouvement et
|
||||
gros plans de face et en vue rasante. Le détail des contrôles et leurs limites
|
||||
est dans `docs/media-anchor-normals-beta298.md` ; pas de nouvelle validation
|
||||
des sources publiques ni de l'endurance du lecteur.
|
||||
@@ -0,0 +1,30 @@
|
||||
# Sanctuary beta.315 — cuisine et agriculture It's Alive
|
||||
|
||||
La refonte locale beta.299 à beta.315 rejoint le pack Sanctuary 26.3.
|
||||
|
||||
- Vingt cultures, citronnier, olivier, caféier et vanille grimpante vers le haut.
|
||||
- Recettes pour les nouvelles récoltes, poêle et piles de quatre, cuisinière
|
||||
automatique, chaudron remué au bâton et recettes répétées, fermentation.
|
||||
- Moulin manuel, sans combustible. Les blocs de tomates, raisins et olives
|
||||
se piétinent en huit paliers ou s'écrasent au piston ; super piston 27 blocs.
|
||||
- Préparation de saucisson à l'établi puis séchage sur quatre crochets,
|
||||
cinq minutes de jeu au sec ; pluie et immersion suspendent la progression.
|
||||
- Fromage posé en sept parts et saucisson posé en quatre tranches.
|
||||
- Vin jeune après trois minutes de fermentation ; vin de table, réserve et
|
||||
grand cru après un, trois et sept jours réels de garde au tonneau, jeu fermé.
|
||||
- Nourriture dans Nourriture et boissons, semences dans Naturel, sans nouvel onglet.
|
||||
|
||||
Les identifiants historiques de cette refonte restent stables. Les nouveaux
|
||||
blocs conservent leur état par les mécanismes natifs ; le vin a un horodatage
|
||||
serveur. Aucune régénération ou expansion de monde n'est effectuée.
|
||||
Les cultures sont jouables ; leur apparition naturelle et la répartition
|
||||
climatique ne sont pas introduites par cette livraison. Chercher les objets
|
||||
dans les onglets vanilla et leurs recettes dans JEI pour les essais.
|
||||
|
||||
Le fromage et le saucisson se mangent après la pose ; casser un aliment entamé
|
||||
ne rend pas un nouvel aliment entier. Une sortie de tonneau extraite par un
|
||||
entonnoir garde sa qualité : le verrouiller pour laisser vieillir le vin.
|
||||
|
||||
Minecraft 26.3, Fabric Loader 0.19.5 et dépendances du pack conservés.
|
||||
Les contrôles graphiques ciblent Vulkan avec Sodium. Les preuves détaillées
|
||||
et limites figurent dans les tickets beta.299–315 et le reçu de livraison.
|
||||
@@ -0,0 +1,29 @@
|
||||
# Sanctuary beta.318
|
||||
|
||||
Minecraft 26.3 · Fabric Loader 0.19.5 · Java 25.
|
||||
|
||||
Cette mise à jour réunit les ajouts beta.316 à beta.318 :
|
||||
|
||||
- Récoltes sauvages et premières semences en survie selon les biomes des neuf
|
||||
îles : cultures, arbres fruitiers, café et vanille. Les terrains déjà explorés
|
||||
gardent leurs blocs et disposent aussi de trouvailles adaptées au climat.
|
||||
- Séchoir : viandes, cabillaud et saumon crus, raisins, tomates, piment, herbes,
|
||||
fruits et vanille. Durées propres à chaque aliment, quatre crochets indépendants,
|
||||
pause sous la pluie et protection par un toit.
|
||||
- Dix-huit nouvelles recettes aux produits séchés : pains, brioche, biscuits,
|
||||
sandwichs, plats au chaudron, salade, dessert, mélange de fruits et épices.
|
||||
Le saucisson pimenté se prépare, sèche cinq minutes et se partage en quatre tranches.
|
||||
- Manger épicé provoque deux petits coups visuels et sonores, sans dégâts
|
||||
ni recul. La réaction fonctionne aussi sur les tranches de saucisson pimenté.
|
||||
|
||||
Les nouveaux objets restent dans Nourriture et boissons. Les herbes et le piment
|
||||
séchés, la poudre de piment et l'assaisonnement servent aussi dans la cuisine
|
||||
existante. Les bols et fioles des nouveaux plats reviennent à la consommation.
|
||||
|
||||
Les anciennes recettes, appareils et sauvegardes restent compatibles. Aucun
|
||||
repeuplement des anciens chunks ni changement de format de sauvegarde : les
|
||||
plantes sauvages apparaissent à la première décoration des nouveaux chunks.
|
||||
Les icônes supplémentaires réutilisent les sprites existants recolorés.
|
||||
|
||||
[Guide des récoltes](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.318/docs/wiki/alimentation/README.md) ·
|
||||
[Recettes, quantités et durées](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.318/docs/wiki/alimentation/sechoir.md).
|
||||
@@ -0,0 +1,40 @@
|
||||
# Sanctuary beta.320
|
||||
|
||||
Minecraft 26.3 · Fabric Loader 0.19.5 · Java 25.
|
||||
|
||||
- **Cuisine directe** : les ingrédients se mettent dans la poêle, le chaudron
|
||||
ou la cuisinière. Les 46 préparations artificielles « Uncooked » quittent
|
||||
les fabrications, le créatif et JEI. Les anciennes préparations stockées
|
||||
restent cuisinables au four ou au fumoir.
|
||||
- **Chaudron Minecraft** : plus d’objet « Cooking Pot » distinct. Ajouter les
|
||||
ingrédients au chaudron ordinaire, puis remuer avec un bâton. Les anciens
|
||||
exemplaires et les préparations déjà engagées restent récupérables.
|
||||
- **Baratte en bois**, sans combustible : lait au repos cinq minutes pour
|
||||
deux crèmes et le seau rendu ; beurre en huit gestes, crème fouettée avec du
|
||||
sucre en huit gestes, beurre aux herbes en quatre gestes. Maj-clic à main
|
||||
vide reprend les ingrédients et annule le travail inachevé. Les nouveaux
|
||||
laitages servent aussi dans la cuisine existante ; le fromage reste au tonneau.
|
||||
- **Semences dans l’herbe** : graines, grains à planter et boutures adaptés
|
||||
au climat remplacent les fruits et légumes récoltés. Carottes, pommes de
|
||||
terre, oignons, ail et couronnes d’ananas se trouvent sur les vraies plantes
|
||||
sauvages ou se multiplient à partir des cultures déjà rapportées.
|
||||
- **Carte à la hauteur du joueur** : Atlas et aperçu Pause suivent le Y exact
|
||||
des pieds, sans arrondi aux six anciens plafonds. Le toit des grottes est
|
||||
exclu ; zoom et déplacement restent disponibles. Les anciennes cartes de
|
||||
surface restent conservées ; les nouvelles coupes se complètent en revisitant
|
||||
les zones. Les relevés de dimensions différentes restent séparés.
|
||||
- **Insectes et saisons** : calendrier des 47 espèces conservé, papillons
|
||||
diurnes suivant le soleil, grillons moins fréquents sous la pluie et papillons
|
||||
de nuit autour des lanternes extérieures, y compris suspendues. Habitats et
|
||||
plafonds de population conservés.
|
||||
|
||||
Les nouveautés restent dans les onglets créatifs existants. Aucun monde n’est
|
||||
régénéré ni repeuplé. Le support de carte Under est prêt pour ses types de
|
||||
dimensions ; cette livraison n’active pas le prototype Under ni ses portails.
|
||||
|
||||
Validation : **241 tests serveur**, contrôles complets de construction et
|
||||
parcours regroupé **Vulkan avec Sodium**, en FR/EN aux échelles 2/3/4.
|
||||
|
||||
[Laitages et baratte](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.320/docs/wiki/alimentation/laitages.md) ·
|
||||
[Récoltes et semences](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.320/docs/wiki/alimentation/README.md) ·
|
||||
[Détails et vérification du lot](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.320/docs/integration-beta320.md).
|
||||
@@ -0,0 +1,26 @@
|
||||
# Sanctuary beta.321
|
||||
|
||||
Minecraft 26.3 · Fabric Loader 0.19.5 · Java 25.
|
||||
|
||||
- **Carte adaptative** : vue complète de la surface en extérieur ; coupe à
|
||||
la hauteur des pieds sous un toit ou dans une grotte. Même comportement
|
||||
dans l’aperçu Pause. Le feuillage seul conserve la vue extérieure ; le verre
|
||||
et les dalles comptent comme couverture. Zoom et cadrage restent conservés.
|
||||
- **Baratte en bois ouverte**, avec une vraie cavité et une poignée qui
|
||||
tourne par quarts de tour. Tous les éléments du modèle restent droits.
|
||||
- **Saucissons simplifiés** : pavés sans petits bouts blancs ni ficelles
|
||||
saillantes, pour les variantes crues, séchées et épicées. Les saucissons
|
||||
posés gardent leurs quatre tranches et raccourcissent à chaque bouchée.
|
||||
- **Noms d’inventaire corrigés** pour la Baratte / Dairy Churn et le
|
||||
Séchoir / Drying Rack, en français et en anglais.
|
||||
|
||||
Aucun changement de génération, de recette, d’identifiant ou de format de
|
||||
sauvegarde. Les mondes existants et les anciennes découvertes de carte restent
|
||||
conservés. Cette version n’active aucun prototype Under.
|
||||
|
||||
Validation du lot : **55 tests serveur**, `check build assemblePack`, parcours
|
||||
**Vulkan avec Sodium**, noms FR/EN aux échelles 2/3/4, cuisson/séchage et
|
||||
portions réelles, sauvegarde/relecture, seize états de baratte et transitions
|
||||
extérieur/intérieur dans la grande carte et l’aperçu Pause.
|
||||
|
||||
[Détails du lot](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.321/docs/presentation-beta321.md).
|
||||
@@ -0,0 +1,44 @@
|
||||
# Sanctuary beta.324
|
||||
|
||||
Minecraft 26.3 · Fabric Loader 0.19.5 · Java 25.
|
||||
|
||||
- **Poules colorées rares** : émeraude, rubis, saphir et or. Une poule
|
||||
ordinaire peut pondre un œuf en or, à raison d’une chance sur 256.
|
||||
Le lancer fait éclore un poussin rare. Les variantes pondent leur produit
|
||||
avec des délais de plus en plus longs et ne se reproduisent pas.
|
||||
- **Aptitudes rééquilibrées** selon leur portée. Catalogue des recettes :
|
||||
30 niveaux ; Savoir alimentaire : 6 ; Étude des familiers : 15.
|
||||
Les aptitudes déjà achetées restent acquises, sans supplément ni rachat.
|
||||
- **Recherche JEI réparée** : la première lettre ne retire plus le focus.
|
||||
Saisie française/anglaise, accents, Unicode et touches d’édition conservés.
|
||||
Le fork embarqué passe à `30.32.0-sanctuary.5`.
|
||||
- **Séchoir à deux aliments**, agrandis et redressés. Les anciennes positions
|
||||
excédentaires restent en attente avec leur progression. Nouvelle fabrication :
|
||||
cinq bâtons et deux planches, sans fil.
|
||||
- **Fabrication du moulin** : la pierre lisse remplace le tailleur de pierre.
|
||||
Le moulin reste manuel et sans combustible.
|
||||
|
||||
Les nouveaux achats d’aptitudes coûtent des niveaux d’XP :
|
||||
|
||||
| Aptitude | Niveaux |
|
||||
| --- | ---: |
|
||||
| Noms des créatures | 2 |
|
||||
| Se reposer | 4 |
|
||||
| Zoom | 5 |
|
||||
| Savoir alimentaire | 6 |
|
||||
| Nage | 8 |
|
||||
| Rangement | 10 |
|
||||
| Grande carte | 12 |
|
||||
| Étude des familiers | 15 |
|
||||
| Lien actif | 20 |
|
||||
| Forgerie | 20 |
|
||||
| Alchimie | 25 |
|
||||
| Enchantement | 30 |
|
||||
| Catalogue des recettes | 30 |
|
||||
|
||||
Les prix personnalisés restent conservés ; les anciens tarifs par défaut
|
||||
des configurations suivent la transition documentée. Les découvertes, favoris
|
||||
JEI et reçus d’achat restent conservés. Aucun monde n’est régénéré et aucun
|
||||
prototype Under n’est activé.
|
||||
|
||||
[Sources, compatibilité et validation](https://git.botsu.net/koka/sanctuary-beta/src/tag/beta.324/docs/integration-beta324.md).
|
||||
@@ -0,0 +1,164 @@
|
||||
# PACK-292 — voix, cache de chunks et optimisations
|
||||
|
||||
Préparation locale du **26 octobre 2026**, branche
|
||||
`codex/optional-mods-integration`, depuis le logo packwiz beta.291.
|
||||
Le même logo et le même canal stable sont conservés.
|
||||
|
||||
## Mods intégrés
|
||||
|
||||
| Mod | Binaire retenu pour Minecraft 26.3 / Fabric | Client | Serveur |
|
||||
| --- | --- | --- | --- |
|
||||
| [Simple Voice Chat](https://modrinth.com/plugin/simple-voice-chat/version/OLnMVWXy) | 2.6.24+26.3, bêta | Facultatif, coché initialement | Inclus, activé initialement |
|
||||
| [Bobby](https://modrinth.com/mod/bobby/version/J7YnfCss) | 5.2.16+mc26.3 | Facultatif, coché initialement | Exclu |
|
||||
| [Lithium](https://modrinth.com/mod/lithium/version/xS0Q8LSi) | 0.26.2+mc26.3 | Facultatif, coché initialement | Inclus, activé initialement |
|
||||
| [Entity Culling](https://modrinth.com/mod/entityculling/version/X1g3VhTx) | 1.11.3 pour mc26.3 | Facultatif, coché initialement | Exclu |
|
||||
|
||||
Chaque téléchargement utilise le binaire original, sa version Modrinth
|
||||
immuable et son SHA-512 dans `packwiz/mods/*.pw.toml`. Les JAR restent séparés,
|
||||
sans dépendance obligatoire ni copie imbriquée dans le JAR Sanctuary. Les
|
||||
descriptions du sélecteur packwiz sont en FR/EN. Les interfaces amont conservent
|
||||
leurs propres traductions, vérifiées pour le menu vocal français et anglais.
|
||||
|
||||
`scripts/data/optional-mods.json` fixe les identifiants, versions, côtés,
|
||||
dépendances et conflits attendus. `verify_optional_mods.py`, exécuté par
|
||||
`check` et `assemblePack`, vérifie les métadonnées Fabric des JAR, leur hash et
|
||||
les bibliothèques imbriquées. Les quatre fichiers réellement utilisés par
|
||||
Gradle sont aussi comparés aux binaires vérifiés pendant la validation.
|
||||
Minecraft reste **26.3**, Loader **0.19.5**, Java **25**, Fabric API
|
||||
**0.160.5+26.3** ; MixinExtras **0.5.5** est fourni par Loader et satisfait Lithium.
|
||||
|
||||
## Choix de version vocale
|
||||
|
||||
Les versions vocales 2.6.25 et 2.6.26 refusent explicitement Sound Physics
|
||||
Remastered <1.5.2. Le pack conserve son **1.5.1+26.3** et son interface native,
|
||||
donc la voix est épinglée en **2.6.24+26.3**, sans contournement des dépendances.
|
||||
Le plug-in Sound Physics est chargé par le serveur vocal et la connexion locale
|
||||
est authentifiée pendant le parcours client. Les mises à jour de ces deux mods
|
||||
doivent être traitées ensemble à la prochaine évolution de version.
|
||||
|
||||
Le menu vocal s'ouvre avec sa touche amont **V**, configurable ; la touche de
|
||||
push-to-talk se choisit dans les réglages vocaux. Aucun raccourci ni préférence
|
||||
personnelle n'est remplacé par le pack. La voix reste facultative pour le joueur.
|
||||
|
||||
Le profil serveur contient désormais **Fabric API, Sanctuary, Lithium et Simple
|
||||
Voice Chat**. Son choix est indépendant des options d'un client. Le kit Linux
|
||||
reste sans interface ; son installateur officiel est conservé. La vérification
|
||||
Web compare aussi les nouveaux JAR serveur au canal avant toute publication.
|
||||
|
||||
L'utilisation sur la Beta dédiée exigera le
|
||||
[port UDP vocal](https://dev.modrepo.de/minecraft/voicechat/wiki/server_setup),
|
||||
par défaut 24454, et un échange audible entre deux joueurs. Cette préparation
|
||||
ne modifie ni la CT Beta, ni ses règles réseau, ni l'instance personnelle. Le
|
||||
microphone est désactivé dans le test de développement ; aucune captation de la
|
||||
voix réelle de l'utilisateur n'est nécessaire à la validation réseau locale.
|
||||
|
||||
## Portée de Bobby et d'Entity Culling
|
||||
|
||||
[Bobby](https://github.com/Johni0702/bobby) conserve les chunks déjà envoyés
|
||||
par le serveur dans son cache client `.bobby`, puis peut afficher leur dernière
|
||||
copie connue au-delà de la distance d'envoi. Il ne génère pas de chunks et ne
|
||||
simule pas les zones lointaines. Le serveur reste autoritaire lorsqu'il renvoie
|
||||
l'état courant. Le pack ne distribue aucun monde `bobby-fallback`, cache, ni
|
||||
configuration personnelle ; la limite de distance et la conservation du cache
|
||||
restent celles du mod et des réglages du joueur.
|
||||
|
||||
[Entity Culling](https://github.com/tr7zw/EntityCulling) conserve son moteur
|
||||
amont et ses bibliothèques TRender/TRansition imbriquées. L'occlusion et la
|
||||
réapparition d'une entité sont exercées sur Vulkan. Aucun gain chiffré de FPS
|
||||
ou de ticks n'est revendiqué ; les validations vérifient ici le fonctionnement
|
||||
et la coexistence, sans benchmark représentatif de tous les mondes Sanctuary.
|
||||
|
||||
## Vérifications
|
||||
|
||||
- `./gradlew check build assemblePack assembleServerPack
|
||||
-PsanctuaryFocusedTests=recipes,progression,smoker285,hunter286
|
||||
-PsanctuaryAtlasOnly=true -PsanctuaryOptional292ServerTests=true` :
|
||||
**réussi en 2 min 52 s**, **46 tests serveur requis réussis**, Lithium et voix
|
||||
effectivement chargés. Recettes, progression, lasso du Smoker et bond du Hunter
|
||||
sont exercés avec ces dépendances. Les contrôles de ressources, de packwiz et
|
||||
de l'habillage passent aussi. Le test de quota de baleines déjà en échec dans
|
||||
[beta.291](packwiz-logo-beta291.md) reste hors de ce périmètre, sans correction
|
||||
ni validation nouvelle de ce cas.
|
||||
- Parcours graphique **Vulkan / MoltenVK 1.4.2 / Apple M1 avec Sodium 0.9.2**,
|
||||
réussi en **38 s** : quatre mods présents, Sound Physics initialisé, entité
|
||||
masquée derrière le mur puis visible après retrait ; Bobby actif, stockage
|
||||
persistant et **35 chunks de cache** visibles après un déplacement de huit
|
||||
chunks avec une distance d'envoi de quatre. Authentification et connexion UDP
|
||||
vocales réelles, menus vocaux FR/EN ouverts en gardant le microphone muet.
|
||||
Les captures du mur, de l'entité réapparue et du menu FR sont inspectées.
|
||||
- Le même parcours **Vulkan sans Sodium** réussit en **43 s**, avec les mêmes
|
||||
contrôles, 35 chunks de cache et menus FR/EN. Un premier passage avait atteint
|
||||
tous les contrôles avant de se bloquer dans la synchronisation des threads du
|
||||
lanceur Fabric pendant la fermeture du monde ; il a été interrompu après
|
||||
capture des piles. La nouvelle exécution se ferme normalement. Cette limite
|
||||
du premier essai reste dans le journal, sans la présenter comme un succès.
|
||||
- Deux synchronisations client depuis le ZIP Prism réussies : **huit JAR**,
|
||||
un seul Sanctuary, mêmes hashes au second passage, logo de l'installateur
|
||||
conservé et trois fichiers témoins personnels inchangés. Puis deux passages
|
||||
supplémentaires avec un choix Bobby désactivé déjà persisté, simulé dans le
|
||||
cache de test : Bobby n'est pas réinstallé et le choix reste faux.
|
||||
- Deux synchronisations serveur réussies : exactement les quatre JAR du
|
||||
profil serveur ; aucun Bobby, Entity Culling, Sodium ou Sound Physics client.
|
||||
- Les **11 tests** du vérificateur Web passent, y compris la comparaison des
|
||||
dépendances partagées avec le relevé serveur et le refus d'un mod client dans
|
||||
son profil. Le MRpack exporté possède les sept dépendances distantes et leurs
|
||||
bons côtés et options ; les overrides sont limités à Sanctuary et son icône.
|
||||
- Contrôle complémentaire des baleines avec les quatre mods, Sodium et Vulkan :
|
||||
les assertions de rendu translucide, modèle animé, œuf FR/EN, deux entités
|
||||
chargées et déplacement réel atteignent `WHALE290_CLIENT_PASS`. La capture
|
||||
`0001_whale290-ghosts.png` est inspectée. Ce parcours se bloque ensuite à la
|
||||
fermeture dans la synchronisation du lanceur de tests Fabric et est arrêté
|
||||
après capture des piles ; il ne constitue pas une exécution complète réussie.
|
||||
- Après ajout des notices, le JAR et les archives sont réassemblés et les
|
||||
synchronisations sont répétées sur les binaires finaux. Les **2 658 classes
|
||||
de jeu** restent identiques à beta.291. Le vérificateur Web accepte le MRpack
|
||||
et le ZIP Prism finaux contre les métadonnées préparées et les hashes du
|
||||
serveur de test synchronisé, avec état de service simulé pour cette vérification
|
||||
hors ligne ; aucune CT de production n'est contactée.
|
||||
|
||||
Les essais utilisent uniquement des mondes et dossiers de développement sous
|
||||
`build/`. Les copies et hashes finaux sont consignés dans
|
||||
`build/optional-mods292/`, avec les journaux, captures et reçus natifs.
|
||||
Le passage vocal audible à deux joueurs, l'accès UDP depuis Internet et les
|
||||
rendus propres aux familiers et multiblocs avec culling restent des
|
||||
vérifications complémentaires à effectuer avant d'en revendiquer la couverture.
|
||||
|
||||
Commande du parcours client principal (ajouter `-PsanctuarySodiumClientTests=true`
|
||||
pour le passage avec Sodium) :
|
||||
|
||||
```sh
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryOptional292ClientTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=8 \
|
||||
-PsanctuaryClientNoVsync=true -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryFocusedTests=recipes,progression
|
||||
```
|
||||
|
||||
L'option supplémentaire `-PsanctuaryOptional292WhaleOnly=true` sélectionne
|
||||
le diagnostic des baleines avec le même ensemble de mods ; son blocage de
|
||||
fermeture observé ci-dessus reste ouvert.
|
||||
|
||||
## Livraison et suite
|
||||
|
||||
Le compteur du pack et du mod est aligné sur **beta.292**. Les archives locales
|
||||
conservent l'habillage packwiz, les options et le canal de la Beta. Un ZIP Prism
|
||||
préparé ne fait pas avancer le canal public : avant publication, ce canal sert
|
||||
encore la version publiée. Aucune installation de jeu, sauvegarde personnelle,
|
||||
publication Web, release Gitea ou configuration réseau n'est modifiée ici.
|
||||
|
||||
Dozei Stream et Only Fun restent des modules personnels futurs, avec leurs
|
||||
[tickets de cadrage](integrations-mods-next.md). Aucun artefact fictif n'est
|
||||
ajouté au pack pour ces projets.
|
||||
|
||||
Artefacts locaux vérifiés, reçus dans `artifacts.json` :
|
||||
|
||||
| Fichier dans `build/` | Octets | SHA-256 |
|
||||
| --- | ---: | --- |
|
||||
| `Sanctuary-beta.292.mrpack` | 16 753 207 | `28980cec018fc81f700cb8ecb3981199537e04ff737bf58b220ce442b7e5dc56` |
|
||||
| `Sanctuary-Prism-beta.292.zip` | 3 928 525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
|
||||
| `Sanctuary-Server-beta.292.zip` | 4 036 530 | `0ac362bbfbfd2c03efdaf6b209d9319e648ad546bee074521038fffc86bb640a` |
|
||||
|
||||
JAR Sanctuary : `0163da08897de96559ab51f482363bd00c03cfb3309784cdb6e112acf25a4862`.
|
||||
Le ZIP Prism d'amorçage a les mêmes octets qu'en beta.291 : il contient l'outil,
|
||||
le logo et l'adresse stable, et les versions de Minecraft/Loader n'ont pas changé.
|
||||
Le MRpack et les métadonnées du canal préparé contiennent les nouveaux mods.
|
||||
@@ -0,0 +1,49 @@
|
||||
{
|
||||
"version": "beta.308",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.308.jar",
|
||||
"sha256": "103e08039063633829b4f2059f25e32920cdb7e4df6d1e02512f40a35c0390eb",
|
||||
"previous_verified_sha256": "e510871bd515e5b52f2e1b218b593b49ff74ffae320e9b6b665ef1629c53d3d0",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity$1.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity$2.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/screen/KitchenOvenScreen.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$FuelSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$IngredientSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$OutputSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$1.class"
|
||||
],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 192,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_source_classes": 44,
|
||||
"culinary_compiled_classes_verified": 62,
|
||||
"oven_recipes": 13,
|
||||
"unchanged_pngs": 1108,
|
||||
"server_required": 63,
|
||||
"oven_scenarios": 11,
|
||||
"client_vulkan": {
|
||||
"log": "build/oven308-client.log",
|
||||
"screenshots": "build/oven308-screenshots",
|
||||
"screenshot_count": 12,
|
||||
"world_seed": 308,
|
||||
"sodium": "0.9.2+mc26.3"
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"build_log": "build/oven308-build.log"
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
# CUI-308 / IA-08 — cuisinière, grille et cuisson automatique
|
||||
|
||||
> Correction locale suivante : [beta.309 retire l'aperçu, garde une seule sortie
|
||||
> et bloque le remplissage de la grille par entonnoir](oven-single-output-beta309.md).
|
||||
> Cette page conserve le résultat historique de beta.308.
|
||||
|
||||
Demande du créateur du 28 octobre 2026, précisée : **démarrage automatique
|
||||
comme un four**, et **recettes de cuisine uniquement**. Préparation locale
|
||||
**beta.308**, après beta.307, sur la même branche `codex/itsalive-26-3`.
|
||||
Aucune publication, installation dans Prism, mise à jour de canal ou de serveur.
|
||||
|
||||
## Cycle jouable
|
||||
|
||||
La cuisinière réunit une **grille persistante 3 × 3**, un combustible natif et
|
||||
une sortie pour les plats terminés. L'interface montre aussi un **aperçu
|
||||
« À cuire / To cook »**, séparé de cette sortie. Cet aperçu indique la recette
|
||||
reconnue mais ne peut être retiré, déplacé, cloné ou collecté par double-clic.
|
||||
Ses aides FR/EN expliquent le paiement en fin de cuisson.
|
||||
|
||||
La cuisson commence automatiquement lorsqu'une recette valide, de la place
|
||||
en sortie et une source de combustible sont présents. Les ingrédients restent
|
||||
visibles et disponibles dans la grille pendant **toute la durée de cuisson**.
|
||||
À l'échéance seulement, la cuisinière consomme les quantités d'une recette,
|
||||
rend les récipients réellement payés et range le plat dans la sortie.
|
||||
Les ingrédients restants permettent un nouveau cycle complet, sans bouton.
|
||||
Trois pâtes donnent donc trois pains sur trois durées de 240 ticks.
|
||||
|
||||
Fermer le menu laisse la grille dans le bloc et la cuisson continue tant que
|
||||
le chunk est chargé. Retirer, remplacer, déplacer ou modifier la quantité ou
|
||||
les composants d'un ingrédient **annule l'avancement en cours**. Cela couvre
|
||||
les Maj-clics partiels, les autres joueurs, les entonnoirs et les changements
|
||||
de pile effectués directement. Si la nouvelle grille reste une recette valide,
|
||||
un nouveau cycle démarre automatiquement à zéro ; sinon elle attend.
|
||||
Remettre immédiatement le même ingrédient ne rend pas l'ancien avancement.
|
||||
|
||||
Prendre un plat déjà cuit ou ajouter du combustible n'édite pas la grille et
|
||||
ne remet pas sa cuisson à zéro. Une sortie pleine ou incompatible empêche
|
||||
l'allumage d'un nouveau combustible et remet le cycle bloqué à zéro, sans
|
||||
consommer les ingrédients. Libérer la sortie permet un nouveau cycle complet.
|
||||
Le Maj-clic utilise les mêmes règles de combustible côté client et serveur.
|
||||
|
||||
Le combustible suit les composants et durées du four Minecraft **26.3**.
|
||||
Un charbon est payé à l'allumage, comme dans un four ; retirer un ingrédient
|
||||
ne rembourse pas le combustible déjà brûlé. La chaleur restante continue de
|
||||
se dépenser. Les combustibles encore en pile restent disponibles. Une pause
|
||||
par manque de combustible conserve l'avancement tant que la grille est intacte.
|
||||
|
||||
Les **treize recettes de cuisinière**, leurs ingrédients, résultats, identifiants
|
||||
et durées de 240 à 380 ticks restent en place. La cuisinière ne fabrique pas
|
||||
les outils et objets de l'établi ordinaire et ne fond pas les minerais.
|
||||
Les 92 recettes du catalogue culinaire et les autres appareils restent dans
|
||||
leurs circuits existants. La fabrication de la cuisinière conserve trois
|
||||
lingots de fer, quatre blocs de briques, une table de fabrication et un four.
|
||||
|
||||
## Continuité des sauvegardes
|
||||
|
||||
L'identifiant `sanctuary:kitchen_oven` reste stable pour le bloc, l'objet, le
|
||||
menu et le bloc entité. Les **onze cases sauvegardées** gardent leur encodage :
|
||||
0–8 pour la grille, 9 pour le combustible, 10 pour les plats cuits. L'aperçu
|
||||
est une case virtuelle du menu, jamais une douzième case de stockage.
|
||||
|
||||
Les champs natifs existants `CookingProgress`, `CookingDuration`,
|
||||
`ActiveRecipe`, `BurnTime` et `BurnDuration` sont conservés. La surveillance de
|
||||
la grille est reconstruite depuis les objets chargés, sans nouveau champ
|
||||
de sauvegarde ni conversion automatique. Une cuisson en cours reprend avec
|
||||
ses ingrédients et son avancement. Le temps écoulé hors chargement ne produit
|
||||
aucun repas supplémentaire, comme pour une cuisson fondée sur les ticks du bloc.
|
||||
|
||||
La casse rend uniquement le vrai inventaire restant, une seule fois. Elle
|
||||
ne transforme pas l'aperçu en plat. Aucun monde personnel n'est ouvert ou
|
||||
modifié par cette préparation ; les tests utilisent de nouveaux mondes ignorés.
|
||||
|
||||
## Vérifications
|
||||
|
||||
`check build assemblePack` passe en **3 min 6 s**, avec **63 tests serveur
|
||||
requis réussis**, dont onze nouveaux scénarios de cuisinière. Les régressions
|
||||
appareils, cuisine, moulin, recettes, progression et connaissances alimentaires
|
||||
sont incluses.
|
||||
|
||||
Minecraft **26.3**, Fabric API **0.160.5+26.3**, Java 25. Les onze nouveaux tests
|
||||
serveur couvrent les échéances et lots successifs, la fermeture, l'annulation
|
||||
près de la fin, le Maj-clic partiel, les changements directs de pile, la sortie
|
||||
bloquée, l'aperçu non retirable, le rechargement natif d'une cuisson en cours,
|
||||
les récipients, le périmètre culinaire et la casse sans duplication.
|
||||
Les régressions des appareils exécutent également les treize recettes réelles.
|
||||
|
||||
Le parcours **Vulkan avec Sodium 0.9.2** passe en **1 min 41 s**. Il utilise
|
||||
de vrais paquets d'insertion et de retrait, vérifie la prédiction du Maj-clic
|
||||
du combustible, l'aperçu non retirable et les écrans FR/EN aux échelles GUI
|
||||
2/3/4. Retirer la pâte annule une cuisson aux trois quarts sans la consommer.
|
||||
Après remise en place, les trois cycles se terminent avec le menu fermé et
|
||||
produisent exactement trois pains. Une fermeture/réouverture réelle du monde
|
||||
conserve ces trois pains, récupérés ensuite par un vrai Maj-clic. Les treize
|
||||
recettes de cuisinière restent présentes dans JEI. Les douze captures sont
|
||||
archivées dans `build/oven308-screenshots/`, journal `build/oven308-client.log`.
|
||||
|
||||
Les **1 000 JSON générés** sont identiques aux sources et au JAR beta.307 :
|
||||
432 culinaires, 192 d'appareils et 376 agricoles. Les 44 sources culinaires
|
||||
et leurs 62 classes compilées sont présentes et contrôlées. L'archive ne
|
||||
change que les classes de cuisinière, les libellés FR/EN, la version et les
|
||||
notices ; le nouveau slot d'aperçu ajoute une classe interne de menu.
|
||||
Les **1 108 PNG** de l'archive sont identiques à beta.307. Les copies du JAR
|
||||
packwiz client et serveur sont identiques au binaire vérifié ; le template
|
||||
ne change que par les notices et les deux fichiers de libellés.
|
||||
|
||||
SHA-256 de `sanctuary-beta.308.jar` :
|
||||
|
||||
```text
|
||||
103e08039063633829b4f2059f25e32920cdb7e4df6d1e02512f40a35c0390eb
|
||||
```
|
||||
|
||||
[Reçu de validation](oven-beta308-verification.json). Journaux complémentaires
|
||||
dans `build/oven308-build.log` et `build/oven308-artifacts.log`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryOven308ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=oven308 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Le parcours graphique cible uniquement **Vulkan avec Sodium 0.9.2**, dans un
|
||||
monde de développement neuf de graine **308**. Aucun PNG n'est modifié :
|
||||
l'interface assemble les panneaux et sprites vanilla de l'établi et du four.
|
||||
@@ -0,0 +1,54 @@
|
||||
{
|
||||
"version": "beta.309",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.309.jar",
|
||||
"sha256": "32ca2d855f71ac29af0a62ba9f4e463e3d11f172fefe7ecdbb1afad086b63ff9",
|
||||
"previous_verified_sha256": "103e08039063633829b4f2059f25e32920cdb7e4df6d1e02512f40a35c0390eb",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity$1.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity$2.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/KitchenOvenBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/screen/KitchenOvenScreen.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$FuelSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$IngredientSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$OutputSlot.class",
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [],
|
||||
"removed_jar_entries": [
|
||||
"fr/koka/sanctuary/cuisine/menu/KitchenOvenMenu$1.class"
|
||||
],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 192,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_source_classes": 44,
|
||||
"culinary_compiled_classes_verified": 61,
|
||||
"oven_recipes": 13,
|
||||
"machine_slots": 11,
|
||||
"cooked_output_slots": 1,
|
||||
"ingredient_hopper_insertion": false,
|
||||
"cooked_hopper_extraction": true,
|
||||
"unchanged_pngs": 1108,
|
||||
"server_required": 63,
|
||||
"oven_scenarios": 11,
|
||||
"client_vulkan": {
|
||||
"log": "build/oven309-client.log",
|
||||
"screenshots": "build/oven309-screenshots",
|
||||
"screenshot_count": 11,
|
||||
"world_seed": 309,
|
||||
"sodium": "0.9.2+mc26.3"
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"build_log": "build/oven309-build.log"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
# CUI-309 — une seule sortie pour la cuisinière
|
||||
|
||||
Correction demandée par le créateur le 28 octobre 2026 : **une seule sortie,
|
||||
comme un four Minecraft**, et abandon du remplissage automatique de la grille.
|
||||
Préparation locale **beta.309**, après beta.308, sur `codex/itsalive-26-3`.
|
||||
Aucune publication, installation dans Prism ou mise à jour de serveur/canal.
|
||||
|
||||
## Résultat
|
||||
|
||||
La cuisinière présente sa grille 3 × 3, le combustible et **une seule case de
|
||||
sortie**, centrée face à la flèche de cuisson. La case d'aperçu « À cuire »
|
||||
ajoutée en beta.308 est retirée, ainsi que ses aides et sa flèche supplémentaire.
|
||||
La sortie reste vide jusqu'à la fin d'une cuisson réelle.
|
||||
À la demande suivante du créateur, l'icône de feu (vide et animée) est décalée
|
||||
de **2 pixels GUI vers la gauche et de 2 pixels vers le haut**, sans déplacer
|
||||
la case de combustible.
|
||||
|
||||
Le cycle confirmé précédemment reste en place : démarrage automatique avec
|
||||
une recette de cuisine et du combustible, ingrédients conservés dans la grille
|
||||
jusqu'à l'échéance, paiement d'un lot en fin de cuisson, puis enchaînement des
|
||||
lots disponibles. Modifier la grille annule l'avancement ; fermer le menu
|
||||
laisse la cuisson continuer tant que le chunk est chargé. Les treize recettes
|
||||
de cuisinière et leurs durées sont conservées.
|
||||
|
||||
La grille se remplit **à la main**. Aucun ingrédient n'est insérable par
|
||||
entonnoir, quelle que soit la face. Un entonnoir placé dessous récupère
|
||||
uniquement les plats déjà cuits dans l'unique sortie ; il ne prélève ni les
|
||||
ingrédients ni le combustible. L'accès latéral au combustible déjà présent
|
||||
reste disponible. Aucune grille d'automatisation spéciale n'est ajoutée.
|
||||
|
||||
Les identifiants et les onze cases sauvegardées restent inchangés : neuf
|
||||
ingrédients, combustible en case 9 et plats cuits en case 10. L'ancienne case
|
||||
d'aperçu n'était pas sauvegardée. Retirer cette case virtuelle ne convertit ni
|
||||
ne supprime aucun objet. Les compteurs de cuisson et de combustion gardent
|
||||
leur encodage. Aucun monde personnel n'est ouvert ou modifié.
|
||||
|
||||
## Vérifications
|
||||
|
||||
`check build assemblePack` passe en **3 min 32 s**, avec **63 tests serveur
|
||||
requis réussis**, dont les onze scénarios de cuisinière adaptés. Le parcours
|
||||
Vulkan repasse après le déplacement du feu ; les contrôles portent sur le
|
||||
binaire final de cette préparation.
|
||||
|
||||
Minecraft **26.3**, Fabric API **0.160.5+26.3**, Java 25. La régression serveur
|
||||
de la cuisinière vérifie maintenant un véritable entonnoir d'alimentation
|
||||
bloqué au-dessus et un véritable entonnoir d'extraction dessous : aucune sortie
|
||||
avant l'échéance, puis exactement un pain extrait et deux pâtes encore en
|
||||
grille après le premier cycle. Les autres scénarios de beta.308 restent actifs.
|
||||
|
||||
Le parcours client est adapté à l'unique sortie, aux onze cases réelles et
|
||||
aux indices natifs d'inventaire retrouvés. Les tests graphiques restent
|
||||
exclusivement **Vulkan avec Sodium 0.9.2**, dans un nouveau monde de graine
|
||||
**309**. Aucun PNG n'est modifié ; l'interface utilise les panneaux vanilla.
|
||||
Les classes de régression et leurs options gardent leur nom `Oven308`.
|
||||
|
||||
Le parcours Vulkan passe en **1 min 47 s**, après le décalage du feu. Les
|
||||
écrans FR/EN aux échelles GUI 2/3/4 présentent une seule sortie et aucune case
|
||||
virtuelle. De vrais paquets d'inventaire vérifient le remplissage manuel, le
|
||||
combustible, l'annulation d'une cuisson aux trois quarts et sa reprise depuis
|
||||
zéro. Trois cycles se terminent avec le menu fermé, donnant exactement trois
|
||||
pains dans l'unique sortie. Une fermeture/réouverture réelle conserve ces
|
||||
trois pains et leur retrait par Maj-clic. Les treize recettes restent dans JEI.
|
||||
Les onze captures sont dans `build/oven309-screenshots/`, avec l'icône vide
|
||||
et la flamme animée décalées ensemble. Journal `build/oven309-client.log`.
|
||||
|
||||
Les **1 000 JSON générés** et les treize recettes de cuisinière sont inchangés.
|
||||
Les 44 sources culinaires et leurs 61 classes compilées sont contrôlées dans
|
||||
le JAR. La classe interne de l'ancien aperçu a disparu ; seules les classes
|
||||
de cuisinière, la version, les notices et le retrait des trois libellés
|
||||
d'aperçu diffèrent de beta.308. Les **1 108 PNG** sont identiques octet pour
|
||||
octet. Les copies packwiz client et serveur sont identiques au JAR vérifié ;
|
||||
le template ne change que par ses notices et fichiers de libellés FR/EN.
|
||||
|
||||
SHA-256 de `sanctuary-beta.309.jar` :
|
||||
|
||||
```text
|
||||
32ca2d855f71ac29af0a62ba9f4e463e3d11f172fefe7ecdbb1afad086b63ff9
|
||||
```
|
||||
|
||||
[Reçu de validation](oven-single-output-beta309-verification.json).
|
||||
Journaux de build et d'archives dans `build/oven309-build.log` et
|
||||
`build/oven309-artifacts.log`.
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryOven308ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=oven308 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
@@ -0,0 +1,109 @@
|
||||
# PACK-LOGO — logo Sanctuary pendant packwiz
|
||||
|
||||
Branche `codex/packwiz-sanctuary-logo`, préparation locale **beta.291**, depuis
|
||||
le socle beta.290. Demande du 26 octobre 2026 : afficher le bandeau Sanctuary
|
||||
fourni dans la fenêtre de téléchargement et de mise à jour, avant Minecraft.
|
||||
|
||||
## Résultat
|
||||
|
||||
Le PNG `minecraft.png` fourni par le créateur est conservé octet pour octet
|
||||
dans `launcher/packwiz/sanctuary.png` (1024 × 256, RGBA). Son SHA-256 est
|
||||
`efee73a6c812c89b2900d41f6446c0f906ccf85136b6c226daf42870a41a5157`.
|
||||
La fenêtre l'affiche sur fond noir à 640 × 160, proportions conservées,
|
||||
au-dessus de la progression réelle. Ses boutons, le texte initial et le
|
||||
compte à rebours suivent la langue du système : français, anglais sinon.
|
||||
Les messages et dialogues du moteur amont conservent leurs traductions amont.
|
||||
|
||||
`scripts/packwiz_installer.py` télécharge le JAR officiel
|
||||
[packwiz-installer v0.5.14](https://github.com/packwiz/packwiz-installer/releases/tag/v0.5.14),
|
||||
vérifie son SHA-256, puis remplace uniquement `InstallWindow.class` par
|
||||
l'adaptation Java de sa fenêtre Swing. Toutes les autres classes et notices
|
||||
restent identiques : téléchargement, vérification des hashes, sélection des
|
||||
mods facultatifs, erreurs et annulation continuent de dépendre de packwiz.
|
||||
La licence MIT de comp500 et le source de l'adaptation sont joints au JAR.
|
||||
Le logo est embarqué : aucun téléchargement d'image n'est requis pour l'afficher.
|
||||
|
||||
Le build utilise Java 25 ; les classes de la fenêtre ciblent Java 8 comme
|
||||
l'amont. Les SHA-256 de l'amont, du logo et du résultat sont fixés dans
|
||||
`launcher/packwiz/installer.json`. Une compilation différente échoue avant
|
||||
d'écrire le JAR de distribution. Les dépendances et JAR générés restent dans
|
||||
`build/packwiz-branding/`, ignoré par Git.
|
||||
|
||||
## Archive Prism et mises à jour
|
||||
|
||||
La commande habituelle `python3.14 scripts/pack.py prism <url-du-canal>`
|
||||
embarque le bootstrap officiel vérifié et le nouvel installateur vérifié,
|
||||
avec la même configuration Minecraft 26.3 / Fabric 0.19.5 et le même canal
|
||||
stable. `--bootstrap-no-update` empêche le bootstrap de remplacer la fenêtre
|
||||
Sanctuary par le binaire officiel. Cette option concerne **l'installateur** ;
|
||||
la synchronisation des mods packwiz reste active à chaque lancement.
|
||||
Le nom beta.291 du ZIP local n'avance pas ce canal : avant publication, un
|
||||
lancement visant l'adresse stable récupère la version déjà publiée, beta.289
|
||||
au moment de cette préparation. Les essais beta.291 utilisent un serveur HTTP
|
||||
de développement isolé, jamais le monde ni le serveur personnel.
|
||||
|
||||
Les évolutions de l'installateur doivent donc être préparées et testées
|
||||
explicitement, avec mise à jour du verrou et du vérificateur Web. Une simple
|
||||
avance du canal de mods ne met pas à jour l'outil d'une instance existante.
|
||||
Lors d'une future synchronisation locale demandée, sauvegarder l'instance,
|
||||
copier le JAR vérifié et ajouter l'option à sa commande avant lancement en
|
||||
conservant les autres réglages ; conserver cette même instance, sans réimport.
|
||||
Le kit serveur conserve son installateur officiel et son fonctionnement sans
|
||||
interface. Le logo n'est pas ajouté à l'index des fichiers du monde ou du jeu.
|
||||
|
||||
`verify_prism` contrôle désormais les deux JAR par leurs hashes et la présence
|
||||
de l'option qui conserve l'habillage. Les sauvegardes et fichiers personnels
|
||||
restent refusés dans le ZIP. Le MRpack n'embarque pas les commandes Prism et
|
||||
ne suffit pas à installer cet habillage.
|
||||
|
||||
## Vérifications
|
||||
|
||||
- Logo fourni identique octet pour octet ; JAR résultant contrôlé par son
|
||||
SHA-256 `9e2912fdd05e5c23721acd58cd5c61bbf13061e453627e8f4df9a4c53f7aa875`.
|
||||
- Les deux tests de distribution de `test_packwiz_installer.py` passent :
|
||||
toutes les entrées de l'amont sont relues, seule la classe de fenêtre change,
|
||||
et le véritable JAR vérifié est retrouvé dans l'export Prism.
|
||||
- Les dix tests de `test_publish_web_pack.py` passent : outils modifiés refusés,
|
||||
option de conservation obligatoire, contrôles de publication préservés.
|
||||
- Parcours Swing réel en FR et EN réussi avec le `GUIHandler` officiel :
|
||||
progression déterminée/indéterminée, options, Annuler, Continuer et compte à
|
||||
rebours. Les captures `preview-fr.png` et `preview-en.png` sont inspectées.
|
||||
Le test ne lance ni Minecraft ni un microphone.
|
||||
- Deux exécutions de `check build assemblePack` avec le profil
|
||||
`whale290,recipes,progression` échouent sur le même test serveur hérité :
|
||||
`eggQuotaNaturalSpawnAndFlightUseActualServerEntities`, quota après utilisation
|
||||
de l'œuf entre Overworld et Nether (18 réussites sur 19). Le profil isolé
|
||||
`whale290` échoue également sur ce cas (6 réussites sur 7). Les sources du
|
||||
comportement et de son test ne sont pas modifiées dans ce chantier. Cet échec
|
||||
reste ouvert ; aucune validation complète des baleines n'est revendiquée.
|
||||
|
||||
- `./gradlew check build assemblePack -PsanctuaryFocusedTests=recipes,progression
|
||||
-PsanctuaryAtlasOnly=true` réussit en **2 min 42 s**, avec **13 tests serveur
|
||||
requis réussis**, les contrôles purs de `check`, le JAR et les profils client
|
||||
et serveur assemblés. Ce périmètre ne valide pas le test de baleines en échec.
|
||||
- Comparaison des JAR beta.290/beta.291 : **2 658 classes de jeu identiques**,
|
||||
aucune classe ajoutée. Le compteur et les notices évoluent, sans changement
|
||||
du code de jeu.
|
||||
- Deux lancements du véritable bootstrap et de l'installateur adapté réussis
|
||||
depuis le ZIP extrait dans `native instance with spaces/`, avec les arguments
|
||||
de sa commande Prism et un canal HTTP local beta.291. Un seul JAR Sanctuary,
|
||||
fichiers gérés identiques au second passage, installateur avec logo conservé,
|
||||
trois fichiers témoins personnels inchangés. Aucun monde ouvert. Le mode
|
||||
sans interface vérifie la synchronisation ; les tests Swing ci-dessus
|
||||
vérifient la fenêtre. Reçu `native-validation.json`.
|
||||
|
||||
Archive locale `build/Sanctuary-Prism-beta.291.zip` : **3 928 525 octets**,
|
||||
SHA-256 `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9`.
|
||||
JAR Sanctuary beta.291 :
|
||||
`bd130418a05f820dffd86b00595c5b7ce96293ec82867926f5493a95736aee73`.
|
||||
Les interfaces Linux/Windows, le lancement Minecraft depuis Prism et une
|
||||
mise à jour de l'instance personnelle ne sont pas revendiqués par ces essais
|
||||
macOS. Le test de quota des baleines reste à résoudre avant une validation
|
||||
complète de cette base de jeu.
|
||||
|
||||
Les reçus et captures restent sous `build/packwiz-branding/`.
|
||||
|
||||
Les mods évoqués pendant ce chantier sont seulement
|
||||
[préparés en tickets pour la passe suivante](integrations-mods-next.md).
|
||||
Aucune publication du canal, du site, du serveur Beta ou de l'instance
|
||||
personnelle n'est demandée ou effectuée par cette préparation locale.
|
||||
+100
-39
@@ -1,5 +1,85 @@
|
||||
# Distribution packwiz et Prism
|
||||
|
||||
Le [téléchargement direct de Sanctuary Web](beta-download.md) donne une instance
|
||||
Prism déjà configurée. Le premier lancement télécharge les mods ; les suivants
|
||||
suivent les publications explicitement demandées via Codex.
|
||||
|
||||
La [procédure de reprise et de publication complète](updates.md) relie aussi
|
||||
le serveur dédié, le téléchargement du site et l'instance locale. Les reçus
|
||||
des anciennes versions ci-dessous restent historiques.
|
||||
|
||||
## beta.318 — récoltes et recettes séchées publiées
|
||||
|
||||
[Livraison complète du 30 octobre 2026](release-beta318.md). Récoltes par climat,
|
||||
produits du séchoir, dix-huit recettes et coups épicés sans dégâts. Serveur,
|
||||
site et Prism sur le même JAR ; 204 tests serveur, 7 tests du site, deux passages
|
||||
isolés puis deux personnels. Le profil d'essai local laisse place au canal public.
|
||||
|
||||
## beta.315 — cuisine et agriculture publiées
|
||||
|
||||
[Reçu de livraison](release-beta315.md) : refonte It's Alive beta.299–315,
|
||||
release et canal client/serveur, CT 350, téléchargement Web et même instance
|
||||
Prism mis à jour. 187 tests serveur, neuf JAR clients/cinq serveur, deux passages
|
||||
isolés et personnels identiques. 211 fichiers serveur et 936 fichiers personnels
|
||||
protégés conservés. [Export de textures](itsalive-textures-export-beta315.md).
|
||||
|
||||
## beta.293 — livraison complète publiée
|
||||
|
||||
[Reçu de livraison](release-beta293.md) : Happy Creepers de la branche dédiée,
|
||||
baleines, logo et quatre mods facultatifs réunis. Release immuable, canal
|
||||
client/serveur, CT 350, téléchargement Web et même instance Prism personnelle
|
||||
mis à jour. Import neuf et instance existante vérifiés sur deux passages,
|
||||
sauvegardes et réglages conservés. Voix UDP 25565 annoncée sur le port public
|
||||
25567 via la règle Beta existante ; ping applicatif réussi depuis le LAN.
|
||||
L'audio à deux joueurs et l'accès depuis un réseau extérieur restent à essayer.
|
||||
|
||||
## beta.292 — quatre mods facultatifs (préparation locale)
|
||||
|
||||
[Voix, cache de chunks et optimisations](optional-mods-beta292.md) : Simple
|
||||
Voice Chat 2.6.24, Bobby 5.2.16, Lithium 0.26.2 et Entity Culling 1.11.3, tous
|
||||
épinglés pour Minecraft 26.3 / Fabric. Les quatre sont facultatifs côté client ;
|
||||
Lithium et la voix sont aussi présents dans le profil serveur. Le logo de
|
||||
beta.291 et les préférences de sélection sont conservés. Préparation locale,
|
||||
sans avance du canal public ni modification d'installation personnelle.
|
||||
|
||||
## beta.291 — logo dans l'installateur (préparation locale)
|
||||
|
||||
Le [bandeau Sanctuary fourni](packwiz-logo-beta291.md) est embarqué dans la
|
||||
fenêtre packwiz du ZIP Prism préparé. Le bootstrap reste officiel ; la fenêtre
|
||||
est adaptée et l'installateur épinglé avec `--bootstrap-no-update`. Les mods
|
||||
continuent de suivre le canal stable. Les instances déjà installées devront
|
||||
recevoir ce JAR et cette option lors d'une synchronisation explicitement demandée,
|
||||
en conservant la même instance. Cette préparation ne publie pas le canal.
|
||||
|
||||
## beta.280 — JEI embarqué et profil serveur
|
||||
|
||||
JEI rejoint le JAR Sanctuary ; `mods/sanctuary.pw.toml` reste le seul artefact
|
||||
Sanctuary à publier. `python3 scripts/pack.py release <sanctuary-https-url>`
|
||||
prépare désormais le client et `server/pack.toml`, qui partagent le même JAR,
|
||||
la même URL et le même hash. Le profil serveur contient seulement Fabric API
|
||||
et Sanctuary ; Sodium et Sound Physics restent facultatifs côté client.
|
||||
Les deux profils sont publiés dans le même commit du canal, après vérification
|
||||
du JAR immuable. L'ancienne entrée JEI est retirée de l'index client.
|
||||
|
||||
`./gradlew assembleServerPack` construit un kit Linux avec les outils épinglés
|
||||
et les commandes de synchronisation/démarrage. [Mode d'emploi](server-pack.md),
|
||||
[contrat et vérifications](jei-server-beta280.md). La configuration Sanctuary Web,
|
||||
MariaDB et les secrets restent hors de l'index. La préparation locale ne publie
|
||||
pas le canal et ne met pas à jour une installation personnelle.
|
||||
|
||||
Livraison du 25 octobre : [release beta.280](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.280)
|
||||
publiée, canal `338e8a62387048c7e703ef036fda759ef57b4130`, puis nouveau serveur
|
||||
CT 350 sur `gpu` installé avec le kit vérifié. Le monde neuf, les paramètres
|
||||
et les services Web sont vérifiés dans le [reçu](jei-server-beta280.md).
|
||||
Une synchronisation du serveur conserve 61 fichiers suivis. L'Alpha et
|
||||
l'instance Prism personnelle restent hors de cette mise en service.
|
||||
|
||||
La règle Bbox permanente est ensuite vérifiée et le secours UPnP Beta retiré.
|
||||
Le domaine Minecraft `beta.sanctuary-minecraft.net` répond sans ce secours,
|
||||
avec 20 places. [MRpack client beta.280](https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.280/Sanctuary-beta.280.mrpack)
|
||||
vérifié et disponible ; le [reçu](jei-server-beta280.md) conserve les empreintes
|
||||
et la limite de validation réseau.
|
||||
|
||||
## beta.257 — Mods client séparés
|
||||
|
||||
JEI Sanctuary, Sound Physics Remastered et Sodium sont facultatifs et séparés
|
||||
@@ -2078,18 +2158,18 @@ La procédure complète, également utilisable manuellement :
|
||||
1. Incrémenter ensemble les versions de `gradle.properties` et `packwiz/pack.toml`
|
||||
selon la [convention `beta.xxx`](versioning.md).
|
||||
2. Exécuter `./gradlew check build assemblePack` et les vérifications du ticket.
|
||||
3. Préparer les métadonnées de la livraison, avec les deux URL exactes :
|
||||
3. Pour préparer les métadonnées manuellement depuis beta.280, utiliser la
|
||||
seule URL du JAR Sanctuary contenant JEI :
|
||||
|
||||
```sh
|
||||
python3 scripts/pack.py release \
|
||||
https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.257/sanctuary-beta.257.jar \
|
||||
https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.257/jei-sanctuary-26.3-30.32.0-sanctuary.4.jar
|
||||
https://git.botsu.net/koka/sanctuary-beta/releases/download/beta.xxx/sanctuary-beta.xxx.jar
|
||||
```
|
||||
|
||||
4. Pousser le commit source vérifié. Créer une release Gitea correspondant à ce
|
||||
commit et joindre les JAR Sanctuary et JEI construits, sans remplacer les artefacts d'une release
|
||||
commit et joindre le JAR Sanctuary construit, sans remplacer les artefacts d'une release
|
||||
antérieure. Vérifier que le téléchargement public possède le SHA-256 indiqué
|
||||
dans `build/packwiz-release/mods/sanctuary.pw.toml` et `jei-sanctuary.pw.toml`.
|
||||
dans `build/packwiz-release/mods/sanctuary.pw.toml`, identique au profil serveur.
|
||||
5. Publier le contenu de `build/packwiz-release/` à la racine de la branche
|
||||
`packwiz` dans un seul commit, puis vérifier les fichiers et hashes depuis
|
||||
l'URL publique. Préserver l'historique de ce canal et ne jamais y copier le
|
||||
@@ -2111,48 +2191,29 @@ python3 scripts/pack.py prism https://git.botsu.net/koka/sanctuary-beta/raw/bran
|
||||
|
||||
Il contient les versions exactes Minecraft/Fabric, la commande de lancement et
|
||||
`packwiz-installer-bootstrap` v0.0.3. Le script vérifie le SHA-256 du bootstrap
|
||||
officiel avant d'écrire `build/Sanctuary-Prism-auto-update.zip`. Ce ZIP est réservé
|
||||
officiel avant d'écrire `build/Sanctuary-Prism-beta.xxx.zip`. Ce ZIP est réservé
|
||||
aux nouvelles installations ; les instances déjà branchées sur packwiz suivent
|
||||
le canal sans être réimportées.
|
||||
|
||||
## Raccorder l'instance Prism existante
|
||||
## Importer l'instance Prism prête
|
||||
|
||||
Fermer Minecraft avant de modifier ses mods. Fermer également Prism avant de
|
||||
modifier directement `instance.cfg`, pour éviter que son état en mémoire écrase
|
||||
les changements. Dans l'instance Sanctuary Beta :
|
||||
Le bouton **Télécharger** de [Sanctuary Web](https://sanctuary-minecraft.net)
|
||||
télécharge directement [Sanctuary-Beta.zip](https://sanctuary-minecraft.net/downloads/sanctuary-prism.zip).
|
||||
Dans Prism : **Ajouter une instance → Importer depuis un ZIP**, choisir ce fichier,
|
||||
puis lancer **Sanctuary Beta**. Packwiz télécharge automatiquement les mods.
|
||||
La commande avant lancement et l'outil sont déjà dans l'archive.
|
||||
|
||||
1. Sauvegarder `instance.cfg` et les anciens JAR Sanctuary dans un dossier de
|
||||
sauvegarde hors de `mods/`. Vérifier que l'instance utilise Minecraft
|
||||
`26.3-pre-2` et Fabric `0.19.5` ; ne pas convertir une instance 26.2.
|
||||
2. Mettre le bootstrap issu du ZIP dans son dossier `minecraft/` (ou `.minecraft/`
|
||||
selon l'installation).
|
||||
3. Dans **Modifier → Paramètres → Commandes personnalisées**, activer les
|
||||
commandes et renseigner la commande avant lancement ci-dessous.
|
||||
4. Pour une instance issue d'un ancien `.mrpack`, déplacer seulement l'ancien
|
||||
JAR Sanctuary non géré dans la sauvegarde préparée, puis faire la première
|
||||
synchronisation packwiz. Conserver les autres mods et données personnelles.
|
||||
Si la synchronisation échoue, remettre ce JAR et les réglages sauvegardés.
|
||||
5. Vérifier qu'il reste un seul mod Sanctuary actif et que `packwiz.json` est
|
||||
présent dans le dossier Minecraft. Les prochaines mises à jour sont suivies
|
||||
par ce manifeste local : ne pas le supprimer entre les versions.
|
||||
|
||||
Commande à coller dans l'interface Prism :
|
||||
|
||||
```text
|
||||
"$INST_JAVA" -jar "$INST_MC_DIR/packwiz-installer-bootstrap.jar" --bootstrap-main-jar "$INST_MC_DIR/packwiz-installer.jar" --pack-folder "$INST_MC_DIR" --multimc-folder "$INST_DIR" https://git.botsu.net/koka/sanctuary-beta/raw/branch/packwiz/pack.toml
|
||||
```
|
||||
|
||||
Une modification directe de `instance.cfg` doit échapper les guillemets au format
|
||||
Qt INI (`\"`) et activer `OverrideCommands=true`. Ces clés et
|
||||
`PreLaunchCommand` doivent être dans la section **`[General]`**, jamais ajoutées
|
||||
après la section `[UI]`. Le ZIP préparé le fait déjà. Rouvrir les commandes
|
||||
personnalisées dans Prism pour vérifier que la commande est effectivement lue.
|
||||
Une instance importée d'un `.mrpack` peut être marquée `ManagedPack=true` :
|
||||
dès que packwiz en assure les mises à jour, utiliser `ManagedPack=false` pour
|
||||
éviter deux mécanismes de gestion sur le même pack.
|
||||
Conserver cette même instance pour les versions suivantes : une publication
|
||||
explicitement demandée via Codex est suivie au lancement suivant. Une instance
|
||||
déjà branchée sur le canal stable n'a pas besoin d'être réimportée.
|
||||
|
||||
## Données locales et mondes
|
||||
|
||||
Depuis beta.295, le premier lancement du client ajoute le serveur Sanctuary
|
||||
dans les favoris sans remplacer leur liste. Un marqueur local respecte ensuite
|
||||
les suppressions volontaires ; le profil serveur distribue le logo 64 × 64.
|
||||
Voir [le contrat](default-server-beta295.md).
|
||||
|
||||
Le pack livré possède uniquement les fichiers déclarés dans son index. Il ne
|
||||
déclare ni `saves/`, ni `options.txt`, `servers.dat`, `screenshots/`, ni les packs
|
||||
graphiques personnels. L'installation de packwiz et une mise à jour des mods
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
{
|
||||
"version": "beta.310",
|
||||
"jar": "mods/sanctuary/build/libs/sanctuary-beta.310.jar",
|
||||
"sha256": "4a2278d987b031b343a6d66694da50db0aeb408bb77785ce8c02ae0ed9174b26",
|
||||
"previous_verified_sha256": "32ca2d855f71ac29af0a62ba9f4e463e3d11f172fefe7ecdbb1afad086b63ff9",
|
||||
"changed_jar_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/blockstates/frying_pan.json",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json",
|
||||
"data/sanctuary/loot_table/blocks/frying_pan.json",
|
||||
"fabric.mod.json",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/FryingPanBlock.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/AbstractTimedCulinaryBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/block/entity/FryingPanBlockEntity.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/FryingPanHud.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/renderer/FryingPanBlockEntityRenderer.class",
|
||||
"fr/koka/sanctuary/cuisine/culinary/client/renderer/state/FryingPanRenderState.class",
|
||||
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
|
||||
],
|
||||
"added_jar_entries": [
|
||||
"assets/sanctuary/models/block/frying_pan_layer_2.json",
|
||||
"assets/sanctuary/models/block/frying_pan_layer_3.json",
|
||||
"assets/sanctuary/models/block/frying_pan_layer_4.json"
|
||||
],
|
||||
"removed_jar_entries": [],
|
||||
"generated_json": {
|
||||
"cuisine": 432,
|
||||
"kitchen": 195,
|
||||
"agriculture": 376
|
||||
},
|
||||
"culinary_source_classes": 44,
|
||||
"culinary_compiled_classes_verified": 61,
|
||||
"pan_recipes_unchanged": 26,
|
||||
"physical_pan_counts": [
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"heights_pixels": [
|
||||
4,
|
||||
8,
|
||||
12,
|
||||
16
|
||||
],
|
||||
"pan_output_slots": 1,
|
||||
"shared_recipe_per_stack": true,
|
||||
"native_inventory_size": 17,
|
||||
"original_indices_preserved": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4
|
||||
],
|
||||
"unchanged_pngs": 1108,
|
||||
"server_required": 76,
|
||||
"pan_scenarios": 13,
|
||||
"client_vulkan": {
|
||||
"log": "build/pan310-client.log",
|
||||
"screenshots": "build/pan310-screenshots",
|
||||
"screenshot_count": 13,
|
||||
"world_seed": 310,
|
||||
"sodium": "0.9.2+mc26.3"
|
||||
},
|
||||
"client_server_copies_identical": true,
|
||||
"template_changed_entries": [
|
||||
"THIRD_PARTY_NOTICES.md",
|
||||
"assets/sanctuary/blockstates/frying_pan.json",
|
||||
"assets/sanctuary/lang/en_us.json",
|
||||
"assets/sanctuary/lang/fr_fr.json"
|
||||
],
|
||||
"template_added_entries": [
|
||||
"assets/sanctuary/models/block/frying_pan_layer_2.json",
|
||||
"assets/sanctuary/models/block/frying_pan_layer_3.json",
|
||||
"assets/sanctuary/models/block/frying_pan_layer_4.json"
|
||||
],
|
||||
"build_log": "build/pan310-build.log"
|
||||
}
|
||||
@@ -0,0 +1,147 @@
|
||||
# CUI-310 / IA-07 — poêles en ligne et piles de quatre
|
||||
|
||||
Choix du créateur le 28 octobre 2026 : **une recette commune par pile**.
|
||||
Le modèle actuel fait quatre pixels de haut ; quatre poêles tiennent donc
|
||||
dans un bloc. Chaque emplacement reste chauffé par-dessous. Des piles côte
|
||||
à côte peuvent préparer des plats différents. Préparation locale **beta.310**
|
||||
sur `codex/itsalive-26-3`, sans publication, installation ou déploiement.
|
||||
|
||||
## Contrat de stockage et de continuité
|
||||
|
||||
Ce lot ajoute une capacité réelle pour les ingrédients non empilables :
|
||||
quatre omelettes doivent réellement payer quatre seaux de lait, et non créer
|
||||
quatre plats depuis un seul seau. Les quatre positions de préparation restent
|
||||
communes à toute la pile, avec une seule recette et une seule sortie.
|
||||
|
||||
L'identifiant `sanctuary:frying_pan` du bloc, de l'objet et du bloc entité
|
||||
reste stable. Le nouvel état natif `pans` vaut 1 à 4 ; une ancienne sauvegarde
|
||||
sans cette propriété se charge avec **une poêle**. Aucune ancienne colonne
|
||||
n'est supprimée ou regroupée automatiquement.
|
||||
|
||||
Les indices d'inventaire **0 à 4 restent inchangés** : ingrédients 0–3,
|
||||
résultat 4. Douze indices de réserve sont ajoutés au même inventaire natif :
|
||||
|
||||
| Position commune | Case historique | Réserves pour les poêles 2–4 |
|
||||
| --- | ---: | --- |
|
||||
| Ingrédient 1 | 0 | 5, 6, 7 |
|
||||
| Ingrédient 2 | 1 | 8, 9, 10 |
|
||||
| Ingrédient 3 | 2 | 11, 12, 13 |
|
||||
| Ingrédient 4 | 3 | 14, 15, 16 |
|
||||
| Plat terminé | 4 | Aucune autre sortie |
|
||||
|
||||
La lecture des anciennes cinq cases conserve chaque objet à son indice,
|
||||
avec douze réserves vides. Les champs de cuisson et d'assemblage sont gardés.
|
||||
Le champ additionnel `CookingPanCount` mémorise le nombre de poêles associé
|
||||
à l'avancement, avec 1 par défaut pour l'ancien format. Un ajout de poêle
|
||||
pendant la cuisson remet l'assemblage et l'avancement à zéro, y compris si
|
||||
la pile est sauvegardée avant le tick suivant. L'indication des récipients à
|
||||
récupérer est dérivée des objets et synchronisée sans nouvelle case de sortie.
|
||||
Les piles physiques respectent toujours la taille maximale native des objets :
|
||||
quatre seaux de lait restent quatre piles d'un seau, sans pile illégale.
|
||||
Les quantités agrégées servent uniquement à la résolution de la recette.
|
||||
La quantité réellement consommée est prélevée dans les cases physiques et
|
||||
les récipients payés sont rendus une seule fois.
|
||||
|
||||
Ce contrat décrit une évolution **vers beta.310**. Pour revenir à une version
|
||||
antérieure, il faut d'abord vider les réserves et récupérer les poêles de la
|
||||
pile : une ancienne version ne connaît ni les nouveaux indices ni leur compte.
|
||||
Aucun monde personnel n'est ouvert ou converti par cette préparation ; la
|
||||
continuité est vérifiée dans des sauvegardes et mondes de développement neufs.
|
||||
|
||||
## Utilisation
|
||||
|
||||
- Poser une poêle, puis utiliser d'autres poêles sur le même bloc pour atteindre
|
||||
deux, trois ou quatre couches. Chaque ajout consomme un objet ; la casse
|
||||
rend toutes les poêles et chaque pile réelle d'ingrédients une seule fois.
|
||||
- Chauffer chaque emplacement par-dessous avec une source reconnue. Une poêle
|
||||
ne transmet pas la chaleur à un autre bloc de poêle au-dessus. Les anciennes
|
||||
colonnes restent présentes ; la pose neuve se prolonge horizontalement.
|
||||
- Ajouter les ingrédients par clic droit, un objet à la fois. Les quatre
|
||||
positions de recette et leurs réserves sont partagées. Quatre seaux de lait
|
||||
pour quatre omelettes occupent quatre cases natives distinctes.
|
||||
- L'assemblage conserve sa fenêtre de 30 secondes, ou son départ après trois
|
||||
secondes de stabilité si les quatre positions d'une recette sont remplies.
|
||||
Les réserves d'un même ingrédient ne comptent pas comme quatre positions.
|
||||
- Une cuisson traite au plus autant de recettes complètes que de poêles,
|
||||
pendant la durée historique du plat. Deux œufs dans quatre poêles donnent
|
||||
deux œufs au plat. Une préparation invalide paie aussi ses plats ratés.
|
||||
- Les ingrédients restent présents jusqu'au paiement final. Modifier une case
|
||||
annule l'avancement. Ajouter une poêle relance aussi l'assemblage.
|
||||
- Maj-clic récupère d'abord la sortie commune, puis les ingrédients ou
|
||||
récipients. Les récipients revenus dans une position vidée doivent être
|
||||
collectés avant de commencer une nouvelle préparation. Si des ingrédients
|
||||
restent dans cette position, les récipients sont déposés dans le monde.
|
||||
- Un entonnoir peut alimenter les réserves par les côtés ou le dessus selon
|
||||
les limites natives. La face inférieure expose seulement la sortie ; une
|
||||
chaleur réelle doit toujours être présente juste sous la poêle pour cuire.
|
||||
|
||||
Les 26 recettes, leurs durées, les textures et les catégories créatives sont
|
||||
conservées. Les piles voisines peuvent cuire des plats différents. Le contenu
|
||||
commun apparaît dans la poêle supérieure, et le HUD FR/EN affiche le nombre
|
||||
de poêles, le temps, la quantité terminée ou les récipients à récupérer.
|
||||
|
||||
## Validation locale
|
||||
|
||||
Le parcours client sur un monde plat de développement neuf, graine **310**,
|
||||
a réussi sous **Vulkan / Apple M1**, avec **Sodium 0.9.2+mc26.3** :
|
||||
|
||||
- vrais paquets de pose en survie, paiement des quatre objets, plafond à
|
||||
quatre et prolongement horizontal ;
|
||||
- vrais clics d'ajout pour quatre œufs et quatre seaux de lait non empilables ;
|
||||
- huit états de modèle chargés, 30 faces par couche, hauteurs visibles exactes
|
||||
et texture historique résolue sur chaque face ;
|
||||
- HUD français/anglais aux échelles 2, 3 et 4, assemblage, cuisson et quantité
|
||||
prête ; les autres piles cuisent chacune leur propre bœuf ;
|
||||
- ticks réels pour la cuisson, quatre omelettes payées, quatre seaux rendus ;
|
||||
- fermeture et réouverture réelle du monde, récupération par Maj-clic des
|
||||
quatre plats puis des quatre seaux, conservés ensemble dans l'inventaire ;
|
||||
- 26 recettes historiques présentes dans JEI.
|
||||
|
||||
La fenêtre d'assemblage est avancée par une fixture après les interactions
|
||||
réelles, pour ne pas attendre 30 secondes avant la cuisson ; le paiement,
|
||||
la progression et les durées de cuisson restent réels. Treize captures sont
|
||||
archivées dans `build/pan310-screenshots/` (ignoré). Le parcours client dure
|
||||
47 secondes et son journal est `build/pan310-client.log` (ignoré).
|
||||
|
||||
Les treize nouveaux cas serveur vérifient la pose native, formes et loot,
|
||||
les quatre capacités, les **26 recettes à quatre portions**, le lait et ses
|
||||
récipients, l'ajout d'une poêle avant un paiement et avant sauvegarde,
|
||||
les recettes voisines et l'absence de chauffe transmise verticalement,
|
||||
la casse, les 17 indices, les anciennes cinq cases sans propriété `pans`,
|
||||
les quantités insuffisantes et préparations ratées, le retrait d'une réserve
|
||||
juste avant la fin et l'insertion par un entonnoir natif.
|
||||
|
||||
Commandes de vérification :
|
||||
|
||||
```sh
|
||||
./gradlew check build assemblePack \
|
||||
-PsanctuaryFocusedTests=pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
|
||||
-PsanctuaryAtlasOnly=true
|
||||
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
|
||||
-PsanctuaryPan310ClientTests=true -PsanctuarySodiumClientTests=true \
|
||||
-PsanctuaryFocusedTests=pan310 -PsanctuaryQuickTests=true \
|
||||
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
|
||||
-PsanctuaryClientNoVsync=true
|
||||
```
|
||||
|
||||
Les orientations supplémentaires et les ancrages particuliers du ticket IA-07
|
||||
restent ouverts. Ce lot réalise le choix confirmé de piles partageant une
|
||||
recette, avec des ingrédients réellement stockés et payés.
|
||||
|
||||
`check build assemblePack` a réussi en **3 min 27 s**, avec **76 tests serveur
|
||||
obligatoires**. La comparaison stricte à beta.309 confirme les six classes
|
||||
prévues, le modèle par couches, le loot, les trois libellés FR/EN, la version
|
||||
et les crédits. Les 26 recettes de poêle et les **1 108 PNG** de l’archive
|
||||
sont identiques. Les 432 JSON de cuisine, 195 d’appareils et 376 d’agriculture
|
||||
sont comparés à leurs générateurs. Les copies client/serveur du JAR sont
|
||||
identiques ; le modèle de pack de ressources emporte les trois nouveaux
|
||||
modèles et leur état multipart.
|
||||
|
||||
[Reçu de vérification](pan-stacks-beta310-verification.json). JAR local :
|
||||
`mods/sanctuary/build/libs/sanctuary-beta.310.jar`
|
||||
|
||||
SHA-256 :
|
||||
`4a2278d987b031b343a6d66694da50db0aeb408bb77785ce8c02ae0ed9174b26`
|
||||
|
||||
Aucun push, tag, canal packwiz public, installation Prism ou serveur
|
||||
personnel n’a été modifié.
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user