Compare commits

...
39 Commits
Author SHA1 Message Date
koka 4e2b120bf2 docs: prepare beta.321 release notes
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 11:26:59 +01:00
koka 352c166b6d fix: refine culinary models and adaptive atlas (beta.321) 2026-10-30 10:33:27 +01:00
koka f3b559b23b Record beta.320 deployment to Beta server and Sanctuary website
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 09:16:20 +01:00
koka 5869f85ec3 Document beta.320 release notes
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 09:03:08 +01:00
koka e5df72bdbe Prepare beta.320: dairy churn, direct cuisine, exact-height maps and seasonal insects
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 08:55:58 +01:00
koka 163618ed54 Consigne la livraison beta.318 du serveur, du site et de Prism
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 07:17:37 +01:00
koka de6e11848a Prépare les notes de publication beta.318
Build Sanctuary / build (push) Canceled after 0s
2026-10-30 06:52:51 +01:00
koka 303210124e Consigne l’installation locale de beta.318 dans Prism 2026-10-30 06:44:48 +01:00
koka 980544e279 Ajoute les 18 recettes séchées et les réactions épicées beta.318 2026-10-30 06:26:53 +01:00
koka 7ef4d51a59 Ajoute les provisions séchées et le guide culinaire beta.317 2026-10-30 05:38:54 +01:00
koka 7b56c3cd78 Add climate-based survival foraging and the nine-island food wiki 2026-10-30 01:01:52 +01:00
koka bb61547b07 Align current beta.315 summary with published status
Build Sanctuary / build (push) Canceled after 0s
2026-10-29 10:09:41 +01:00
koka ebd35184b7 Record verified beta.315 rollout and editable texture export
Build Sanctuary / build (push) Canceled after 0s
2026-10-29 10:07:46 +01:00
koka 359f49792b Prepare It's Alive texture editing kit and beta.315 release notes
Build Sanctuary / build (push) Canceled after 0s
2026-10-29 09:49:29 +01:00
koka 4cbf350e01 Add placed cured sausage with four shared slices (beta.315) 2026-10-29 09:05:46 +01:00
koka 03935e9c89 Add shared cheese wheels and real-time wine maturation (beta.314) 2026-10-29 08:25:50 +01:00
koka 72c709ebc7 Add native sausage preparation and four-hook drying rack (beta.313) 2026-10-29 05:33:48 +01:00
koka addc4bb4db Repeat the chosen cauldron recipe across supply and serving (beta.312) 2026-10-29 04:38:03 +01:00
koka 228a953475 Start cauldron cooking by stirring and preserve ingredient containers (beta.311) 2026-10-29 04:00:59 +01:00
koka 91db17450a Stack frying pans with one paid recipe per pile (beta.310) 2026-10-28 21:15:25 +01:00
koka 36941f611f Keep one oven output and manual ingredient loading (beta.309) 2026-10-28 19:56:50 +01:00
koka 9dd63f683a Refine oven preparation and automatic cooking (beta.308) 2026-10-28 18:59:08 +01:00
koka 60bc773b80 Replace mill recipe redstone with a manual handle (beta.307) 2026-10-28 18:32:48 +01:00
koka 9fd380b782 Make the mill manual like native stonecutting (beta.306) 2026-10-28 18:07:35 +01:00
koka ca5e350e4a Replace food press with layered fruit crushing (beta.305) 2026-10-28 15:02:40 +01:00
koka feaf9ca62c Port culinary appliances and timed recipes for beta.304 2026-10-28 14:13:50 +01:00
koka a60937f77d Import 26.2 food recipes with native crafting and cooking (beta.303) 2026-10-28 09:20:23 +01:00
koka 930719d75e Rework vanilla growth textures at 16x16 (beta.302) 2026-10-28 08:01:19 +01:00
koka 394e22d805 Add upward tree-climbing vanilla with integrated sprites (beta.301) 2026-10-28 07:49:39 +01:00
koka ed11cd77a5 Port It's Alive crops, fruit trees and coffee to 26.3 (beta.300) 2026-10-28 07:11:42 +01:00
koka d78d39cd1b Import It's Alive agriculture and cooking textures for 26.3 (beta.299) 2026-10-28 06:17:33 +01:00
koka 77fdabfb4d docs: record complete beta.298 deployment
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 06:02:41 +01:00
koka fb8705369e docs: align beta.298 server kit instructions
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 05:58:46 +01:00
koka c3d1443732 docs: prepare beta.298 release notes
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 05:57:03 +01:00
koka 1967342247 fix: exclude invisible media anchors from PBR normals
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 05:36:47 +01:00
koka 89db24d7c2 docs: record complete beta.297 deployment
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 05:05:31 +01:00
koka bad2bdb0d1 docs: prepare beta.297 release notes
Build Sanctuary / build (push) Canceled after 0s
2026-10-27 04:56:22 +01:00
koka 098a5aa1bd fix: correct media frame interaction and side geometry
Build Sanctuary / build (push) Canceled after 0s
2026-10-26 18:02:18 +01:00
koka 8b1ae25256 docs: record completed beta.296 media delivery
Build Sanctuary / build (push) Canceled after 0s
2026-10-26 16:58:18 +01:00
636 changed files with 31498 additions and 283 deletions
+266 -5
View File
@@ -1,7 +1,7 @@
# Sanctuary
[Dernière release : beta.295](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.295) ·
[Reçu de livraison](docs/release-beta295.md) ·
[Dernière release : beta.320](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.320) ·
[Reçu de livraison](docs/release-beta320.md) ·
[Installation et mises à jour](docs/packwiz.md).
Les **quatre expansions validées sont disponibles dans Sanctuary normal** :
@@ -10,13 +10,273 @@ 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.296 — écrans partagés (livraison en préparation)
## 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) :
@@ -3858,8 +4118,9 @@ 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
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.
+177
View File
@@ -1,5 +1,182 @@
# Provenance et crédits
## 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)
+7
View File
@@ -75,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.'
+181
View File
@@ -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.
+55
View File
@@ -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,
+56
View File
@@ -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"
}
+130
View File
@@ -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"
}
+129
View File
@@ -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é.
+113
View File
@@ -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"
}
+131
View File
@@ -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é.
+19
View File
@@ -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"
}
}
+149
View File
@@ -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.
+241
View File
@@ -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 |
+76
View File
@@ -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,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."
}
+121
View File
@@ -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."
}
+114
View File
@@ -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"
}
+113
View File
@@ -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é.
+40
View File
@@ -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"
}
+146
View File
@@ -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`.
+108
View File
@@ -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"
]
}
+92
View File
@@ -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.
+297
View File
@@ -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
+38
View File
@@ -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
```
+297
View File
@@ -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"
}
}
}
+190
View File
@@ -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.
+29
View File
@@ -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."
}
+78
View File
@@ -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).
+118
View File
@@ -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é.
+70
View File
@@ -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.
+111
View File
@@ -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"
}
}
+1 -1
View File
@@ -68,7 +68,7 @@ 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 ; leur reçu sera dans `release-beta296.md`.
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
+88
View File
@@ -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.
+77
View File
@@ -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"
]
}
+23
View File
@@ -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
}
}
+118
View File
@@ -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"
}
+69
View File
@@ -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
```
+6
View File
@@ -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
+18
View File
@@ -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.
+15
View File
@@ -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.
+30
View File
@@ -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.
+29
View File
@@ -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).
+40
View File
@@ -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).
+26
View File
@@ -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).
+49
View File
@@ -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"
}
+128
View File
@@ -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"
}
+93
View File
@@ -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
```
+15
View File
@@ -8,6 +8,21 @@ 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,
+80
View File
@@ -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"
}
+147
View File
@@ -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é.
+56
View File
@@ -0,0 +1,56 @@
# Beta.321 — modèles culinaires et carte adaptative
Branche : `codex/itsalive-26-3`. Travail local, sans publication ni déploiement.
## Résultat attendu
- La baratte et le séchoir portent leurs noms traduits dans l’inventaire :
**Baratte / Dairy Churn**, **Séchoir / Drying Rack**.
- La baratte forme une cuve en bois ouverte, avec fond, parois et pieds.
La collision respecte la cavité. La poignée tourne par quarts de tour ; aucun
élément du modèle n’utilise de rotation oblique.
- Les saucissons crus et secs, ordinaires et épicés, sont des pavés simples,
sans ficelles ni bouts blancs saillants. Un saucisson posé raccourcit à chaque
tranche et conserve une face de coupe. Les quatre portions, recettes,
orientations et identifiants existants sont conservés.
- La grande carte et l’aperçu Pause montrent la surface complète en extérieur.
Sous un toit ou dans une grotte, ils utilisent la coupe à la hauteur des pieds,
arrondie vers le bas. La nuit et la météo ne changent pas ce choix.
- Le feuillage, les végétaux sans collision et l’eau seule ne constituent pas
un toit. Le verre et les dalles constituent une couverture. Une dimension
à plafond permanent conserve la coupe intérieure. Une colonne non chargée
conserve provisoirement la coupe sans charger de chunk.
- Un passage extérieur/intérieur à hauteur constante actualise la carte sans
modifier son zoom ou son cadrage. Les anciens paquets restent filtrés par
le jeton de requête existant.
## Compatibilité
Aucune modification des identifiants, du format des sauvegardes, des recettes
ou de la génération. Aucun monde existant modifié et aucune régénération.
La vue de surface réutilise le relevé de surface historique ; les coupes
réutilisent les relevés exacts déjà présents depuis la beta.320.
## Vérification
- `./gradlew check build assemblePack` réussi avec le filtre
`map321,map319,map244,map,cuisine319,sausage315,driedcuisine318,drying317,drying313`
et `sanctuaryAtlasOnly=true` : **55 tests serveur réussis**, contrôles de
construction et vérification des versions, icônes et index du pack.
- Parcours client **Vulkan avec Sodium** : chaîne laitière, noms FR/EN aux
échelles 2/3/4, placement, séchage, quatre tranches réelles, sauvegarde/relecture,
modèles natifs et changement extérieur/intérieur dans Atlas et Pause.
Les faces des seize états de baratte sont aussi contrôlées sur les modèles
réellement compilés : elles restent toutes alignées sur les axes.
Le verre déclenche la coupe, les feuilles seules conservent la surface ;
zoom et cadrage restent stables. Les paquets périmés et la séparation des
dimensions restent contrôlés, avec une dimension Under strictement de test.
- Inspection des modèles générés : quatre objets saucisson, huit modèles de
portions et trois parties de baratte ; aucun élément oblique ni bout en laine.
- JAR local : `mods/sanctuary/build/libs/sanctuary-beta.321.jar`, 19 160 419 octets,
SHA-256 `c8a176f6954d3e7b5e1e736f08426f43fc7c278aaaef248cff1a45c4f8103673`.
Version intégrée vérifiée ; les nouvelles classes de test sont exclues du JAR.
Les sorties de vérification restent dans `build/presentation321/` (ignoré par
Git). L’instance personnelle, le canal public, le site et le serveur n’ont pas
été mis à jour dans ce lot ; leur dernière livraison reste la beta.320.
+108
View File
@@ -0,0 +1,108 @@
# beta.296 — écrans partagés installés pour essai
Livraison complète du **26 octobre 2026**, branche `codex/media-beta296`.
[Contrat et gestes en jeu](media-beta296.md), [notes](notes-beta296.md).
Le socle publié beta.295 et ses ajouts sont conservés.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source et tag `beta.296` | `9674e7f3c5b755990ab546c3bfb202850ecb299e` |
| Canal client/serveur | `550a079699ae3a731b0cb39255f4c3af4efa77eb` |
| Release | [beta.296](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.296), quatre artefacts publics vérifiés |
| CT 350 | Service actif, Sanctuary beta.296 avec Media 0.3.0 embarqué et Dream Displays 1.10.4 chargé |
| CT 320 | Distribution `releases/beta.296/prism`, ancienne beta.295 conservée |
| Prism historique | Même instance Sanctuary Beta, neuf JAR, deux synchronisations identiques |
Un seul JAR Sanctuary est installé. Le module Media conserve son ID Fabric
`sanctuary_media`, ses recettes, blocs et données. Dream Displays est installé
séparément par packwiz des deux côtés. Minecraft 26.3, Fabric 0.19.5, JEI et les
autres dépendances restent aux versions précédentes.
## Vérifications
- Tâches `check` et `build` réussies : contrôles purs, **18 GameTests requis**
`property270,claims272,claims277,claims278`, contrats horloge/HLS/reprise et
géométrie Media. La première commande globale a ensuite refusé l'assemblage
sur la vérification de la borne Minecraft déclarée par Dream (`~26.3-`).
Le vérificateur épingle maintenant cette valeur exacte de l'artefact déjà
validé pour 26.3. Assemblages client/serveur réexécutés et réussis en **5 s**.
- Module Media construit par Gradle ; un seul exemplaire dans Sanctuary,
licence incluse, aucune sonde ni classe de test dans l'artefact livré.
- **14 contrôles interactifs** de l'ancre réussis avec le JAR beta.296 :
coût unique, taille libre, menus, portées, droits, murs et paquets refusés.
- Deux vrais clients **Vulkan**, Sodium et Sound Physics, utilisant le même
JAR livré et son module embarqué. Recherche et sélection via le menu natif,
puis vidéo et live HLS synthétiques ; sortie OpenAL active, sans erreur AL.
- Deux synchronisations du vrai installateur dans une instance isolée, puis
deux dans l'instance personnelle existante : neuf mods identiques au second
passage. Pas de monde personnel ouvert pour ces contrôles.
- Onze tests du vérificateur Web réussis ; ZIP/MRpack et profils comparés
aux artefacts et hashes effectivement installés sur la CT.
- Ping public DNS/SRV depuis le LAN, Minecraft 26.3, 0/20 lors du contrôle,
logo serveur vérifié. Admission : faux code refusé en HTTP 200, aucun redeem.
Métriques Web fraîches et serveur en marche, même UUID communautaire.
Laboratoire `build/media-prototype/release296/`, Apple M1 8 Gio, Java 25,
FFmpeg 8.1.2 externe. Comparaison des numéros d'images soumis au GPU après les
quinze premières secondes, méthode de MEDIA-04 :
| Source | Durée | Paires | Médiane | P95 | Maximum |
| --- | ---: | ---: | ---: | ---: | ---: |
| Vidéo, menu natif | 28,8 s | 55 | 1,7 ms | 25,7 ms | 31,7 ms |
| Live HLS daté | 64,0 s | 196 | 10,7 ms | 28,0 ms | 70 ms |
Les couvertures utilisables, chargement inclus, sont 90,5/91,4 % pour la vidéo,
88,3/88,7 % pour le live. Aucun scanout de moniteur ni enregistrement audible.
Les essais de reconnexion et de pause froide restent détaillés dans
[MEDIA-04](media-anchor-prototype.md) ; cette série vérifie leur code dans
l'artefact embarqué, sans revendiquer un nouveau parcours de reconnexion.
## Artefacts
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.296.jar` | 18295484 | `20896c6271edc1eef27a7ac0ba5c4844b70fe589b866e2fac436e233fadf8ab1` |
| `Sanctuary-beta.296.mrpack` | 16884738 | `952dcfcd23a9d2fda9b4c193398aee233d74bceefd94b1ce411d47e01250b267` |
| `Sanctuary-Prism-beta.296.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.296.zip` | 4036720 | `f31bcf2c83929028a29a51eae53b37eae2bb7fa8253dc124acad1e2ac2846af0` |
Le ZIP Prism reste identique à beta.295 : mêmes outils et plateforme, canal
stable maintenant en beta.296. Le bouton du site donne HTTP 200, nom reçu
`Sanctuary-Beta.zip` ; ZIP, MRpack et version dans le HTML public vérifiés.
## Conservation
Serveur vide avant arrêt propre. Sauvegarde complète privée :
`/root/sanctuary-beta-backups/before-beta296-20261026T154620Z/instance.tar.gz`,
SHA-256 `c2996fd33451b57e51be7d30fb6cebc6fb0a48e5fcc346d9dd94c6344e6f3d6d`.
Les **152 fichiers protégés** (hors mods/outils/caches/logs/métadonnées gérées)
sont identiques après synchronisation, avant redémarrage ; le monde contient
122 fichiers et est inclus dans cette sauvegarde. Environnement privé et
toutes les clés/valeurs de `server.properties` restent identiques après démarrage.
Aucune régénération ni migration de monde.
Prism : sauvegarde sous l'instance existante,
`sanctuary-backups/before-beta296-20261026T153934Z/instance.tar.gz`, SHA-256
`d2fe94fae8a0ed28668d3a011a82a9b1fe61208b07748c971e14939d9283db7b`.
Les **933 fichiers personnels contrôlés** et `instance.cfg` sont identiques.
Le chemin cache FFmpeg de Dream a été ajouté comme lien vers le binaire système
8.1.2 vérifié ; aucune option personnelle remplacée, aucun monde ouvert.
L'autre instance importée suit le même canal à son prochain lancement ; elle
n'a pas été réimportée ni modifiée manuellement.
Web : HEAD `eadc30e8c7b6dda50bc810584af057235e7fdba8` et **73 changements
préexistants** conservés, empreintes Git avant/après identiques. Seule la
distribution atomique est avancée ; pas de remplacement de code ou de cache.
Alpha, réseau/NAT, comptes et permissions ne sont pas modifiés.
## Limites
Fonction expérimentale disponible pour essai. Twitch/YouTube publics restent
à valider ; les résultats portent sur des fixtures locales. Le filtre
16 pixels/bloc, ANI-CLI et les disques blancs ne sont pas inclus. Les écrans
requièrent un mur complet et des dimensions entières dans le budget serveur.
Après pose de nouveaux blocs, un retour à beta.295 exige la sauvegarde associée.
Reçus, journaux et hashes : `build/release296/`, hors Git.
+107
View File
@@ -0,0 +1,107 @@
# beta.297 — correctifs des cadres installés
Livraison complète du **27 octobre 2026**, branche `codex/media-frame-fixes`.
[Comportement et validation graphique](media-frame-fixes-beta297.md),
[notes de version](notes-beta297.md). Le socle beta.296 est conservé.
## Résultat en jeu
Le menu de dimensions apparaît automatiquement à la première pose. Ensuite,
clic droit et **Maj + clic droit** ouvrent le lecteur Dream ; son bouton
**Taille / Size** permet de redimensionner. Le repère rouge est retiré.
Le cadre possède des faces latérales et suit les dimensions de l'écran ;
la vidéo ne laisse plus de liseré coloré à travers le bois en vue rasante.
Le son continue lorsque l'image est masquée. Les écrans existants conservent
leurs dimensions, source et identité, sans conversion de données.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source et tag `beta.297` | `bad2bdb0d12295a736aee64e08b9f6f5a8ae81d3` |
| Canal client/serveur | `e40b0d372af9fa43a301b842661c131f4e69f7c7` |
| Release | [beta.297](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.297), quatre artefacts publics vérifiés |
| CT 350 | Service actif, Sanctuary beta.297, Media 0.3.1 embarqué et Dream Displays 1.10.4 chargé |
| CT 320 | Distribution `releases/beta.297/prism`, ancienne beta.296 conservée |
| Prism historique | Même instance Sanctuary Beta, neuf JAR, deux synchronisations identiques |
Minecraft 26.3, Fabric 0.19.5, Java 25 et les dépendances restent inchangés.
Un seul JAR Sanctuary inclut JEI et Media ; Dream Displays reste un JAR
distinct obligatoire côté client et serveur. Le serveur comporte cinq JAR.
Le tag immuable désigne les sources de construction ; le présent reçu est
ajouté ensuite sans déplacer ce tag.
## Vérifications
- Nouvelle exécution `check build assemblePack assembleServerPack` réussie
en **2 min 57 s**, 158 tâches, **18 GameTests requis**, profil
`property270,claims272,claims277,claims278`, atlas ciblé. Contrats Media
inclus. Le JAR reconstruit a exactement le hash du JAR final testé sous Vulkan.
- Avant livraison : **17 contrôles interactifs** et deux clients **Vulkan**,
Sodium et Sound Physics, sur un écran 9 × 5. Captures finales de face,
droite, gauche, haut et arrière inspectées : aucun repère rouge ni liseré
vidéo, volume du cadre visible. Image suspendue hors ouverture, curseur
OpenAL actif, uploads repris en revenant devant. Les preuves et limites
sont dans [MEDIA-06](media-frame-fixes-beta297.md).
- Archives, plateformes, profils client/serveur et dépendances comparés à
leurs hashes. Deux synchronisations du véritable installateur dans une
instance isolée, puis deux dans l'instance personnelle : second passage
identique, aucun doublon Sanctuary, sélections facultatives conservées.
- Redémarrage CT 350 terminé (`Done`), versions Sanctuary, Media et Dream
confirmées dans le journal. Ping DNS/SRV depuis le LAN : Minecraft 26.3,
0/20 lors du contrôle, logo serveur inchangé.
- ZIP et MRpack publics : HTTP 200 et SHA-256 attendus. Le bouton du site
donne `Sanctuary-Beta.zip` ; le HTML annonce beta.297 et garde le lien direct.
- Admission : faux code refusé en HTTP 200 (`invalid`), aucun redeem.
Métriques Web fraîches, serveur en marche, même UUID communautaire
`cc6f4f5a-e58d-409a-879f-81daecf59461` côté jeu et site.
Les essais graphiques précèdent cette opération de publication et utilisent
le même binaire. Aucune nouvelle séance graphique ni mesure de synchronisation
vidéo/live n'est revendiquée pour le déploiement du 27 octobre.
## Artefacts
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.297.jar` | 18301448 | `f9bfffb0198abb8a4eae8a6d76a1ad3f1190edda7ce33f719bd47f0f4da27d9d` |
| `Sanctuary-beta.297.mrpack` | 16890964 | `89a031a85015615cfcf68c492bf1a73d32e0b10261c36f68045c985dc78d6886` |
| `Sanctuary-Prism-beta.297.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.297.zip` | 4036720 | `f31bcf2c83929028a29a51eae53b37eae2bb7fa8253dc124acad1e2ac2846af0` |
Les ZIP d'amorçage sont identiques à beta.296 : mêmes outils et plateforme,
canal stable maintenant en beta.297. Le MRpack contient le nouveau JAR.
## Conservation
Serveur vide avant arrêt propre. Sauvegarde complète privée :
`/root/sanctuary-beta-backups/before-beta297-20261027T035832Z/instance.tar.gz`,
SHA-256 `6b7fc4b5a6569e8cd3a9bab7e138a67b4344fde84a5dfdd453db9fec273ccdc5`.
Les **176 fichiers protégés** sont identiques après synchronisation et avant
redémarrage. Environnement privé et toutes les clés/valeurs de
`server.properties` sont identiques après démarrage. Aucune régénération ni
migration de monde.
Prism : sauvegarde sous la même instance,
`sanctuary-backups/before-beta297-20261027T035256Z/instance.tar.gz`, SHA-256
`0c95dfd13aa45eb26ea62b16465c87598838a19b2835b7b641d197167c92af09`.
Les **933 fichiers personnels contrôlés**, `instance.cfg` et l'installateur
habillé Sanctuary sont inchangés. Le lien FFmpeg existant est conservé.
Aucun monde personnel ouvert. L'autre instance importée suit le canal au
prochain lancement ; elle n'a pas été réimportée ni modifiée manuellement.
Web : HEAD `eadc30e8c7b6dda50bc810584af057235e7fdba8` et **73 changements
préexistants** conservés, empreintes Git avant/après identiques. Seule la
distribution atomique est avancée. Alpha, réseau/NAT, comptes et permissions
ne sont pas modifiés ; le checkout principal du chantier voisin est préservé.
## Limites
Twitch/YouTube publics et l'écoute subjective n'ont pas de nouvelle validation.
Les essais graphiques utilisent une vidéo synthétique, un mur orienté sud ;
les quatre orientations sont vérifiées numériquement. ANI-CLI, le filtre
16 pixels/bloc et les disques blancs ne sont pas inclus. Les dimensions
restent entières, dans le budget serveur, sur un mur complet.
Reçus opérationnels : `build/release297/`, hors Git. Captures graphiques
finales : `build/media-prototype/frame-fixes-02/`.
+97
View File
@@ -0,0 +1,97 @@
# beta.298 — normales de l'ancre corrigées et installées
Livraison complète du **27 octobre 2026**, branche `codex/media-anchor-model`.
[Correctif et preuve graphique](media-anchor-normals-beta298.md),
[notes de version](notes-beta298.md).
Avec les shaders Sanctuary activés, le petit cadre invisible ne laisse plus
de normales PBR sur la vidéo dans le coin inférieur gauche. Son modèle de
bloc est vidé et la collecte des matériaux ignore les modèles invisibles.
Le grand cadre, le lecteur et les interactions sont conservés. Les écrans
existants gardent leur source, leurs dimensions et leur identité ; aucun
bloc à reposer ni conversion de données.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source et tag `beta.298` | `fb8705369e3834c66d965108d609ec704b584ec2` |
| Canal client/serveur | `7fa08625a4fa89391d64b4b4fc0859611ecf0952` |
| Release | [beta.298](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.298), quatre artefacts publics vérifiés |
| CT 350 | Service actif, Sanctuary beta.298, Media 0.3.2 embarqué et Dream Displays 1.10.4 chargé |
| CT 320 | Distribution `releases/beta.298/prism`, ancienne beta.297 conservée |
| Prism historique | Même instance Sanctuary Beta, neuf JAR, deux synchronisations identiques |
Minecraft 26.3, Fabric 0.19.5, Java 25 et les dépendances restent inchangés.
Un JAR Sanctuary contient JEI et Media ; Dream est distinct et obligatoire
des deux côtés. Le serveur compte cinq JAR. Le présent reçu est ajouté après
la publication sans déplacer le tag immuable.
## Vérifications
- Exécution fraîche `check build assemblePack assembleServerPack` réussie
en **2 min 50 s**, 158 tâches, **18 GameTests requis**, profil
`property270,claims272,claims277,claims278`, atlas ciblé. Contrats Media inclus.
- JAR reconstruit strictement identique au binaire vérifié dans MEDIA-07 :
deux clients Vulkan avec PBR actif et vidéo en mouvement, zéro face
résiduelle, ancre exclue des matériaux, gros plans de face et en vue rasante.
Ces essais précèdent la publication ; aucune nouvelle séance graphique ou
mesure de synchronisation n'est revendiquée pendant ce déploiement.
- Archives, profils et hashes vérifiés. Deux passages du véritable
installateur en instance isolée, puis deux dans Prism personnel : second
passage identique, aucun doublon Sanctuary, sélections facultatives conservées.
- Démarrage CT confirmé par `Done` et versions chargées dans le journal.
Ping DNS/SRV depuis le LAN : Minecraft 26.3, 0/20 lors du contrôle, icône
serveur inchangée. Cela ne prouve pas un accès depuis un autre réseau.
- ZIP et MRpack publics en HTTP 200, hashes attendus ; nom reçu
`Sanctuary-Beta.zip`, version beta.298 et lien direct dans le HTML public.
- Faux code d'admission refusé (`invalid`, HTTP 200), aucun redeem.
Métriques Web fraîches, serveur en marche, même UUID communautaire
`cc6f4f5a-e58d-409a-879f-81daecf59461` côté jeu et site.
## Artefacts
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.298.jar` | 18301295 | `e6fdc36a212dcfcc89d31fbb29bc8eeec9d002cc9223ea6dcbfb31b7df17ec23` |
| `Sanctuary-beta.298.mrpack` | 16890840 | `29f88803b0abc88443a32830ca0b8a1e0490de1543f8164bed1ce86c26aff10e` |
| `Sanctuary-Prism-beta.298.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.298.zip` | 4036721 | `c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43` |
Le ZIP Prism reste identique à beta.297 : mêmes outils et plateforme, canal
stable maintenant en beta.298. Le kit serveur ne change que son README pour
aligner le nom du kit courant ; ses outils sont inchangés. Cette documentation
a été assemblée par `scripts/server_pack.py` après le build complet réussi.
## Conservation
Une connexion était active avant l'arrêt de maintenance. Sauvegarde complète
privée après arrêt propre :
`/root/sanctuary-beta-backups/before-beta298-20261027T045721Z/instance.tar.gz`,
SHA-256 `1310c975169f1b33ecb3b3494dbb0a12a8f9815b45e2240d25c509c19c5dc755`.
Les **177 fichiers protégés** sont identiques après synchronisation, avant
redémarrage. Environnement privé et clés/valeurs de `server.properties`
identiques après démarrage. Aucune migration ni régénération de monde.
Prism : sauvegarde sous la même instance,
`sanctuary-backups/before-beta298-20261027T045406Z/instance.tar.gz`, SHA-256
`692b1989f5dac8c2bc28a2fb2f7842937b5e28eeefeb4e30d428169ecc175d0e`.
Les **933 fichiers personnels contrôlés**, `instance.cfg` et l'installateur
habillé Sanctuary sont inchangés. Le lien FFmpeg existant est conservé.
Aucun monde personnel ouvert. L'autre instance importée n'est pas modifiée
manuellement ; elle suivra le canal au prochain lancement.
Web : HEAD `eadc30e8c7b6dda50bc810584af057235e7fdba8` et **73 changements
préexistants** conservés, empreintes Git avant/après identiques. Distribution
basculée atomiquement ; pas de remplacement de code ou de cache. Alpha,
réseau/NAT, comptes, permissions et chantier du checkout principal préservés.
## Limites
Les limites du parcours graphique MEDIA-07 restent valables : mur orienté sud,
pas de nouvelle validation de source publique, arrêt tardif d'un client par
manque d'espace pour les journaux de la sonde. Ce n'est pas un essai d'endurance.
La sonde n'est pas distribuée. Aucun nouveau problème d'espace n'est survenu
pendant cette livraison ; environ 2,5 Gio restaient au contrôle final local.
Reçus et journaux opérationnels : `build/release298/`, hors Git.
+95
View File
@@ -0,0 +1,95 @@
# beta.315 — cuisine et agriculture publiées
Livraison complète du **29 octobre 2026**, branche `codex/itsalive-26-3`.
[Notes de version](notes-beta315.md), [export de textures](itsalive-textures-export-beta315.md).
Les incréments beta.299 à beta.315, jusque-là locaux, sont réunis : cultures,
vanille grimpante, cuisine et appareils, écrasement, séchoir et saucisson,
fromage à partager et quatre qualités de vin.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source/tag `beta.315` | `359f49792bbe401acb53da121babaca451744b9c` |
| Canal client/serveur | `a5df95c2d43a2e80d1215a1bca39528f4ce55957` |
| Release publique | [beta.315](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.315), quatre artefacts anonymes vérifiés |
| CT 350 | Service actif, Sanctuary beta.315, Media 0.3.2 et Dream Displays 1.10.4 chargés |
| CT 320 | Distribution `releases/beta.315/prism`, ancienne beta.298 conservée |
| Prism historique | Même instance Sanctuary Beta, neuf JAR, deux passages identiques |
Minecraft 26.3, Fabric Loader 0.19.5, Java 25 et les dépendances sont conservés.
Le serveur a cinq JAR, JEI et Media sont embarqués dans Sanctuary.
Ce reçu est committé après publication sans déplacer le tag immuable.
## Contrôles
- Build frais `check build assemblePack assembleServerPack`, **2 min 38 s**,
162 tâches et **187 GameTests requis** : cuisine complète, agriculture,
vanille, écrasement/super piston, progression/recettes et contrôles de
propriété/admission. Les contrats smoke du dépôt sont inclus.
- Le JAR reste strictement identique au binaire final audité beta.315,
[134 tests ciblés et contrôles de la préparation](sausage-slices-beta315.md).
Les deux parcours **Vulkan / Sodium** de cette préparation couvrent le
séchoir et les parts posées. Aucun jeu personnel n'est ouvert au déploiement.
- MRpack : huit dépendances distantes et un override Sanctuary vérifié.
ZIP Prism et kit serveur identiques à beta.298 : outils, plateforme et canal
stable inchangés ; le canal fournit maintenant le nouveau mod.
- Deux vrais passages de l'installateur en instance isolée puis deux dans
l'instance personnelle : neuf JAR, aucun doublon, second passage identique.
- CT 350 : versions chargées et `Done` dans le journal, propriétés identiques
par clés/valeurs, environnement privé et UUID communautaire conservés.
Vérification authentifiée d'un code fictif : HTTP 200, `invalid`, aucun redeem.
- Ping par DNS/SRV depuis le LAN : Minecraft 26.3, **0/20**, port public 25567,
icône inchangée. Cette preuve ne couvre pas un réseau extérieur.
- Site public : ZIP et MRpack en HTTP 200, hashes attendus, nom du ZIP reçu
`Sanctuary-Beta.zip`, bouton direct, survol et footer beta.315.
Métriques `running=true`, `fresh=true`, même UUID communautaire.
## Artefacts
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.315.jar` | 19031856 | `3767fe61832e1193367a09fa9e8c9c1df1a2f5ccf4802bc7280d2cfbe665ce78` |
| `Sanctuary-beta.315.mrpack` | 17335224 | `d1811f1e892ab41147b55280976fc8fc24bd20b867ff8b17d94217d98f72b1e1` |
| `Sanctuary-Prism-beta.315.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.315.zip` | 4036721 | `c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43` |
## Conservation
CT : arrêt avant avance du canal ; le wrapper retourne 143 après SIGTERM et
aucun Java Minecraft ne reste actif avant la sauvegarde.
Sauvegarde privée `/root/sanctuary-beta-backups/before-beta315-20261029T085359Z/instance.tar.gz`, SHA-256
`58993afceff58adfa8b705a727ca19d5be24269065d8c23547088847daf9c77e` ; environnement privé copié à part en accès root.
**211 fichiers protégés** identiques après mise à jour,
avant redémarrage. Aucune régénération ni conversion explicite de monde.
Prism : sauvegarde `/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1/sanctuary-backups/before-beta315-20261029T085045Z/instance.tar.gz`, SHA-256
`f418c47484ecb67a8301f4ae6010b60f7c5c34980400e8fea44baf6f6b8c69a7`. **936 fichiers personnels**
contrôlés inchangés, avec `instance.cfg`, réglages, sauvegardes, captures,
packs personnels, installateur au logo et lien FFmpeg. Aucune instance créée
ou réimportée dans Prism ; l'instance isolée de vérification reste dans build.
Web : publication limitée à la distribution, sans pull/reset, déploiement de
code, migration DB ou changement de cache. HEAD observé
`eadc30e8c7b6dda50bc810584af057235e7fdba8`, **73 changements préexistants**.
Le premier relevé Git préalable a été refusé par le contrôle de propriétaire ;
le relevé final utilise une exception de confiance limitée à la commande,
sans modifier la configuration Git. Aucun fichier applicatif n'est écrit
par le script de publication. Alpha, NAT, comptes et permissions hors cible.
## Textures éditables et limites
Export dans `Downloads/ItsAlive-Textures-beta.315/`, ZIP de même nom :
**347 PNG de la refonte**, **368 images modifiables** avec les matériaux
réutilisés et **696 JSON visuels**. Les 347 PNG correspondent exactement au
JAR. Copies séparées pour les matériaux du fromage, des saucissons et du
séchoir, et un PNG propre à chaque vin de garde. Le pack éditable n'est pas
activé automatiquement. [Mode d'emploi](itsalive-textures-export-beta315.md).
Les cultures sont jouables ; leur apparition naturelle/répartition climatique
reste hors de cette livraison. Le créateur prévoit maintenant ses essais de
saucisson et de cuisine : les contrôles techniques ne valent pas validation de
ses préférences d'équilibrage ou de présentation. Les limites Media/voix et
réseau des livraisons précédentes restent inchangées.
Reçus et journaux opérationnels : `build/release315/`, hors Git.
+97
View File
@@ -0,0 +1,97 @@
# beta.318 — récoltes et recettes séchées publiées
Livraison du **30 octobre 2026**, branche `codex/itsalive-26-3`.
[Notes de version](notes-beta318.md) · [guide des récoltes](wiki/alimentation/README.md) ·
[recettes du séchoir et cuisine](wiki/alimentation/sechoir.md).
Les incréments locaux beta.316 à beta.318 sont maintenant disponibles sur le
serveur Beta et dans le téléchargement du site : récoltes par climat, seize
recettes de séchoir, dix-huit nouvelles recettes culinaires et petits coups
cosmétiques quand on mange épicé, sans dégât ni recul.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source/tag `beta.318` | `de6e11848ac391401aba01b08f6eb38df5bb6b0e` |
| Canal client/serveur | `807f69680d5d1f8ca7853d1f009898017ca16aa2` |
| Release | [beta.318](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.318), quatre artefacts anonymes vérifiés |
| CT 350 | Service actif, `Done`, Sanctuary beta.318, Media 0.3.2, cinq JAR |
| CT 320 | Distribution `releases/beta.318/prism`, précédente beta.315 conservée |
| Prism historique | Même instance Sanctuary Beta, neuf JAR et canal public rétabli |
Minecraft 26.3, Fabric Loader 0.19.5, Java 25 et les dépendances restent inchangés.
Ce reçu est committé après publication sans déplacer le tag immuable.
## Contrôles de livraison
- Build frais `check build assemblePack assembleServerPack` : **2 min 33 s**,
162 tâches et **204 tests serveur requis**. Cuisine, séchoir, récoltes,
agriculture, vanille, autres appareils, écrasement/super piston, progression,
recettes et contrôles de propriété/admission ; les smoke tests du dépôt passent.
- JAR strictement identique au binaire beta.318 installé lors des essais locaux :
`5b8d6fff72c3128ceac085a9d71b493bbda13a0dbbe42ffdd3e8dc2fda3a632b`. Le parcours **Vulkan / Sodium** de cette préparation vérifie les
fabrications, la sauvegarde, les dix-neuf modèles, JEI et deux coups sans perte
de vie par tranche. Il n'est pas présenté comme une nouvelle séance graphique
pendant le déploiement.
- Site : **7 tests / 52 assertions** passent pour le téléchargement et les
métriques, sur la base SQLite de test en mémoire. Aucun code PHP ou asset Web
n'est déployé par cette livraison.
- Deux vrais passages de l'installateur depuis le ZIP Prism dans une copie
isolée neuve, puis deux dans l'instance personnelle. Un seul Sanctuary,
mêmes neuf JAR au second passage, préférences facultatives conservées.
- CT 350 : version et Media effectivement chargés, zéro erreur au démarrage,
propriétés identiques par clés/valeurs, environnement privé et UUID communautaire
conservés. Code d'admission fictif refusé : HTTP 200, `invalid`, aucun redeem.
- Site public : ZIP/MRpack HTTP 200, hashes attendus, ZIP reçu sous
`Sanctuary-Beta.zip`, téléchargement direct et HTML beta.318.
Métriques `running=true`, `fresh=true`, même UUID ; aucun changement de base.
- Ping depuis le LAN par DNS/SRV : Minecraft 26.3, **0/20**,
port public 25567 et icône inchangée. Cela ne valide pas un accès depuis
un autre réseau ni un échange vocal entre deux joueurs.
## Artefacts immuables
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.318.jar` | 19131515 | `5b8d6fff72c3128ceac085a9d71b493bbda13a0dbbe42ffdd3e8dc2fda3a632b` |
| `Sanctuary-beta.318.mrpack` | 17394176 | `199097b346ce1b3068f274fafafc422104d0c6b77c1c14d09a75ec26460aa863` |
| `Sanctuary-Prism-beta.318.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.318.zip` | 4036721 | `c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43` |
Les archives d'amorçage Prism et serveur restent identiques à beta.315 : le canal
fournit le nouveau mod. Le MRpack contient huit dépendances distantes et un seul
override Sanctuary, vérifié contre les profils client et serveur.
## Conservation
CT : arrêt systemd avant avance du canal. Le wrapper transmet SIGTERM et attend
Java ; son code 143 est celui déjà documenté. Aucun processus Java ne reste
avant la sauvegarde et aucun SIGKILL n'est utilisé.
Sauvegarde complète privée :
`/root/sanctuary-beta-backups/before-beta318-20261030T055616Z/instance.tar.gz`,
SHA-256 `3da2f620653d4f379e8921130d5de5d48af68ac168c35f7e7b310fb84468f49f`.
L'environnement privé est copié séparément, mode 600. **211 fichiers protégés**
sont identiques après synchronisation, avant le redémarrage. Aucun monde n'est
régénéré ou converti explicitement ; les chunks existants ne sont pas repeuplés.
Prism : sauvegarde complète
`/Users/koka/Library/Application Support/PrismLauncher/instances/Sanctuary-0.1.0-alpha.1/sanctuary-backups/before-public-beta318-20261030T060417Z/instance.tar.gz`,
SHA-256 `f13183a890ad407af515237627d4e45930962ea83f71fc23488c6e45029bc320`.
**1031 fichiers personnels** contrôlés inchangés, dont sauvegardes,
réglages, favoris, captures, packs, outils et huit autres mods. Seuls les deux
arguments de pack des `PreLaunchCommand` reviennent au canal public. Le profil
local beta.318 est conservé en archive ; aucune nouvelle instance et aucun
monde personnel ouvert. Le lien FFmpeg et l'installateur au logo sont conservés.
Web : publication limitée aux fichiers de distribution et au lien `current`.
HEAD `eadc30e8c7b6dda50bc810584af057235e7fdba8`, **73 changements préexistants** et
**423 fichiers de code/assets** restent strictement identiques. Aucun pull/reset,
changement d'application, cache, compte ou permission. L'Alpha et le réseau
restent hors cible. Journaux et reçus détaillés ignorés : `build/release318/`.
## Essais restant humains
Le serveur est prêt pour tester les plats et le ressenti des petits coups en
multijoueur. La texture des nouveaux plats réutilise les sprites recolorés ;
les réglages culinaires et l'impression de piquant restent à apprécier en jeu.
+112
View File
@@ -0,0 +1,112 @@
{
"version": "beta.320",
"date": "2026-10-30",
"source_tag": "5869f85ec36424509c3eecbc98834971321e27f6",
"channel_commit": "cb301259b9906ebea8eb8b6327de9aed0a4c304f",
"server": {
"service": "active",
"loaded_version": "beta.320",
"embedded_media": "0.3.2",
"started": true,
"server_properties_unchanged": true,
"private_env_unchanged": true,
"community_uuid_unchanged": true,
"admission_status": 200,
"admission_reason": "invalid",
"no_redeem_called": true,
"startup_error_count": 0
},
"backup": {
"backup": "/root/sanctuary-beta-backups/before-beta320-20261030T080352Z",
"backup_sha256": "7cb1e410f803ff7ea3d7a2771c43ca07e2bb0623a76dc5f05c2886f923331b71",
"backup_bytes": 246932673,
"protected_files": 213,
"java_exit_confirmed": true,
"forced_kill_used": false,
"service_before": "inactive"
},
"web": {
"current": "releases/beta.320/prism",
"head": "eadc30e8c7b6dda50bc810584af057235e7fdba8",
"status_entries": 73,
"status_hash": "4c43579292d7a800aba013921f6606ea95a8857231d5d46a2136bc2fa772c555",
"protected_source_files_unchanged": 423,
"community_uuid_unchanged": true,
"metrics": {
"days": 5,
"deaths": 5,
"online": 0,
"running": true,
"fresh": true,
"measuredAt": 1793347910051
}
},
"artifacts": {
"sanctuary-beta.320.jar": {
"bytes": 19160731,
"sha256": "09459661e40f610d61dfcb463cdba3b73e0962328eebe72c11e78b8ce6eee453"
},
"Sanctuary-beta.320.mrpack": {
"bytes": 17418164,
"sha256": "1793f0ecda78a88b50a8a4c7f8c5e1e999c1d1fd43d8144b4c34325f50e9c4c8"
},
"Sanctuary-Prism-beta.320.zip": {
"bytes": 3928525,
"sha256": "95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9"
},
"Sanctuary-Server-beta.320.zip": {
"bytes": 4036721,
"sha256": "c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43"
}
},
"public_checks": {
"/downloads/sanctuary-prism.zip": {
"status": 200,
"sha256": "95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9",
"bytes": 3928525,
"content_disposition": "attachment; filename=Sanctuary-Beta.zip"
},
"/downloads/sanctuary-beta.mrpack": {
"status": 200,
"sha256": "1793f0ecda78a88b50a8a4c7f8c5e1e999c1d1fd43d8144b4c34325f50e9c4c8",
"bytes": 17418164,
"content_disposition": "attachment; filename=Sanctuary-Beta.mrpack"
},
"html_beta320": true,
"direct_prism_download": true,
"minecraft_ping": {
"version": "26.3",
"online": 0,
"max": 20,
"icon_sha256": "2b8966e8f2a0cfe064a1dfac4205874216373f8bb4c59e8eb712d5e7d204fce7",
"srv_target": "beta.sanctuary-minecraft.net",
"srv_port": 25567,
"origin": "LAN via public DNS/SRV"
},
"channel_commit": "cb301259b9906ebea8eb8b6327de9aed0a4c304f",
"source_tag": "5869f85ec36424509c3eecbc98834971321e27f6"
},
"isolated_installer": {
"passes": 2,
"jars": 9,
"single_sanctuary": true,
"second_pass_identical": true
},
"personal_prism": {
"public_channel_confirmed": true,
"synchronized_by_this_delivery": false,
"next_launch_updates_from_channel": true
},
"game_validation": {
"server_tests": 241,
"vulkan_sodium_combined_run": "passed before publication",
"same_jar": true
},
"scope": {
"site": true,
"server_beta_ct350": true,
"alpha_changed": false,
"web_code_changed": false,
"personal_world_opened": false
}
}
+83
View File
@@ -0,0 +1,83 @@
# beta.320 — cuisine, carte et activité saisonnière publiées
Livraison du **30 octobre 2026**, branche `codex/itsalive-26-3`.
[Notes de version](notes-beta320.md) · [laitages](wiki/alimentation/laitages.md) ·
[intégration et essais du jeu](integration-beta320.md) · [reçu structuré](release-beta320-verification.json).
Le serveur Beta et le téléchargement du site utilisent **beta.320** : cuisine
directe et chaudron Minecraft, baratte, semences naturelles dans les herbes,
carte/Pause à hauteur exacte du joueur et activité saisonnière des insectes.
## Cibles vérifiées
| Cible | État |
| --- | --- |
| Source/tag `beta.320` | `5869f85ec36424509c3eecbc98834971321e27f6` |
| Canal client/serveur | `cb301259b9906ebea8eb8b6327de9aed0a4c304f` |
| Release | [beta.320](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.320), quatre artefacts anonymes vérifiés |
| CT 350 | Active, `Done`, Sanctuary beta.320, Media 0.3.2, cinq JAR, zéro erreur au démarrage |
| CT 320 | Distribution `releases/beta.320/prism`, précédente beta.318 conservée |
| Prism personnel | Canal public confirmé ; aucune synchronisation personnelle lancée par cette demande |
Minecraft 26.3, Fabric Loader 0.19.5, Java 25 et les dépendances sont conservés.
Le reçu est committé après publication sans déplacer le tag immuable.
## Vérification
- Le JAR livré est strictement celui du lot vérifié : **241 tests serveur**,
contrôles de `check build assemblePack assembleServerPack` et parcours
regroupé **Vulkan/Sodium** sur Apple M1. Ses **2 770 classes de production**
sont celles des essais. Ces preuves ne sont pas présentées comme une nouvelle
séance de tests pendant le déploiement.
- MRpack, ZIP Prism et kit serveur vérifiés avant publication : versions,
intégrité ZIP, hashes, huit dépendances distantes et override Sanctuary du
MRpack identique au JAR publié.
- Deux synchronisations réelles depuis le ZIP Prism dans une instance isolée
neuve : neuf JAR, un seul Sanctuary beta.320 et deuxième passage identique.
L’instance personnelle et ses préférences ne sont pas modifiées ; son prochain
lancement suit déjà le canal public et récupérera la mise à jour.
- CT 350 : version effectivement chargée, `Done`, zéro erreur, configuration,
environnement privé et UUID communautaire conservés. Admission fictive :
HTTP 200, `invalid`, aucun appel à `redeem` et aucun vrai code consommé.
- Site : ZIP et MRpack anonymes HTTP 200, hashes attendus ; ZIP reçu comme
`Sanctuary-Beta.zip`. Version beta.320 dans le bouton, son survol et le footer.
Métriques `running=true`, `fresh=true`, même UUID communautaire.
- Ping Minecraft par DNS/SRV depuis le LAN : 26.3, **0/20** au contrôle,
port public 25567 et icône conservés. Cela ne prouve pas un accès depuis un
autre réseau ou un échange vocal entre deux joueurs.
## Artefacts immuables
| Artefact | Octets | SHA-256 |
| --- | ---: | --- |
| `sanctuary-beta.320.jar` | 19160731 | `09459661e40f610d61dfcb463cdba3b73e0962328eebe72c11e78b8ce6eee453` |
| `Sanctuary-beta.320.mrpack` | 17418164 | `1793f0ecda78a88b50a8a4c7f8c5e1e999c1d1fd43d8144b4c34325f50e9c4c8` |
| `Sanctuary-Prism-beta.320.zip` | 3928525 | `95c57f5e70627a2847d1cc2033c8d9f50f44ef4a302ca892bc727e0c37ece0a9` |
| `Sanctuary-Server-beta.320.zip` | 4036721 | `c33ac4c08bb8b99598c71d44e1e5047f0810c4938f68d9d393507b950e865d43` |
Les ZIP d’amorçage restent identiques à beta.318 : leur canal stable fournit
le nouveau mod au lancement. Les archives n’embarquent aucune sauvegarde ou
configuration privée.
## Conservation
La Beta était **déjà arrêtée** lors de l’inspection. L’absence de Java a été
confirmée avant la sauvegarde complète :
`/root/sanctuary-beta-backups/before-beta320-20261030T080352Z/instance.tar.gz`,
SHA-256 `7cb1e410f803ff7ea3d7a2771c43ca07e2bb0623a76dc5f05c2886f923331b71`,
246932673 octets. Environnement privé copié séparément en mode 600.
**213 fichiers protégés** sont identiques après synchronisation,
avant démarrage ; aucun SIGKILL, monde réinitialisé ou chunk régénéré.
Les propriétés sont ensuite comparées par clés/valeurs après le démarrage.
La publication Web ne change que les archives, leurs métadonnées et le lien
atomique `current`. HEAD `eadc30e8c7b6dda50bc810584af057235e7fdba8`, **73 changements
préexistants** et **423 fichiers de code/assets**
strictement conservés. Aucun pull/reset, changement de cache, base, compte ou
permission. Le script de publication transféré sur `gpu` a le même hash que
le script versionné. L’Alpha et les règles réseau restent hors cible.
Journaux détaillés et contrôles isolés : `build/release320/`, hors de Git.
Les impressions de cuisine et la densité réelle des insectes restent à
apprécier pendant les essais de jeu. Aucun prototype Under n’est activé par
cette livraison.
@@ -0,0 +1,77 @@
{
"version": "beta.315",
"jar": "mods/sanctuary/build/libs/sanctuary-beta.315.jar",
"sha256": "3767fe61832e1193367a09fa9e8c9c1df1a2f5ccf4802bc7280d2cfbe665ce78",
"previous_verified_sha256": "82a2a6d8d4e2ad9d0aab754037995609722bbebac28db89a6e641c851ccb3ceb",
"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/KitchenAppliances.class",
"fr/koka/sanctuary/cuisine/KitchenClient$1.class",
"fr/koka/sanctuary/cuisine/KitchenClient.class",
"resourcepacks/template/THIRD_PARTY_NOTICES.md"
],
"added_jar_entries": [
"assets/sanctuary/blockstates/cured_sausage.json",
"assets/sanctuary/models/block/cured_sausage.json",
"assets/sanctuary/models/block/cured_sausage_slice_1.json",
"assets/sanctuary/models/block/cured_sausage_slice_2.json",
"assets/sanctuary/models/block/cured_sausage_slice_3.json",
"data/sanctuary/loot_table/blocks/cured_sausage.json",
"fr/koka/sanctuary/cuisine/culinary/block/CuredSausageBlock.class"
],
"removed_jar_entries": [],
"generated_json": {
"cuisine": 432,
"kitchen": 234,
"agriculture": 376
},
"additive_sausage_json": 6,
"culinary_source_classes": 53,
"culinary_compiled_classes_verified": 73,
"sausage_slices": 4,
"food_per_slice": 2,
"total_food": 8,
"saturation_modifier": 1.2,
"horizontal_orientations": 4,
"block_states": 16,
"existing_drying_recipe_and_raw_cured_item_models_unchanged": true,
"old_pngs_unchanged": 1108,
"new_pngs": 0,
"server_required": 134,
"sausage_scenarios": 8,
"client_vulkan": {
"log": "build/sausage315-client.log",
"screenshots": "build/sausage315-screenshots",
"screenshot_count": 12,
"world_seed": 315,
"sodium": "0.9.2+mc26.3",
"native_paid_rack_insertion_and_collection": true,
"native_crosshair_key_placement_and_eating": true,
"actual_disk_orientation_and_partial_sausage_reopen": true,
"four_native_eating_sounds": true,
"fixture_advances_only_drying_progress": true
},
"drying_regression_vulkan": {
"log": "build/sausage315-drying-regression.log",
"native_four_preparations_and_hooks": true,
"actual_bucket_and_disk": true,
"placed_slice_tasting": 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/cured_sausage.json",
"assets/sanctuary/models/block/cured_sausage.json",
"assets/sanctuary/models/block/cured_sausage_slice_1.json",
"assets/sanctuary/models/block/cured_sausage_slice_2.json",
"assets/sanctuary/models/block/cured_sausage_slice_3.json"
],
"build_log": "build/sausage315-build.log"
}
+111
View File
@@ -0,0 +1,111 @@
# IA-10 — saucisson posé à partager — beta.315 locale
Demande du 29 octobre 2026 : poser le saucisson séché puis en manger des tranches,
comme le fromage. Même branche `codex/itsalive-26-3`, sans publication ni
installation. Premier réglage : quatre tranches de deux points de nourriture,
pour conserver les huit points du saucisson entier de beta.313.
## Contrat de continuité avant modification
L'objet `sanctuary:cured_sausage`, sa recette et son modèle restent stables.
Il devient le BlockItem du nouveau bloc du même identifiant. Comme le fromage,
il se mange désormais après la pose plutôt qu'entier dans la main. Les objets
existants deviennent posables sans conversion. Le cru, les quatre crochets,
les cinq minutes et les règles d'humidité du séchoir restent inchangés.
Le bloc n'a pas de block entity. Son état natif conserve `bites=0..3` et les
quatre orientations horizontales `facing`. Ces données additives se sauvegardent
par les mécanismes standard des blocs. Le modèle et la forme raccourcissent à
chaque tranche. Aucune migration de chunk, génération ou monde personnel n'est
nécessaire ou exécutée. Comme le gâteau et le fromage, casser le saucisson ou
lui enlever son support ne rend pas un saucisson entier ; les tranches mangées
ne peuvent pas être reconstituées gratuitement. Avant un retour à beta.314,
manger les saucissons posés ; les objets non posés gardent leur identifiant.
## Geste et apparence
Poser sur un bloc solide consomme un saucisson séché. Clic droit pour manger
une tranche si le joueur a faim ; la quatrième enlève le bloc. Aucun couteau,
menu, combustible ou nouvel objet « tranche » n'est ajouté. Chaque tranche
conserve le modificateur de saturation de 1,2 ; la faim totale reste de huit.
Un comparateur lit 8/6/4/2 selon les tranches restantes.
Les nouvelles géométries cubiques reprennent les références du modèle d'objet :
terre cuite rouge, laine blanche et bloc de champignon rouge pour la coupe.
La ficelle du bout coupé disparaît à la première tranche ; la ficelle et les
bandes encore présentes restent à leur vraie position sur le morceau restant.
Les modèles d'objet cru/séché et leurs rendus sur le séchoir restent intacts.
Aucun PNG ou son n'est ajouté. Les sons natifs de mastication sont référencés.
## Vérifications
Huit cas serveur natifs vérifient le paiement de la pose, les quatre vraies
prises de tranches et leurs huit points de nourriture, la faim pleine,
les bougies, les seize états de forme et de comparateur, la rotation et le
miroir, le codec standard de sauvegarde d'un saucisson entamé et orienté,
la casse de chacun des quatre états, la perte de support et la pose refusée
sans consommation. Le dernier cas exécute **6 000 ticks complets** du séchoir
sur une vraie préparation, puis pose le résultat payé du même identifiant.
Le parcours **Vulkan / Apple M1 / Sodium 0.9.2+mc26.3** utilise un monde plat
jetable de graine **315**, une préparation crue fournie en fixture et de vraies
touches d'utilisation pour l'accrocher, récupérer le résultat, poser le
saucisson puis manger ses quatre tranches. Le viseur doit réellement toucher
la forme du bloc avant chaque action. Le serveur confirme le paiement de
chaque étape et les deux points de nourriture de chaque tranche.
Les seize modèles sont chargés : huit cuboïdes pour l'entier, cinq pour chaque
portion raccourcie, références de textures natives valides et tous les sommets
à l'intérieur de la forme orientée correspondante. L'objet reste dans l'onglet
Nourriture et boissons et son modèle historique reste valide. FR/EN et GUI
2/3/4 sont contrôlés. Une fermeture/réouverture réelle conserve le bloc avec
**deux tranches déjà mangées** et la même orientation ; les deux autres se
mangent sur ce même morceau. Les quatre sons natifs de mastication sont captés.
Douze images sont conservées dans `build/sausage315-screenshots/` (ignoré).
Ce parcours graphique rapproche seulement la progression du séchage à dix
ticks de sa fin pour ne pas attendre cinq minutes ; les derniers ticks et
toutes les interactions restent natifs. Les cas serveur exécutent la durée
complète. Le parcours graphique a réussi en **1 min 14 s**. Le contrôle
historique beta.313 est adapté pour goûter le résultat après sa pose, et son
assertion d'objet comestible devient celle d'un BlockItem à partager.
```sh
./gradlew check build assemblePack \
-PsanctuaryFocusedTests=sausage315,cheesewine314,drying313,cauldron312,cauldron311,pan310,oven308,mill306,kitchen304,cuisine303,recipes,progression,foodknowledge \
-PsanctuaryAtlasOnly=true
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
-PsanctuarySausage315ClientTests=true -PsanctuarySodiumClientTests=true \
-PsanctuaryFocusedTests=sausage315 -PsanctuaryQuickTests=true \
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
-PsanctuaryClientNoVsync=true
```
Le parcours historique complet du séchoir est également rejoué sous Vulkan
avec Sodium et réussit en **1 min 16 s** : fabrication payée des quatre
préparations, quatre crochets, retrait/raccrochage, seau d'eau, sauvegarde et
vidage au seau, quatre saucissons récupérés puis pose et dégustation d'une
tranche du même résultat. Sa table de dégustation est surélevée pour rester
au sec après l'essai d'écoulement. Les miroirs de structure vérifient aussi
la réflexion réelle de la forme restante sur X et Z pour les seize états,
et pas seulement la conservation du nombre de tranches.
`check build assemblePack` a réussi en **3 min 19 s**, avec **134 tests serveur
obligatoires**, dont les assertions de réflexion de coupe. L'audit strict à
beta.314 vérifie le nouveau bloc, ses six JSON ajoutés et les modifications
prévues de registre, libellés et crédits. Les **1 108 PNG** et tous les anciens
JSON de recettes/modèles sont inchangés. Les générateurs sont comparés au JAR :
432 JSON de cuisine, 234 d'appareils et 376 d'agriculture. Les 53 sources et
73 classes compilées culinaires sont vérifiées. Les assemblages client/serveur
embarquent exactement le même JAR et le modèle de pack de ressources reprend
les cinq nouveaux JSON visuels. Aucun fichier d'objet ou de modèle de séchoir
historique n'a changé.
[Reçu d'audit](sausage-slices-beta315-verification.json).
JAR local : `mods/sanctuary/build/libs/sanctuary-beta.315.jar`.
SHA-256 :
`3767fe61832e1193367a09fa9e8c9c1df1a2f5ccf4802bc7280d2cfbe665ce78`
Aucun push, tag, publication, canal packwiz public, installation Prism ou
serveur personnel n'a été modifié.
+1 -1
View File
@@ -8,7 +8,7 @@ Plateforme épinglée : Minecraft **26.3**, Fabric Loader **0.19.5**, Fabric API
## Préparer le kit
Dans les sources : `./gradlew check build assemblePack assembleServerPack`.
Le kit de la livraison courante est `build/Sanctuary-Server-beta.296.zip` ; les manifestes locaux sont
Le kit de la livraison courante est `build/Sanctuary-Server-beta.298.zip` ; les manifestes locaux sont
dans `build/packwiz-server/`. Le ZIP est un amorçage : il télécharge les mods
depuis le canal au premier démarrage, il n'est pas une copie hors ligne du pack.
Il n'est utilisable sur le canal public qu'après publication de cette version.
+23
View File
@@ -43,6 +43,8 @@ changement de Minecraft/Fabric ou de format de sauvegarde n'est implicite.
```sh
./gradlew check build assemblePack assembleServerPack
# Remplacer beta.xxx par la version choisie ; exporter depuis le dossier assemblé.
(cd build/packwiz && packwiz modrinth export -o ../Sanctuary-beta.xxx.mrpack)
python3.14 scripts/pack.py prism https://git.botsu.net/koka/sanctuary-beta/raw/branch/packwiz/pack.toml
```
@@ -240,6 +242,27 @@ gérés au second passage, mêmes données personnelles avant/après. Conserver
`saves/`, captures, favoris, réglages, packs graphiques et configurations tierces.
Ne pas ouvrir un monde personnel pour prouver une simple synchronisation.
### Essai local explicitement demandé sans publication
Pour ce périmètre, ne pas publier le canal et ne pas remplacer seulement le JAR
alors que le pré-lancement suit une ancienne version publique. La beta.318 a
validé un profil packwiz autonome copié dans l’instance existante sous
`sanctuary-local-packs/beta.318/`. L’installateur v0.5.14 accepte un chemin local
pour le pack ; le JAR Sanctuary est une entrée directe de cet index local.
Les huit métadonnées des dépendances et leurs choix restent inchangés.
Après les essais isolés et la sauvegarde, remplacer seulement l’argument du
pack dans les deux `PreLaunchCommand` par le chemin cité
`"$INST_DIR/sanctuary-local-packs/beta.318/pack.toml"`. Garder le bootstrap au logo,
`--bootstrap-no-update` et tous les autres réglages. Vérifier deux passages réels,
l’unicité du JAR et les hashes personnels ; ne pas lancer un monde personnel.
Le profil doit être hors du worktree pour rester disponible aux lancements suivants.
Le pré-lancement demeure sur ce profil pendant l’essai. Le rétablissement de la
commande publique est une étape explicite d’une future livraison compatible,
après lecture de la configuration courante et de sa sauvegarde. Ne pas réutiliser
les scripts ponctuels d’une ancienne intervention. [Reçu beta.318](local-beta318.md).
## Reprise et reçu de livraison
Pour un échec, conserver l'état/les logs, revenir au dernier artefact immuable
+57
View File
@@ -0,0 +1,57 @@
# IA-03 — Vanille en 16 × 16, beta.302 locale
Correction du 28 octobre 2026 sur `codex/itsalive-26-3`, après le retour du
créateur sur les textures 32 × 32 de beta.301. Les quatre stades de vanille
doivent être des **PNG de 16 × 16 pixels réels**, comme les textures vanilla.
Le dessin est simplifié pour cette grille : jeune tige, feuillage, fleurs,
puis gousses vertes. Feuilles et gousses restent dans un même sprite sur le
plan unique contre le tronc. Les fichiers conservent leurs identifiants
`sanctuary:block/vanilla_climbing_stage0` à `3` ; la pousse ascendante, la
récolte, les supports et les onglets créatifs de beta.301 sont conservés.
L'[atlas de production et le prompt](../ressources-pack/sources/vanilla-beta301/README.md)
documentent le travail avec l'outil intégré imagegen. L'atlas contient quatre
cellules 16 × 16 ; les PNG de jeu sont extraits de ces cellules. L'ancien
atlas conceptuel reste une référence historique. Les 343 PNG du reçu beta.299
ne sont pas modifiés. Aucune génération, migration ou installation modifiée.
Le parcours client vérifie désormais la taille **16 × 16 de chaque sprite
effectivement chargé dans l'atlas Minecraft**, pour tous les modèles de
vanille, en plus du plan unique, de la culture en survie et du rechargement.
Le parcours **Vulkan avec Sodium 0.9.2** passe en **1 min 16 s** : les
64 états sont contrôlés, avec les quatre sprites chargés en 16 × 16 et un
plan recto verso par face. Après fermeture et réouverture du monde de test,
les 24 segments conservent exactement leurs faces et leur maturité.
Commandes de vérification :
```sh
./gradlew check build assemblePack \
-PsanctuaryFocusedTests=vanilla301,agriculture300,recipes,progression,foodknowledge \
-PsanctuaryAtlasOnly=true
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
-PsanctuaryVanilla301ClientTests=true -PsanctuarySodiumClientTests=true \
-PsanctuaryFocusedTests=vanilla301 -PsanctuaryQuickTests=true \
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
-PsanctuaryClientNoVsync=true
```
`check build assemblePack` passe en **3 min 18 s**, avec **46 tests serveur
requis** réussis. Le JAR, ses copies packwiz client/serveur et le template
contiennent les quatre nouveaux PNG 16 × 16 identiques aux sources. Les
**13 PNG de vanille présents dans le mod** sont tous contrôlés en 16 × 16.
Les 376 JSON agricoles et les notices sont vérifiés dans les archives ; les
343 PNG historiques restent identiques, dont les 38 images fournies.
SHA-256 de `sanctuary-beta.302.jar` :
```text
5959fa5e2fab808c55e011fc578171bc8cadca9d89d7170795051fc19fa01c0c
```
Journaux et reçu dans `build/vanilla302-*`, captures `vanilla302-16px-*`
dans le dossier de test client ignoré. Minecraft 26.3, graine de test 301,
Vulkan exclusivement.
Même branche en local, aucun push, tag, publication, serveur ou Prism mis à jour.
+146
View File
@@ -0,0 +1,146 @@
# IA-03 — Vanille grimpante, beta.301 locale
**Suite en beta.302 :** [les quatre textures sont reprises en 16 × 16](vanilla-16px-beta302.md).
Le reçu ci-dessous conserve la préparation initiale beta.301 en 32 × 32.
Préparation du **28 octobre 2026**, même branche `codex/itsalive-26-3`, sur
le port agricole beta.300 (`ed11cd77`). Minecraft 26.3, Java 25 et les
dépendances sont inchangés. Aucun push, tag, publication, serveur ou Prism
mis à jour ; seuls les mondes de développement neufs servent aux essais.
## Plante attachée aux arbres
La bouture se pose **contre une face latérale d'une bûche**, à n'importe
quelle hauteur, sans exiger de terre au pied. Les supports par défaut sont
les bûches et bois des arbres de l'Overworld, y compris les variantes
écorcées : tag `sanctuary:vanilla_supports`, qui reprend
`#minecraft:logs_that_burn`. La pierre, le feuillage, le sol sous le plant
et les tiges du Nether ne sont pas des supports. La plantation sous l'eau
est refusée sans consommer de bouture.
Chaque segment peut porter plusieurs faces attachées, à la manière des
lianes. Poser une autre bouture ajoute une face disposant de sa propre bûche
sans réinitialiser l'âge du segment. Aucun plafond ou segment flottant ne
sert d'appui. La plante n'a pas de collision centrale et le tag vanilla
`minecraft:climbable` permet l'escalade native.
Le rendu reste **plaqué dans le premier seizième de bloc contre l'écorce**.
À la demande du créateur, feuilles, fleurs et gousses sont réunies dans
**une seule texture sur un seul plan**, sans couches décalées. Quatre nouveaux
sprites RGBA de 32 × 32 pixels suivent la maturité : jeune plant, feuillage,
fleurs, gousses vertes. Ils prennent la liane Minecraft comme référence de
structure et de style. Leurs couleurs sont intégrées, sans teinte de biome.
Aucun modèle en croix, cadre ou colonne au centre de la cellule.
L'[atlas source et les prompts](../ressources-pack/sources/vanilla-beta301/README.md)
sont conservés ; les quatre anciens PNG de vanille restent intacts.
## Croissance et récolte
Les quatre âges sont **0 à 3**. Sous une lumière d'au moins 9, les ticks
aléatoires font mûrir le segment. À maturité, la croissance crée uniquement
un **nouveau segment au-dessus**, âge 0, sur les faces qui trouvent encore
une bûche à cette hauteur. Il n'y a ni propagation vers le bas ni propagation
latérale automatique.
La pousse s'arrête à la fin du tronc, devant un bloc, une autre plante, de
l'eau ou à la limite de hauteur du monde. Elle ne remplace que l'air.
La règle native `minecraft:spread_vines` contrôle l'extension naturelle ;
la maturation reste possible lorsqu'elle est désactivée.
La poudre d'os ajoute un âge, puis fait pousser le segment supérieur lorsque
celui-ci est possible. Une tentative d'extension bloquée ne consomme rien.
Cette action volontaire reste disponible lorsque la propagation naturelle
des lianes est désactivée.
Un clic droit à maturité donne **une à trois gousses vertes**, conserve les
faces et remet le segment à l'âge 1. Même une interaction obsolète ne peut
récompenser deux fois la même récolte. Une bouture en main sert à ajouter
une face ; la poudre d'os garde son usage de croissance. La perte d'une
bûche retire seulement les faces qu'elle portait. Si plus aucune face n'a
d'appui, le bloc disparaît et rend **une bouture par segment**, indépendamment
du nombre de faces. Les autres segments soutenus par leur propre tronc restent.
Le fumoir transforme une gousse verte en une gousse de vanille préparée,
comme dans le catalogue historique. Aucun nouvel appareil culinaire n'est
introduit. Le séchoir/saucisson et les autres machines restent
dans leurs tickets respectifs.
## Objets et sauvegardes
- `sanctuary:vanilla_cutting` : bouture, dans **Naturel**, avec aide FR/EN.
- `sanctuary:green_vanilla_pod` et `sanctuary:vanilla_pod` : ingrédients dans
**Nourriture et boissons**.
- `sanctuary:vanilla_vine` : bloc, états `north`, `east`, `south`, `west` et `age`.
Le catalogue agricole contient désormais **48 objets** distincts, sans
nouvel onglet créatif. La vanille n'était pas enregistrée en beta.300 : ces
identifiants et états sont additifs, sans conversion de données existantes.
Les états sont sauvegardés par Minecraft ; aucune donnée persistante annexe.
Le modèle prend en charge les rotations et miroirs des structures natives.
Les 343 PNG du reçu beta.299 restent inchangés ; les quatre nouveaux sprites
`vanilla_climbing_stage0` à `3` s'y ajoutent. Aucune génération de biome,
apparition naturelle, expansion, réécriture de chunk ou migration du monde
26.2 n'est ajoutée. L'obtention des premières boutures en survie naturelle
reste à traiter avec le peuplement agricole.
```mcfunction
/give @s sanctuary:vanilla_cutting 16
```
## Implémentation et vérification
`VanillaVineBlock` reprend le cycle de maturité et de récolte de l'historique
26.2, avec un nouvel attachement à plusieurs faces et une croissance strictement
ascendante. Les modèles multipart, le butin, la recette et les tags sont
produits par `generateAgricultureResources` pour les formats exacts 26.3.
La session ciblée passe **13 tests serveur**, dont **12 scénarios vanille**.
Ils couvrent la pose sur les quatre côtés,
les refus de plantation, plusieurs faces et leur conservation, poudre d'os,
obstacles, appuis en hauteur, ticks naturels et règle des lianes, récolte
unique, perte du support, formes fines, escalade native, NBT, rotations,
miroirs et recette au fumoir.
Le parcours **Vulkan avec Sodium** vérifie la pose réelle en survie,
la consommation de bouture et de poudre d'os, la pousse ascendante et
la récolte par les interactions client/serveur natives. Les 64 états de modèle
sont compilés et contrôlés, dont 60 avec au moins une face ; leurs sommets
restent contre le tronc, avec un seul plan recto verso par face et le nouveau
sprite correspondant à l'âge. Les onglets créatifs et noms FR/EN sont vérifiés.
Le monde est fermé puis rouvert pour comparer les faces et la maturité des
segments réellement cultivés.
**Validation finale avec les nouvelles textures :** `check build assemblePack`
passe en **2 min 43 s**, avec **46 tests serveur requis** réussis : vanille,
agriculture beta.300, recettes, progression et connaissances alimentaires.
Le parcours Vulkan avec Sodium 0.9.2 passe en **50 s**, avec les 64 états,
un seul plan par face et **24 segments identiques après rechargement réel**.
Les captures finales montrent la galerie de troncs et un gros plan des gousses.
Le JAR et les copies packwiz client/serveur sont identiques. Les **376 JSON
agricoles générés**, classes agricoles compilées, quatre nouveaux sprites et
notices sont vérifiés dans l'archive ; le template contient les mêmes sprites.
Les 343 PNG historiques et les 38 sources fournies sont revérifiés octet pour
octet, y compris dans le JAR. SHA-256 de `sanctuary-beta.301.jar` :
```text
14057e91d6d0fa776ffc67543f8c9cd137e71d2c7616311053dd7db3b1a69043
```
Commandes de vérification :
```sh
./gradlew check build assemblePack \
-PsanctuaryFocusedTests=vanilla301,agriculture300,recipes,progression,foodknowledge \
-PsanctuaryAtlasOnly=true
./gradlew :sanctuary:runClientGameTest -PsanctuaryClientTests=true \
-PsanctuaryVanilla301ClientTests=true -PsanctuarySodiumClientTests=true \
-PsanctuaryFocusedTests=vanilla301 -PsanctuaryQuickTests=true \
-PsanctuaryClientGraphicsBackend=vulkan -PsanctuaryClientHeapGb=4 \
-PsanctuaryClientNoVsync=true
```
Journaux et reçus ignorés dans `build/vanilla301-*`, captures et monde de test
dans `mods/sanctuary/build/run/clientGameTest/`, graine **301**. Les tests
graphiques ciblent Vulkan exclusivement.
+80
View File
@@ -0,0 +1,80 @@
# Alimentation — trouver, récolter, replanter
Catalogue **IA-09 / beta.316**, butins révisés en **beta.320**, préparation locale du 30 octobre 2026.
[Planche illustrée des neuf îles](planche.html) · [Contrat de génération](../../foraging-beta316.md).
[Produits du séchoir et 18 recettes culinaires, beta.318](sechoir.md).
[Baratte, crème et beurre, beta.320](laitages.md).
Les emplacements indiquent des **habitats**, pas des coffres garantis à des coordonnées fixes.
Une île peut contenir plusieurs biomes : regarder le sol et la végétation, pas seulement la direction.
Les plantes sauvages apparaissent uniquement à la décoration des **nouveaux chunks Sanctuary**.
Dans les zones déjà explorées, casser à la main les petites herbes/fougères du bon biome
donne parfois directement une semence (1 chance sur 8, puis choix parmi les cultures du climat).
Les tomates, raisins, légumes et herbes se récoltent sur leurs vraies plantes ; ils ne tombent plus de l’herbe.
Les grains de maïs, légumineuses et café sont eux-mêmes leurs semences naturelles ; la menthe donne une bouture.
Carottes, pommes de terre, oignons, ail et couronnes d’ananas se récupèrent sur les plantes sauvages,
ou se multiplient à partir des cultures déjà rapportées, pas dans les petites herbes.
Le blé garde ses graines vanilla. Les cisailles et Toucher de soie préservent le bloc et n'ajoutent pas de récolte.
Les grandes herbes/fougères à deux blocs ne donnent pas ces nouveaux butins : éviter un double paiement.
Pour le riz : herbes marines de jungle/mangrove (1 sur 8). Pour les boutures de vanille : lianes tropicales (1 sur 8).
Pour les arbres : feuilles de chêne/acacia des habitats chauds admissibles (1 sur 40, puis choix de la pousse).
Des chênes/acacias plantés sur place fonctionnent aussi.
Les semences des petites herbes restent renouvelables avec la végétation vanilla ; aucun chunk n'est repeuplé.
**Le climat détermine la découverte.** Une semence rapportée peut être cultivée chez soi,
sans verrou climatique supplémentaire. Le riz garde sa condition eau/boue, la vanille son support en bois.
Les cuissons, fermentations et séchages utilisent les appareils existants ; leurs recettes sont dans JEI.
Le chaudron doit être remué avec un bâton, le moulin est manuel, la cuisinière démarre avec son combustible.
## Les neuf îles
| Île | Habitat | Cultures et produits |
| --- | --- | --- |
| [Nord-Ouest](northwest.md) | Prairies et taïgas | Blé, Carotte, Pomme de terre, Betterave, Fraise, Laitue, Oignon, Ail, Chou, Menthe, Tomate, Maïs, Concombre, Poivron, Haricots secs, Basilic |
| [Nord](north.md) | Vallées boréales et clairières | Blé, Carotte, Pomme de terre, Betterave, Fraise, Laitue, Oignon, Ail, Chou, Menthe |
| [Nord-Est](northeast.md) | Marais frais et jardin pâle | Concombre, Laitue, Chou, Haricots secs, Menthe |
| [Ouest](west.md) | Oasis de l'archipel | Tomate, Maïs, Poivron, Aubergine, Raisin, Basilic, Citron, Olives |
| [Sanctuary](center.md) | Forêts, prairies et sous-bois tempérés | Blé, Carotte, Pomme de terre, Betterave, Fraise, Tomate, Maïs, Concombre, Poivron, Laitue, Oignon, Ail, Chou, Haricots secs, Basilic, Menthe |
| [Est](east.md) | Jungles autour du volcan | Ananas, Riz, Graines de soja, Piment, Cerises de café, Gousse de vanille verte |
| [Sud-Ouest](southwest.md) | Savane, prairie sèche et désert | Maïs, Raisin, Pois chiches, Piment, Coriandre, Olives |
| [Sud](south.md) | Bosquets et berges des canyons | Maïs, Raisin, Pois chiches, Piment, Coriandre, Olives |
| [Sud-Est](southeast.md) | Jungle, mangrove et bambou | Ananas, Riz, Graines de soja, Piment, Cerises de café, Gousse de vanille verte |
## Toutes les cultures et leurs semences
| Récolte | Où chercher | À replanter |
| --- | --- | --- |
| Fraise | Nord-Ouest, Nord, Sanctuary | Graines de fraise |
| Tomate | Nord-Ouest, Ouest, Sanctuary | Graines de tomate |
| Ananas | Est, Sud-Est | Couronne d'ananas |
| Maïs | Nord-Ouest, Ouest, Sanctuary, Sud-Ouest, Sud | Grains de maïs |
| Concombre | Nord-Ouest, Nord-Est, Sanctuary | Graines de concombre |
| Poivron | Nord-Ouest, Ouest, Sanctuary | Graines de poivron |
| Aubergine | Ouest | Graines d'aubergine |
| Laitue | Nord-Ouest, Nord, Nord-Est, Sanctuary | Graines de laitue |
| Oignon | Nord-Ouest, Nord, Sanctuary | Oignon |
| Ail | Nord-Ouest, Nord, Sanctuary | Ail |
| Chou | Nord-Ouest, Nord, Nord-Est, Sanctuary | Graines de chou |
| Raisin | Ouest, Sud-Ouest, Sud | Pépins de raisin |
| Riz | Est, Sud-Est | Riz |
| Graines de soja | Est, Sud-Est | Graines de soja |
| Haricots secs | Nord-Ouest, Nord-Est, Sanctuary | Haricots secs |
| Pois chiches | Sud-Ouest, Sud | Pois chiches |
| Piment | Est, Sud-Ouest, Sud, Sud-Est | Graines de piment |
| Basilic | Nord-Ouest, Ouest, Sanctuary | Graines de basilic |
| Menthe | Nord-Ouest, Nord, Nord-Est, Sanctuary | Bouture de menthe |
| Coriandre | Sud-Ouest, Sud | Graines de coriandre |
| Blé | Nord-Ouest, Nord, Sanctuary | Graines de blé |
| Carotte | Nord-Ouest, Nord, Sanctuary | Carotte |
| Pomme de terre | Nord-Ouest, Nord, Sanctuary | Pomme de terre |
| Betterave | Nord-Ouest, Nord, Sanctuary | Graines de betterave |
| Cerises de café | Est, Sud-Est | Grains de café verts |
| Gousse de vanille verte | Est, Sud-Est | Bouture de vanille |
| Citron | Ouest | Pousse de citronnier |
| Olives | Ouest, Sud-Ouest, Sud | Pousse d'olivier |
## Ingrédients vanilla et transformations
Pommes : feuilles de chêne. Baies sucrées : buissons des taïgas. Baies lumineuses : lianes des cavernes luxuriantes. Champignons : sous-bois et grottes admissibles. Canne à sucre : berges, puis sucre à l’établi. Cacao : cabosses des troncs de jungle. Miel : ruches avec une fiole, feu de camp conseillé. Œufs : poules ; lait : seau sur une vache ; viandes : élevage ou chasse ; poissons : pêche ou capture dans les eaux peuplées. Ces règles natives ne sont pas remplacées.
La farine et la levure alimentent les pâtes ; les récoltes servent aux recettes portées de la 26.2. Fromage, saucisson et vin sont des produits de préparation, pas des plantes à découvrir. Aucun nouveau thé, navet ou fruit absent du catalogue n’est annoncé comme jouable par cette répartition.
+125
View File
@@ -0,0 +1,125 @@
{
"temperate": [
"minecraft:plains",
"minecraft:sunflower_plains",
"minecraft:forest",
"minecraft:birch_forest",
"minecraft:old_growth_birch_forest",
"minecraft:flower_forest",
"minecraft:dark_forest",
"minecraft:dappled_forest",
"minecraft:cherry_grove",
"sanctuary_test:adventure_forest",
"sanctuary_test:adventure_flowers",
"sanctuary_test:adventure_autumn",
"sanctuary_test:adventure_cherry",
"sanctuary_test:adventure_jungle",
"sanctuary_test:adventure_swamp",
"sanctuary_test:adventure_grove",
"sanctuary_test:adventure_lush",
"sanctuary_test:adventure_marsh",
"sanctuary:cavern_bamboo_grove",
"sanctuary:cavern_birch_forest",
"sanctuary:cavern_clearing",
"sanctuary:cavern_dark_grove",
"sanctuary:cavern_dry_woodland",
"sanctuary:cavern_oak_forest",
"sanctuary:cavern_rocky_heath",
"sanctuary:layered_flower_meadow",
"sanctuary:layered_lower_grove",
"sanctuary:layered_meadow",
"sanctuary:layered_mossy_terraces",
"sanctuary:layered_rocky_terraces",
"sanctuary:population_bamboo_grove",
"sanctuary:population_birch_forest",
"sanctuary:population_clearing",
"sanctuary:population_dark_grove",
"sanctuary:population_dry_woodland",
"sanctuary:population_oak_forest",
"sanctuary:population_rocky_heath",
"sanctuary:rift_bamboo_grove",
"sanctuary:rift_birch_forest",
"sanctuary:rift_clearing",
"sanctuary:rift_dark_grove",
"sanctuary:rift_dry_woodland",
"sanctuary:rift_oak_forest",
"sanctuary:rift_rocky_heath",
"sanctuary:starter_forest",
"sanctuary:starter_forest_hydrology",
"sanctuary:temperate_birch_forest",
"sanctuary:temperate_dappled_forest",
"sanctuary:temperate_flower_forest",
"sanctuary:temperate_forest",
"sanctuary:temperate_plains",
"sanctuary:woodland_bamboo_grove",
"sanctuary:woodland_birch_forest",
"sanctuary:woodland_clearing",
"sanctuary:woodland_dark_grove",
"sanctuary:woodland_dry_woodland",
"sanctuary:woodland_oak_forest",
"sanctuary:woodland_rocky_heath"
],
"cool": [
"minecraft:meadow",
"minecraft:taiga",
"minecraft:old_growth_pine_taiga",
"minecraft:old_growth_spruce_taiga",
"minecraft:snowy_taiga",
"minecraft:snowy_plains",
"minecraft:grove",
"minecraft:windswept_hills",
"minecraft:windswept_gravelly_hills",
"minecraft:windswept_forest",
"sanctuary:north_meadow206",
"sanctuary:north_meadow207",
"sanctuary:north_old_growth206",
"sanctuary:north_old_growth207",
"sanctuary:north_snowy_old_growth207",
"sanctuary:north_snowy_plains206",
"sanctuary:north_snowy_plains207",
"sanctuary:north_snowy_taiga207",
"sanctuary:north_taiga206",
"sanctuary:north_taiga207"
],
"wet_cool": [
"minecraft:swamp",
"minecraft:pale_garden",
"sanctuary:diagonal_pale229",
"sanctuary:diagonal_pale230",
"sanctuary:diagonal_swamp226",
"sanctuary:diagonal_swamp229"
],
"warm_dry": [
"minecraft:savanna",
"minecraft:savanna_plateau",
"minecraft:windswept_savanna",
"minecraft:desert",
"minecraft:badlands",
"minecraft:eroded_badlands",
"minecraft:wooded_badlands",
"sanctuary:south_badlands209",
"sanctuary:south_badlands210",
"sanctuary:south_badlands211",
"sanctuary:south_badlands212",
"sanctuary:south_badlands213",
"sanctuary:south_badlands216"
],
"warm": [
"minecraft:beach",
"sanctuary:west_beach218",
"sanctuary:west_oasis218"
],
"tropical": [
"minecraft:jungle",
"minecraft:sparse_jungle",
"minecraft:bamboo_jungle",
"minecraft:mangrove_swamp",
"sanctuary:diagonal_mangrove226",
"sanctuary:east_bamboo223",
"sanctuary:east_bamboo224",
"sanctuary:east_giant_jungle223",
"sanctuary:east_giant_jungle224",
"sanctuary:east_sparse_jungle223",
"sanctuary:east_sparse_jungle224"
]
}
+31
View File
@@ -0,0 +1,31 @@
# Sanctuary — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Forêts, prairies et sous-bois tempérés.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Blé | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de blé. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Carotte | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Carotte. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Pomme de terre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pomme de terre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Betterave | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de betterave. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Fraise | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de fraise. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Tomate | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de tomate. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Maïs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Grains de maïs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Concombre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de concombre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Poivron | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de poivron. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Laitue | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de laitue. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Oignon | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Oignon. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Ail | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Ail. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Chou | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de chou. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Haricots secs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Haricots secs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Basilic | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de basilic. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Menthe | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Bouture de menthe. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
## Ressources vanilla
Pommes des chênes, champignons, miel, œufs, lait, viandes et canne à sucre selon les habitats. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+21
View File
@@ -0,0 +1,21 @@
# Est — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Jungles autour du volcan.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Ananas | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Couronne d'ananas. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Riz | Casser le riz sauvage sur les berges humides ; ou les herbes marines (seagrass) de jungle/mangrove, à la main. | Riz. Planter le grain dans une source d'eau au-dessus de boue. |
| Graines de soja | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de soja. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Piment | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de piment. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Cerises de café | Clic droit sur un caféier mûr ; transformer ses cerises en grains verts. Les herbes tropicales peuvent aussi donner un grain. | Grains de café verts. Planter un grain vert sur terre/herbe ; clic droit à maturité. |
| Gousse de vanille verte | Clic droit pour les gousses mûres ; casser un segment pour une bouture. Les lianes tropicales cassées à la main peuvent aussi donner une bouture. | Bouture de vanille. Poser la bouture contre un tronc ; elle grimpe vers le haut. |
## Ressources vanilla
Cacao sur les troncs de jungle, bambou ; rien dans le cratère. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+52
View File
@@ -0,0 +1,52 @@
# La baratte et les laitages
Préparation **beta.320** (chantier initial beta.319), 30 octobre 2026.
[Retour aux récoltes](README.md) · [Cuisine directe et compatibilité](../../cuisine-beta319.md).
La baratte travaille à froid, sans combustible ni menu. Elle se trouve dans
**Nourriture et boissons**, avec les autres appareils, et ses recettes sont dans JEI.
| Ingrédients | Résultat | Travail |
| --- | --- | --- |
| Un seau de lait | Deux crèmes et le seau vide d’origine | Cinq minutes de jeu, zone chargée |
| Une crème | Un beurre | Huit gestes |
| Une crème et un sucre | Deux crèmes fouettées | Huit gestes |
| Un beurre et une herbe | Un beurre aux herbes | Quatre gestes |
Les herbes fraîches, les herbes séchées et l’assaisonnement aux herbes conviennent.
Le temps de repos s’arrête lorsque la baratte ne reçoit plus de ticks : elle
n’utilise pas les jours réels du vin.
1. Clic droit avec un ingrédient pour en ajouter une unité. Ajouter le sucre
ou les herbes avant de commencer à travailler la préparation.
2. Le lait repose automatiquement. Pour les autres recettes, clic droit à
main vide ou avec un bâton pour actionner la palette. Le HUD indique les
gestes restants. L’attente seule ne produit pas de beurre.
3. Clic droit pour récupérer le résultat. Reprendre aussi le seau vide après
la crème, à main vide ou avec Maj-clic à main vide.
4. Maj-clic à main vide reprend les ingrédients. Cela annule le travail du lot,
dont les ingrédients ne sont consommés qu’à la fin.
Une sortie pleine suspend la préparation. Le contenu et le travail effectué
restent enregistrés après sauvegarde. Un entonnoir placé dessous peut retirer
les produits et les récipients vides ; les ingrédients se mettent à la main.
## Fabrication
À l’établi : un bâton au centre de la première ligne ; deux lingots de fer
autour d’un **tonneau Minecraft** sur la deuxième ; trois dalles de bois sur la
dernière. Le tonneau de fermentation Sanctuary n’est pas requis pour cette fabrication.
## Utiliser les produits
- **Crème** : soupes et veloutés au chaudron, puis fromage avec du sel au tonneau
de fermentation pendant trois minutes de jeu.
- **Beurre** : recettes existantes de pâtisserie et de cuisine.
- **Crème fouettée** : consommable et utilisable à la place de la crème dans
le dessert ananas-vanille aux produits séchés.
- **Beurre aux herbes** : consommable et utilisable à la place du beurre pour
le poisson meunière, le chou poêlé, les haricots à l’ail, les champignons
sautés et les pommes de terre sautées. Les pâtisseries gardent le beurre nature.
Le lait ne devient plus de la crème à l’établi, et le moulin ne fait plus de
beurre. Les ingrédients vont directement dans les appareils pour les plats chauds.
+25
View File
@@ -0,0 +1,25 @@
# Nord — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Vallées boréales et clairières.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Blé | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de blé. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Carotte | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Carotte. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Pomme de terre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pomme de terre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Betterave | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de betterave. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Fraise | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de fraise. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Laitue | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de laitue. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Oignon | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Oignon. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Ail | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Ail. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Chou | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de chou. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Menthe | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Bouture de menthe. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
## Ressources vanilla
Baies sucrées, lapins, saumon dans les eaux peuplées. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+20
View File
@@ -0,0 +1,20 @@
# Nord-Est — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Marais frais et jardin pâle.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Concombre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de concombre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Laitue | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de laitue. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Chou | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de chou. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Haricots secs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Haricots secs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Menthe | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Bouture de menthe. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
## Ressources vanilla
Champignons, poissons dans les eaux peuplées. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+31
View File
@@ -0,0 +1,31 @@
# Nord-Ouest — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Prairies et taïgas.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Blé | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de blé. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Carotte | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Carotte. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Pomme de terre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pomme de terre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Betterave | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de betterave. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Fraise | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de fraise. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Laitue | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de laitue. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Oignon | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Oignon. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Ail | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Ail. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Chou | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de chou. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Menthe | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Bouture de menthe. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Tomate | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de tomate. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Maïs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Grains de maïs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Concombre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de concombre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Poivron | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de poivron. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Haricots secs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Haricots secs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Basilic | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de basilic. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
## Ressources vanilla
Baies sucrées, champignons, lapins. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+116
View File
@@ -0,0 +1,116 @@
# Séchoir — provisions, ingrédients et nouvelles combinaisons
**Beta.318 locale — 30 octobre 2026.** [Guide des récoltes](README.md) · [Contrat et vérifications](../../dried-cuisine-beta318.md).
## Recettes implémentées
Quatre crochets indépendants, un objet par crochet : on peut mélanger quatre aliments différents.
Un ingrédient donne un produit séché. Les durées sont des minutes de jeu à 20 ticks/s,
avec le bloc chargé ; la pluie et l’immersion suspendent le travail. Un toit protège de la pluie.
Les entonnoirs alimentent les crochets libres et retirent uniquement les produits prêts par-dessous.
Les aliments prêts se récupèrent à main vide. Les nouveaux produits rejoignent Nourriture et boissons,
sans nouvel onglet. Les recettes et leurs durées sont visibles dans JEI.
| À suspendre | Résultat | Durée |
| --- | --- | --- |
| Préparation de saucisson | Saucisson séché | 5 min |
| Bœuf cru | Viande séchée | 4 min |
| Côtelette de porc crue | Viande séchée | 4 min |
| Cabillaud cru | Cabillaud séché | 2 min |
| Saumon cru | Saumon séché | 2 min |
| Raisin | Raisins secs | 1 min 30 s |
| Tomate | Tomates séchées | 2 min |
| Piment | Piment séché | 1 min 30 s |
| Basilic | Basilic séché | 1 min |
| Menthe | Menthe séchée | 1 min |
| Coriandre | Coriandre séchée | 1 min |
| Pomme | Pomme séchée | 1 min 30 s |
| Fraise | Fraises séchées | 1 min |
| Ananas | Ananas séché | 2 min |
| Gousse de vanille verte | Gousse de vanille | 3 min |
| Préparation de saucisson pimenté | Saucisson pimenté | 5 min |
Le bœuf et le porc donnent le même objet **Viande séchée**. Cabillaud et saumon donnent
deux produits distincts. L’ananas rend exactement une couronne à la fin du séchage,
pour être replanté. Le produit séché ne rend pas une seconde couronne à sa consommation.
La gousse de vanille garde son identifiant : sa production passe du fumoir au séchoir.
Un ancien fumoir peut donc garder sa gousse verte sans poursuivre ce traitement après la mise à jour.
Les viandes, poissons, raisins secs, tomates et fruits séchés sont comestibles.
Le piment et les trois herbes séchés sont des ingrédients. Le séchage n’ajoute pas de
péremption, de combustible ou de bonification hors ligne.
## Combinaisons déjà utilisables dans la cuisine existante
Les herbes et piments séchés remplacent leur équivalent frais, un pour un,
dans les préparations de cuisine. Les anciennes recettes aux produits frais restent disponibles.
La fabrication des semences à partir des récoltes fraîches reste distincte.
| Plat existant | Ingrédients possibles | Appareil |
| --- | --- | --- |
| Chili de haricots | Haricots secs + Sauce tomate + Piment frais ou séché | Chaudron |
| Ragoût de pois chiches | Pois chiches + Sauce tomate + Coriandre fraîche ou séchée + Piment frais ou séché | Chaudron |
| Infusion de menthe | Menthe fraîche ou séchée + Fiole d’eau | Chaudron |
| Sauce tomate | Pulpe de tomate + Sel + Basilic frais ou séché | Chaudron |
| Sauce piquante | Pulpe de tomate + Piment frais ou séché + Vinaigre | Tonneau |
| Kimchi | Chou + Sel + Piment frais ou séché | Tonneau |
| Pizza margherita | Pâte crue + Sauce tomate + Fromage + Basilic frais ou séché | Cuisinière |
| Curry de pois chiches | Pois chiches + Sauce tomate + Piment frais ou séché + Coriandre fraîche ou séchée | Poêle |
| Omelette aux herbes | Œuf + Seau de lait + Basilic, menthe ou coriandre, frais ou séchés | Poêle |
| Émincé de mouton épicé | Mouton cru + Oignon + Piment frais ou séché + Coriandre fraîche ou séchée | Poêle |
| Poulet tomate-basilic | Poulet cru + Tomate + Basilic frais ou séché | Poêle |
La vanille séchée conserve aussi sa transformation existante au moulin en poudre de vanille.
## Les 18 nouvelles recettes implémentées
Toutes ces recettes sont jouables dans la beta.318 locale. Chaque ingrédient indiqué
est payé une fois par lot. Les récipients figurent dans la liste ; ils reviennent une fois
à la consommation. Le chaudron demande une dose d’eau par portion, de la chaleur et
un coup de bâton pour choisir la préparation ; il conserve ensuite sa recette pour le réassort.
Le moulin reste manuel, sans combustible. La cuisinière utilise son combustible habituel.
| Recette | Ingrédients complets | Appareil | Durée | Quantité |
| --- | --- | --- | --- | --- |
| Pain aux raisins | Pâte crue + Raisins secs | Cuisinière | 12 s | 1 |
| Brioche vanillée aux raisins | Pâte crue + Raisins secs + Poudre de vanille + Beurre | Cuisinière | 16 s | 1 |
| Biscuits aux fruits secs | Farine de blé + Pomme séchée + Fraises séchées + Beurre | Cuisinière | 12 s | 4 |
| Pain aux tomates et basilic | Pâte crue + Tomates séchées + Basilic séché | Cuisinière | 14 s | 1 |
| Sandwich du voyageur | Pain + Viande séchée + Tomates séchées + Laitue | Établi | Immédiat, manuel | 1 |
| Sandwich au cabillaud séché | Pain + Cabillaud séché + Concombre + Citron | Établi | Immédiat, manuel | 1 |
| Riz au saumon séché | Riz + Saumon séché + Coriandre séchée + Bol + Fiole d’eau | Chaudron | 14 s | 1 |
| Ragoût du voyageur | Viande séchée + Pomme de terre + Carotte + Basilic séché + Bol + Fiole d’eau | Chaudron | 18 s | 1 |
| Soupe de poisson séché | Cabillaud séché + Saumon séché + Oignon + Coriandre séchée + Bol + Fiole d’eau | Chaudron | 16 s | 1 |
| Haricots à la viande séchée | Haricots secs + Viande séchée + Tomates séchées + Piment séché ou poudre de piment + Bol + Fiole d’eau | Chaudron | 18 s | 1 |
| Salade de pois chiches aux tomates séchées | Pois chiches + Tomates séchées + Huile d'olive + Basilic séché + Bol | Établi | Immédiat, manuel | 1 |
| Tomates marinées aux herbes | Tomates séchées + Huile d'olive + Ail + Basilic séché + Bol | Établi | Immédiat, manuel | 1 |
| Mélange de fruits secs | Raisins secs + Pomme séchée + Fraises séchées + Ananas séché | Établi | Immédiat, manuel | 1 |
| Infusion pomme-menthe | Pomme séchée + Menthe séchée + Fiole de miel + Fiole vide + Fiole d’eau | Chaudron | 11 s | 1 |
| Dessert ananas-vanille | Ananas séché + Poudre de vanille + Crème + Bol | Établi | Immédiat, manuel | 1 |
| Saucisson pimenté | Préparation de saucisson pimenté | Séchoir | 5 min | 1 |
| Poudre de piment | Piment séché | Moulin | Immédiat, manuel | 2 |
| Assaisonnement aux herbes | Basilic séché + Coriandre séchée + Sel | Établi | Immédiat, manuel | 2 |
**Préparation supplémentaire du saucisson pimenté :** à l’établi, une préparation de
saucisson + un piment séché (ou une poudre de piment) + une coriandre séchée donnent
une préparation pimentée. Elle sèche ensuite cinq minutes. Le résultat se pose et
se partage en quatre tranches, comme le saucisson nature. Ce sont donc **19 transformations
pour les 18 nouveaux résultats**.
La poudre de piment remplace aussi le piment dans les anciennes recettes de cuisine
et l’assaisonnement remplace les herbes dans l’omelette. L’eau du chaudron peut venir
d’une fiole d’eau ou de sa réserve ; les potions à effets sont refusées.
## Quand ça pique
Manger un plat épicé donne deux petites réactions visuelles et sonores de coup reçu,
espacées de huit ticks (0,4 seconde). Cela ne retire aucun cœur, ne consomme aucune
absorption et ne déplace pas le joueur. Les plats doux ne déclenchent pas cet effet.
Le saucisson pimenté le déclenche aussi à chaque tranche réellement mangée.
## Graphismes
Les nouveaux plats utilisent les sprites existants avec une teinte native ; les saucissons
réutilisent leurs modèles cubiques avec des couleurs distinctes
pour distinguer les préparations. Les PNG d’origine restent intacts ; ces dessins
peuvent recevoir des textures dédiées dans un prochain travail graphique.
+21
View File
@@ -0,0 +1,21 @@
# Sud — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Bosquets et berges des canyons.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Maïs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Grains de maïs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Raisin | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pépins de raisin. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Pois chiches | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pois chiches. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Piment | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de piment. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Coriandre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de coriandre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Olives | Clic droit sur les feuilles avec fruits. Casser les feuilles pour une pousse ; les feuilles de chêne/acacia du climat correspondant peuvent aussi donner une pousse. | Pousse d'olivier. Planter la pousse sur terre/herbe ; attendre l'arbre. |
## Ressources vanilla
Lapins ; les cultures ne poussent pas sur la terre cuite nue. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+21
View File
@@ -0,0 +1,21 @@
# Sud-Est — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Jungle, mangrove et bambou.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Ananas | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Couronne d'ananas. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Riz | Casser le riz sauvage sur les berges humides ; ou les herbes marines (seagrass) de jungle/mangrove, à la main. | Riz. Planter le grain dans une source d'eau au-dessus de boue. |
| Graines de soja | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de soja. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Piment | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de piment. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Cerises de café | Clic droit sur un caféier mûr ; transformer ses cerises en grains verts. Les herbes tropicales peuvent aussi donner un grain. | Grains de café verts. Planter un grain vert sur terre/herbe ; clic droit à maturité. |
| Gousse de vanille verte | Clic droit pour les gousses mûres ; casser un segment pour une bouture. Les lianes tropicales cassées à la main peuvent aussi donner une bouture. | Bouture de vanille. Poser la bouture contre un tronc ; elle grimpe vers le haut. |
## Ressources vanilla
Cacao, pastèques et bambou selon la végétation native. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+21
View File
@@ -0,0 +1,21 @@
# Sud-Ouest — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Savane, prairie sèche et désert.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Maïs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Grains de maïs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Raisin | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pépins de raisin. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Pois chiches | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pois chiches. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Piment | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de piment. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Coriandre | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de coriandre. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Olives | Clic droit sur les feuilles avec fruits. Casser les feuilles pour une pousse ; les feuilles de chêne/acacia du climat correspondant peuvent aussi donner une pousse. | Pousse d'olivier. Planter la pousse sur terre/herbe ; attendre l'arbre. |
## Ressources vanilla
Lapins du désert ; chercher les sols vivants et les berges. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+23
View File
@@ -0,0 +1,23 @@
# Ouest — cueillette et agriculture
[Retour au guide](README.md) · [Planche](planche.html)
Oasis de l'archipel.
| Aliment | Première récolte | À rapporter / replanter |
| --- | --- | --- |
| Tomate | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de tomate. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Maïs | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Grains de maïs. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Poivron | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de poivron. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Aubergine | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines d'aubergine. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Raisin | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Pépins de raisin. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Basilic | Casser la plante sauvage ; rapporter sa récolte et sa semence. | Graines de basilic. Planter sur terre labourée. Les récoltes se multiplient selon les règles de leur culture. |
| Citron | Clic droit sur les feuilles avec fruits. Casser les feuilles pour une pousse ; les feuilles de chêne/acacia du climat correspondant peuvent aussi donner une pousse. | Pousse de citronnier. Planter la pousse sur terre/herbe ; attendre l'arbre. |
| Olives | Clic droit sur les feuilles avec fruits. Casser les feuilles pour une pousse ; les feuilles de chêne/acacia du climat correspondant peuvent aussi donner une pousse. | Pousse d'olivier. Planter la pousse sur terre/herbe ; attendre l'arbre. |
## Ressources vanilla
Poissons de mer, algues, canne à sucre sur les berges. Présence selon les habitats et la génération native, sans garantie sur chaque île.
Les plantes sauvages donnent des ingrédients et des semences, jamais directement des plats cuisinés.
Les petites herbes de ce climat donnent certaines semences dans les zones déjà explorées ; racines, bulbes et couronnes proviennent des plantes sauvages : voir les chances et outils dans le [guide](README.md).
+2 -2
View File
@@ -9,8 +9,8 @@ loom_version=1.17.20
fabric_api_version=0.160.5+26.3
# Release counter: beta.001, .002, .003, ... (see docs/versioning.md).
mod_version=beta.296
pack_version=beta.296
mod_version=beta.321
pack_version=beta.321
resource_pack_version=beta.121
maven_group=fr.koka.sanctuary
jei_version=30.32.0-sanctuary.4
@@ -41,6 +41,10 @@ public final class AnchorProbe {
}
case "unindex"->{var a=(AnchorBlockEntity)level.getBlockEntity(POS);Anchors.unindex(a);assertions.addProperty("index_removed",Anchors.loaded(level).isEmpty());}
case "near"->move(p,-3.5,81,4);
case "camera"->{
var v=ctl.getAsJsonArray("camera_a");p.setNoGravity(true);
move(p,v.get(0).getAsDouble(),v.get(1).getAsDouble(),v.get(2).getAsDouble());
}
case "wall"->{for(var q:BlockPos.betweenClosed(-6,81,6,6,86,6))level.setBlockAndUpdate(q,Blocks.STONE.defaultBlockState());}
case "clear-wall"->{for(var q:BlockPos.betweenClosed(-6,81,6,6,86,6))level.setBlockAndUpdate(q,Blocks.AIR.defaultBlockState());}
case "remove-support"->level.setBlockAndUpdate(new BlockPos(2,84,0),Blocks.AIR.defaultBlockState());
@@ -66,6 +70,7 @@ public final class AnchorProbe {
if(a!=null){row.addProperty("width",a.width);row.addProperty("height",a.height);row.addProperty("revision",a.revision);row.addProperty("display",String.valueOf(a.display));var d=com.dreamdisplays.api.server.DreamDisplaysServer.display(a.display);if(d!=null){row.addProperty("url",d.getUrl());row.addProperty("mode",d.getMode().name());}}
row.addProperty("anchor",a!=null);
if(p!=null){int n=0;for(int i=0;i<p.getInventory().getContainerSize();i++){var st=p.getInventory().getItem(i);if(st.is(Anchors.ITEM))n+=st.getCount();}row.addProperty("frames_in_inventory",n);}
if(p!=null)row.addProperty("crouching",p.isShiftKeyDown());
int drops=level.getEntitiesOfClass(ItemEntity.class,new AABB(-6,80,-1,6,87,5)).stream().filter(e->e.getItem().is(Anchors.ITEM)).mapToInt(e->e.getItem().getCount()).sum();row.addProperty("frame_drops",drops);
row.addProperty("displays",com.dreamdisplays.api.server.DreamDisplaysServer.isAvailable()?com.dreamdisplays.api.server.DreamDisplaysServer.getDisplays().getSize():-1);
Probe.write(Probe.LAB.resolve("anchor-server.jsonl"),row);
@@ -20,6 +20,11 @@ public final class AnchorProbeClient {
public static void tick(Minecraft mc){
if(mc.player==null||mc.level==null)return;
var ctl=Probe.control();String who=System.getProperty("sanctuary.mediaClient");
if(ctl.has("shaders_enabled")&&fr.koka.sanctuary.client.shader.VanillaLight.enabled()!=ctl.get("shaders_enabled").getAsBoolean())
fr.koka.sanctuary.client.shader.VanillaLight.setEnabled(ctl.get("shaders_enabled").getAsBoolean());
if(ctl.has("pbr_enabled")&&fr.koka.sanctuary.client.shader.VanillaLight.pbr()!=ctl.get("pbr_enabled").getAsBoolean())
fr.koka.sanctuary.client.shader.VanillaLight.setPbr(ctl.get("pbr_enabled").getAsBoolean());
if(ctl.has("hide_gui")&&mc.gui.hud.isHidden()!=ctl.get("hide_gui").getAsBoolean())mc.gui.hud.toggle();
boolean a=who.endsWith("a");
Vec3 aim=a?new Vec3(-3.5,81.5,.5):new Vec3(0,83,1);
if(ctl.has(a?"aim_a":"aim_b")){var xs=ctl.getAsJsonArray(a?"aim_a":"aim_b");aim=new Vec3(xs.get(0).getAsDouble(),xs.get(1).getAsDouble(),xs.get(2).getAsDouble());}
@@ -32,6 +37,7 @@ public final class AnchorProbeClient {
net.minecraft.client.Screenshot.grab(mc.gameDirectory,"anchor-"+Probe.phase+".png",mc.gameRenderer.mainRenderTarget(),1,m->{});captured=Probe.phase;
}
var row=new JsonObject();row.addProperty("step",done);row.addProperty("screen",mc.gui.screen()==null?"":mc.gui.screen().getClass().getSimpleName());
if(ctl.has("inspect_anchor_model"))inspectModel(mc,row);
var target=Anchors.target(mc.level,mc.player);row.addProperty("target",target!=null);if(target!=null)row.addProperty("distance",target.distance());
if(mc.gui.screen() instanceof AnchorScreen screen){var v=screen.snapshot();row.addProperty("settings",v.settings());row.addProperty("editable",v.editable());row.addProperty("message",v.message());row.addProperty("width",v.width());row.addProperty("height",v.height());}
else if(mc.gui.screen()!=null&&mc.gui.screen().getClass().getSimpleName().equals("DisplayMenu")){
@@ -39,11 +45,34 @@ public final class AnchorProbeClient {
}
Probe.write(Probe.LAB.resolve("anchor-"+who+".jsonl"),row);
}
private static void inspectModel(Minecraft mc,JsonObject row){
var state=mc.level.getBlockState(AnchorProbe.POS);
if(!state.is(Anchors.BLOCK))return;
var parts=new java.util.ArrayList<net.minecraft.client.renderer.block.dispatch.BlockStateModelPart>();
mc.getModelManager().getBlockStateModelSet().get(state).collectParts(net.minecraft.util.RandomSource.create(0),parts);
int quads=0;for(var part:parts)for(int f=0;f<7;f++)quads+=part.getQuads(f==6?null:Direction.values()[f]).size();
row.addProperty("anchor_model_quads",quads);row.addProperty("anchor_render_shape",state.getRenderShape().name());
row.addProperty("shaders_active",fr.koka.sanctuary.client.shader.VanillaLight.active());
row.addProperty("pbr_enabled",fr.koka.sanctuary.client.shader.VanillaLight.pbr());
try{
var pbr=fr.koka.sanctuary.client.shader.ProceduralPbr.class.getDeclaredMethod("applied");pbr.setAccessible(true);
row.addProperty("pbr_applied",(boolean)pbr.invoke(null));
var type=Class.forName("fr.koka.sanctuary.client.shader.PbrTerrain");var ctor=type.getDeclaredConstructor(boolean.class);ctor.setAccessible(true);
var candidate=type.getDeclaredMethod("candidate",net.minecraft.world.level.block.state.BlockState.class);candidate.setAccessible(true);
for(boolean transparent:new boolean[]{false,true})try(var terrain=(AutoCloseable)ctor.newInstance(transparent)){
row.addProperty(transparent?"anchor_pbr_transparent":"anchor_pbr_opaque",(boolean)candidate.invoke(terrain,state));
row.addProperty(transparent?"water_pbr_transparent":"water_pbr_opaque",(boolean)candidate.invoke(terrain,net.minecraft.world.level.block.Blocks.WATER.defaultBlockState()));
row.addProperty(transparent?"glass_pbr_transparent":"wood_pbr_opaque",(boolean)candidate.invoke(terrain,(transparent?net.minecraft.world.level.block.Blocks.GLASS:net.minecraft.world.level.block.Blocks.OAK_PLANKS).defaultBlockState()));
}
}catch(Exception e){throw new IllegalStateException(e);}
}
private static boolean perform(Minecraft mc,String step,JsonObject ctl){
if(step.equals("place")){
mc.gameMode.useItemOn(mc.player,InteractionHand.MAIN_HAND,new BlockHitResult(new Vec3(-3.5,81.5,1),Direction.SOUTH,new BlockPos(-4,81,0),false));return true;
}
if(step.equals("close")){mc.gui.setScreen(null);return true;}
if(step.equals("shift-hold")){mc.gui.setScreen(null);mc.options.keyShift.setDown(true);return true;}
if(step.equals("shift-release")){mc.options.keyShift.setDown(false);return true;}
if(step.equals("unindex")){for(var a:Anchors.loaded(mc.level))Anchors.unindex(a);return true;}
if(step.equals("click")){mc.gui.setScreen(null);Access.privateCall(mc,"startUseItem");return true;}
if(step.equals("forged-open")){
+4 -4
View File
@@ -1,6 +1,6 @@
# Sanctuary Media — prototypes MEDIA-03/04
Module **0.3.0**, embarqué dans Sanctuary depuis **beta.296**,
Module **0.3.1**, embarqué dans Sanctuary depuis **beta.296**,
pour Dream Displays **1.10.4** sur Minecraft **26.3 / Java 25 / Fabric**.
Les clients décodent les médias ; le serveur fournit l'heure et garde l'état
partagé ainsi que la validation des constructions.
@@ -9,9 +9,9 @@ Compatibilité acoustique vérifiée avec Sound Physics Remastered **1.5.1+26.3*
L'extension conserve le moteur et le **menu original Dream Displays** pour la
recherche, le collage d'un lien, l'aperçu, la lecture, les pistes et les réglages.
Elle ajoute le cadre de redstone comme ancre : un objet à la pose, aucun coût
d'agrandissement, contour dessiné sur toute la surface. Maj + clic droit près
de l'ancre ou bouton Taille du menu natif ouvre le seul écran ajouté : largeur
et hauteur, formats rapides facultatifs et aperçu du ratio.
d'agrandissement, cadre en volume sur toute la surface. Le menu largeur/hauteur
s'ouvre à la pose, puis via le bouton Taille du lecteur. Clic droit et Maj +
clic droit ouvrent le lecteur. [Correctif et validation beta.297](../../docs/media-frame-fixes-beta297.md).
Les dimensions sont libres en blocs entiers. Les budgets du serveur sont dans
`config/sanctuary-media-anchors.json` (`maxWidth`, `maxHeight`, `maxArea`) ; une
+1 -1
View File
@@ -1,7 +1,7 @@
plugins { id 'java-library' }
group = rootProject.maven_group
version = '0.3.0'
version = '0.3.2'
base { archivesName = 'sanctuary-media' }
evaluationDependsOn(':sanctuary')
@@ -28,9 +28,10 @@ public final class AnchorBlock extends BaseEntityBlock {
};
}
@Override protected VoxelShape getCollisionShape(BlockState s,BlockGetter l,BlockPos p,CollisionContext c){return Shapes.empty();}
@Override protected VoxelShape getOcclusionShape(BlockState s){return Shapes.empty();}
@Override protected InteractionResult useWithoutItem(BlockState s,Level l,BlockPos pos,Player p,BlockHitResult hit){
if(p instanceof net.minecraft.server.level.ServerPlayer sp&&l.getBlockEntity(pos) instanceof AnchorBlockEntity a)
Anchors.open(sp,a,p.isShiftKeyDown());
Anchors.open(sp,a,false);
return InteractionResult.SUCCESS;
}
@Override protected InteractionResult useItemOn(ItemStack stack,BlockState s,Level l,BlockPos pos,Player p,InteractionHand hand,BlockHitResult hit){return useWithoutItem(s,l,pos,p,hit);}
@@ -29,7 +29,7 @@ public final class AnchorClient {
var hit=Anchors.target(mc.level,mc.player);
if(hit==null)return false;
var a=hit.info();
ClientPlayNetworking.send(new AnchorPackets.Action(a.geometry().anchor(),a.display(),mc.player.isShiftKeyDown()?6:0,0,0,a.revision(),"",0));
ClientPlayNetworking.send(new AnchorPackets.Action(a.geometry().anchor(),a.display(),0,0,0,a.revision(),"",0));
return true;
}
public static void openReader(UUID id){
@@ -0,0 +1,60 @@
package fr.koka.media.anchor;
import java.util.*;
import net.minecraft.world.phys.Vec3;
/** A closed wooden ring, in block units, flush to the wall and exactly inside the screen bounds. */
public final class AnchorFrameMesh {
public static final double THICKNESS=1.0/16;
public record Vertex(double u,double v,double depth){}
public record Face(Vertex a,Vertex b,Vertex c,Vertex d,int color){
public List<Vertex> vertices(){return List.of(a,b,c,d);}
}
public final int width,height;
public final List<Face> faces;
public AnchorFrameMesh(int width,int height){
if(width<1||height<1)throw new IllegalArgumentException("Invalid frame size");
this.width=width;this.height=height;
var result=new ArrayList<Face>();double t=THICKNESS,w=width,h=height;
for(double z:new double[]{t,0}){
boolean back=z==0;
rect(result,0,0,w,t,z,0x77512f,back);
rect(result,0,h-t,w,h,z,0xa47a48,back);
rect(result,0,t,t,h-t,z,0x90653a,back);
rect(result,w-t,t,w,h-t,z,0x694426,back);
}
// Outer sides, with outward winding.
side(result,0,0,w,0,0x684628);
side(result,w,0,w,h,0x795330);
side(result,w,h,0,h,0x9a7141);
side(result,0,h,0,0,0x876038);
// Inner reveal faces point into the opening around the recessed video.
side(result,w-t,t,t,t,0x51351e);
side(result,w-t,h-t,w-t,t,0x51351e);
side(result,t,h-t,w-t,h-t,0x684628);
side(result,t,t,t,h-t,0x684628);
faces=List.copyOf(result);
}
private static void rect(List<Face> out,double x0,double y0,double x1,double y1,double z,int color,boolean back){
var a=new Vertex(x0,y0,z);var b=new Vertex(x1,y0,z);var c=new Vertex(x1,y1,z);var d=new Vertex(x0,y1,z);
out.add(back?new Face(d,c,b,a,color):new Face(a,b,c,d,color));
}
private static void side(List<Face> out,double x0,double y0,double x1,double y1,int color){
out.add(new Face(new Vertex(x0,y0,0),new Vertex(x1,y1,0),new Vertex(x1,y1,THICKNESS),new Vertex(x0,y0,THICKNESS),color));
}
public static Vec3 world(AnchorGeometry g,Vertex v){
var n=g.facing();var right=g.right();
return Vec3.atCenterOf(g.wall()).add(n.getStepX()*(.5+v.depth),v.v-.5,n.getStepZ()*(.5+v.depth))
.add(right.getStepX()*(v.u-.5),0,right.getStepZ()*(v.u-.5));
}
/** Behind the raised rim, an observer outside the opening cannot see any part of the panel. */
public static boolean videoVisible(AnchorGeometry g,Vec3 eye,double videoClearance){
var n=g.facing();var wall=Vec3.atCenterOf(g.wall());
double outward=(eye.x-wall.x)*n.getStepX()+(eye.z-wall.z)*n.getStepZ()-.5;
if(outward<videoClearance)return false;
if(outward>=THICKNESS)return true;
var right=g.right();double u=(eye.x-wall.x)*right.getStepX()+(eye.z-wall.z)*right.getStepZ()+.5;
double v=eye.y-wall.y+.5;
return u>=THICKNESS&&u<=g.width()-THICKNESS&&v>=THICKNESS&&v<=g.height()-THICKNESS;
}
}
@@ -32,7 +32,7 @@ public final class AnchorScreen extends Screen {
g.centeredText(font,title,width/2,top+3,0xffffffff);g.centeredText(font,Anchors.label("one_frame"),width/2,top+18,0xffc3d4e4);
g.text(font,Anchors.label("width"),left+10,top+33,0xffffffff);g.text(font,Anchors.label("height"),left+112,top+33,0xffffffff);
int w=number(widthBox),h=number(heightBox);boolean valid=w>0&&h>0;
if(valid){double scale=Math.min((panelWidth-60.0)/w,42.0/h);int sw=Math.max(1,(int)(w*scale)),sh=Math.max(1,(int)(h*scale));int x=left+(panelWidth-sw)/2,y=top+99+(42-sh)/2;g.fill(x,y,x+sw,y+sh,0xff223a4b);g.outline(x,y,sw,sh,0xff87c8df);g.fill(x,y+sh-4,x+4,y+sh,0xffff3535);}
if(valid){double scale=Math.min((panelWidth-60.0)/w,42.0/h);int sw=Math.max(1,(int)(w*scale)),sh=Math.max(1,(int)(h*scale));int x=left+(panelWidth-sw)/2,y=top+99+(42-sh)/2;g.fill(x,y,x+sw,y+sh,0xff223a4b);g.outline(x,y,sw,sh,0xff87c8df);}
g.centeredText(font,Anchors.label("free_dimensions"),width/2,top+144,valid?0xffa5b6c7:0xffff7b7b);
if(!view.message().isEmpty())g.centeredText(font,Anchors.label(view.message()),width/2,top+180,0xffff8c8c);
}
@@ -161,7 +161,7 @@ public final class Anchors {
return;
}
if(!(p.level().getBlockEntity(m.pos()) instanceof AnchorBlockEntity a)||!Objects.equals(a.display,m.display()))return;
if(m.action()==0){open(p,a,p.isShiftKeyDown());return;}
if(m.action()==0){open(p,a,false);return;}
boolean edit=near(p,a)&&canBuild(p,a.getBlockPos());String error="";
if(m.action()==6){AnchorPackets.view(p,a,edit,edit?"":"protected");return;}
if(m.action()==1){
@@ -1,41 +1,56 @@
package fr.koka.media.mixin;
import fr.koka.media.anchor.Anchors;
import fr.koka.media.anchor.*;
import java.util.*;
import com.dreamdisplays.platform.client.displays.DisplayScreen;
import com.dreamdisplays.platform.client.render.*;
import com.dreamdisplays.libs.kotlin.Unit;
import com.dreamdisplays.libs.kotlin.jvm.functions.Function2;
import com.mojang.blaze3d.vertex.*;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.rendertype.RenderType;
import net.minecraft.world.phys.Vec3;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/** The same pose, visibility and Vulkan draw path as the video, with constant block-space thickness. */
/** Block-space ring using Dream's Vulkan draw path; its video transform deliberately flattens Z. */
@Mixin(targets="com.dreamdisplays.platform.client.render.ScreenRenderer",remap=false)
abstract class AnchorBorderMixin {
@Unique private Vec3 media$eye=Vec3.ZERO;
@Unique private final Map<DisplayScreen,AnchorFrameMesh> media$meshes=new WeakHashMap<>();
@Inject(method="render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/Camera;ZLcom/dreamdisplays/libs/kotlin/jvm/functions/Function2;)V",at=@At("HEAD"),remap=false)
private void media$camera(PoseStack stack,Camera camera,boolean replay,@Coerce Object renderer,CallbackInfo ci){media$eye=camera.position();}
@Redirect(method="render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/Camera;ZLcom/dreamdisplays/libs/kotlin/jvm/functions/Function2;)V",
at=@At(value="INVOKE",target="Lcom/dreamdisplays/platform/client/displays/DisplayScreen;getHasTexture()Z"),remap=false)
private boolean media$blankScreen(DisplayScreen s){return s.getHasTexture()||s.getCustomData().containsKey(Anchors.MARKER);}
@SuppressWarnings("unchecked")
@Inject(method="renderScreenTexture",at=@At("HEAD"),cancellable=true,remap=false)
private void media$back(DisplayScreen screen,PoseStack stack,boolean replay,@Coerce Object renderer,CallbackInfo ci){
var info=AnchorInfo.decode(screen.getUuid(),screen.getCustomData().get(Anchors.MARKER));
if(info!=null&&!AnchorFrameMesh.videoVisible(info.geometry(),media$eye,DisplayPoseStack.INSTANCE.surfaceClearance()+(replay?.01:0))){
if(!replay)screen.fitTextureWhileHidden();
media$draw(screen,stack,renderer,info.geometry());ci.cancel();
}
}
@Inject(method="renderScreenTexture",at=@At("TAIL"),remap=false)
private void media$border(DisplayScreen screen,PoseStack stack,boolean replay,@Coerce Object renderer,CallbackInfo ci){
if(!screen.getCustomData().containsKey(Anchors.MARKER))return;
private void media$front(DisplayScreen screen,PoseStack stack,boolean replay,@Coerce Object renderer,CallbackInfo ci){
var info=AnchorInfo.decode(screen.getUuid(),screen.getCustomData().get(Anchors.MARKER));
if(info!=null)media$draw(screen,stack,renderer,info.geometry());
}
@Unique @SuppressWarnings("unchecked")
private void media$draw(DisplayScreen screen,PoseStack stack,Object renderer,AnchorGeometry geometry){
var mesh=media$meshes.get(screen);
if(mesh==null||mesh.width!=geometry.width()||mesh.height!=geometry.height()){
mesh=new AnchorFrameMesh(geometry.width(),geometry.height());media$meshes.put(screen,mesh);
}
var frame=mesh;var origin=Vec3.atLowerCornerOf(screen.getPos());
var draw=(Function2<RenderType,Function2<PoseStack.Pose,VertexConsumer,Unit>,Unit>)renderer;
stack.pushPose();
DisplayPoseStack.INSTANCE.liftTowardViewer(stack,screen.getFacing(),replay?.025f:.015f);
DisplayPoseStack.INSTANCE.applyScreenTransform(stack,screen.getFacing(),screen.getWidth(),screen.getHeight());
float x=1f/(16*screen.getWidth()),y=1f/(16*screen.getHeight());
draw.invoke(DisplayYuvRenderTypes.INSTANCE.solidColorType(),(pose,v)->{
media$rect(pose,v,0,0,1,y,100,69,39);media$rect(pose,v,0,1-y,1,1,151,115,65);
media$rect(pose,v,0,y,x,1-y,127,90,49);media$rect(pose,v,1-x,y,1,1-y,80,51,27);
media$rect(pose,v,x,y,x*2,y*2,184,19,13);
for(var face:frame.faces)for(var vertex:face.vertices()){
var p=AnchorFrameMesh.world(geometry,vertex).subtract(origin);int c=face.color();
v.addVertex(pose,(float)p.x,(float)p.y,(float)p.z).setUv(0,0).setColor((c>>16)&255,(c>>8)&255,c&255,255);
}
return Unit.INSTANCE;
});
stack.popPose();
}
@Unique private static void media$rect(PoseStack.Pose p,VertexConsumer v,float x0,float y0,float x1,float y1,int r,int g,int b){
v.addVertex(p,x0,y0,0).setUv(0,0).setColor(r,g,b,255);v.addVertex(p,x1,y0,0).setUv(0,0).setColor(r,g,b,255);
v.addVertex(p,x1,y1,0).setUv(0,0).setColor(r,g,b,255);v.addVertex(p,x0,y1,0).setUv(0,0).setColor(r,g,b,255);
}
}
@@ -0,0 +1,22 @@
package fr.koka.media.mixin;
import fr.koka.media.anchor.Anchors;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.*;
import net.minecraft.client.renderer.rendertype.RenderType;
import net.minecraft.client.renderer.state.level.BlockOutlineRenderState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
/** The invisible 1x1 anchor must not leave its vanilla selection rectangle inside the large screen. */
@Mixin(LevelRenderer.class)
abstract class AnchorOutlineMixin {
@Inject(method="submitHitOutline",at=@At("HEAD"),cancellable=true)
private void media$outline(PoseStack pose,SubmitNodeCollector collector,RenderType type,BlockOutlineRenderState state,
int color,float width,boolean translucent,CallbackInfo ci){
var level=Minecraft.getInstance().level;
if(level!=null&&level.getBlockState(state.pos()).is(Anchors.BLOCK))ci.cancel();
}
}
@@ -1,170 +1,7 @@
{
"ambientocclusion": false,
"textures": {
"particle": "minecraft:block/oak_planks",
"wood": "minecraft:block/oak_planks",
"redstone": "minecraft:block/redstone_block"
"particle": "minecraft:block/oak_planks"
},
"elements": [
{
"from": [
0,
0,
0
],
"to": [
16,
1,
1
],
"faces": {
"north": {
"texture": "#wood"
},
"south": {
"texture": "#wood"
},
"east": {
"texture": "#wood"
},
"west": {
"texture": "#wood"
},
"up": {
"texture": "#wood"
},
"down": {
"texture": "#wood"
}
}
},
{
"from": [
0,
15,
0
],
"to": [
16,
16,
1
],
"faces": {
"north": {
"texture": "#wood"
},
"south": {
"texture": "#wood"
},
"east": {
"texture": "#wood"
},
"west": {
"texture": "#wood"
},
"up": {
"texture": "#wood"
},
"down": {
"texture": "#wood"
}
}
},
{
"from": [
0,
1,
0
],
"to": [
1,
15,
1
],
"faces": {
"north": {
"texture": "#wood"
},
"south": {
"texture": "#wood"
},
"east": {
"texture": "#wood"
},
"west": {
"texture": "#wood"
},
"up": {
"texture": "#wood"
},
"down": {
"texture": "#wood"
}
}
},
{
"from": [
15,
1,
0
],
"to": [
16,
15,
1
],
"faces": {
"north": {
"texture": "#wood"
},
"south": {
"texture": "#wood"
},
"east": {
"texture": "#wood"
},
"west": {
"texture": "#wood"
},
"up": {
"texture": "#wood"
},
"down": {
"texture": "#wood"
}
}
},
{
"from": [
1,
1,
0
],
"to": [
3,
3,
2
],
"faces": {
"north": {
"texture": "#redstone"
},
"south": {
"texture": "#redstone"
},
"east": {
"texture": "#redstone"
},
"west": {
"texture": "#redstone"
},
"up": {
"texture": "#redstone"
},
"down": {
"texture": "#redstone"
}
}
}
]
"elements": []
}
@@ -1,7 +1,7 @@
{
"schemaVersion": 1,
"id": "sanctuary_media",
"version": "0.3.0",
"version": "0.3.2",
"name": "Sanctuary Media",
"license": "GPL-3.0-or-later",
"environment": "*",

Some files were not shown because too many files have changed in this diff Show More