Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
fb8705369e | ||
|
|
c3d1443732 | ||
|
|
1967342247 | ||
|
|
89db24d7c2 |
@@ -1,7 +1,7 @@
|
||||
# Sanctuary
|
||||
|
||||
[Dernière release : beta.296](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.296) ·
|
||||
[Reçu de livraison](docs/release-beta296.md) ·
|
||||
[Dernière release : beta.297](https://git.botsu.net/koka/sanctuary-beta/releases/tag/beta.297) ·
|
||||
[Reçu de livraison](docs/release-beta297.md) ·
|
||||
[Installation et mises à jour](docs/packwiz.md).
|
||||
|
||||
Les **quatre expansions validées sont disponibles dans Sanctuary normal** :
|
||||
@@ -10,11 +10,19 @@ 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.297 — correctifs des cadres (préparation locale)
|
||||
## beta.298 — normales de l'ancre (préparation locale)
|
||||
|
||||
[Retrait du petit cadre résiduel dans la passe PBR](docs/media-anchor-normals-beta298.md).
|
||||
Le modèle invisible de l'ancre ne doit plus laisser de reflet sur la vidéo
|
||||
avec les shaders Sanctuary activé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
|
||||
|
||||
|
||||
@@ -0,0 +1,68 @@
|
||||
# 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`, préparation **beta.298**, Media **0.3.2**.
|
||||
|
||||
## 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é.
|
||||
Cette préparation ne modifie pas la version beta.297 actuellement installée
|
||||
sur le canal, la Beta et Prism.
|
||||
@@ -0,0 +1,104 @@
|
||||
{
|
||||
"ticket": "MEDIA-07",
|
||||
"state": "local preparation; beta.297 remains installed",
|
||||
"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",
|
||||
"Canonical Prism and dedicated Beta unchanged",
|
||||
"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"
|
||||
]
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,8 @@
|
||||
# MEDIA-06 — interaction et épaisseur des cadres
|
||||
|
||||
Retours du 26 octobre 2026 après essai de beta.296. Branche
|
||||
`codex/media-frame-fixes`, préparation locale **beta.297**, module Media **0.3.1**.
|
||||
`codex/media-frame-fixes`, **beta.297**, module Media **0.3.1**.
|
||||
[Livraison complète du 27 octobre 2026](release-beta297.md).
|
||||
|
||||
## Comportement demandé
|
||||
|
||||
@@ -55,8 +56,8 @@ 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.
|
||||
|
||||
Cette branche prépare le correctif ; la version publiée beta.296 n'est pas
|
||||
modifiée par les essais de développement.
|
||||
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
|
||||
|
||||
@@ -82,5 +83,6 @@ vues rasantes ont révélé le liseré restant. Seules les captures de
|
||||
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). Pas de publication, de
|
||||
modification Prism ou de redémarrage de la Beta pour ce correctif local.
|
||||
[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.
|
||||
|
||||
@@ -2,7 +2,14 @@
|
||||
"ticket": "MEDIA-06",
|
||||
"version": "beta.297",
|
||||
"media_version": "0.3.1",
|
||||
"state": "local preparation; beta.296 still published and installed",
|
||||
"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": {
|
||||
@@ -65,6 +72,6 @@
|
||||
"limits": [
|
||||
"No new public streaming or audio listening validation",
|
||||
"Graphical wall faces south; all four orientations checked numerically",
|
||||
"No personal world or installation modified"
|
||||
"Graphical tests used development instances; deployment to the existing personal installation is documented in the delivery receipt, no personal world opened"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
# Sanctuary beta.298
|
||||
|
||||
Le petit cadre brillant dans le coin inférieur gauche de la vidéo est corrigé
|
||||
avec les shaders Sanctuary activés. Le modèle invisible de l'ancre ne fournit
|
||||
plus de faces à la passe des normales PBR. Le grand cadre conserve sa taille
|
||||
et son épaisseur ; le lecteur et le redimensionnement gardent leurs gestes.
|
||||
|
||||
Les écrans déjà posés conservent leur source, leurs dimensions et leurs données.
|
||||
Aucun bloc à remplacer ni conversion de sauvegarde. Media passe en 0.3.2 ;
|
||||
Minecraft 26.3, Fabric et Dream Displays 1.10.4 restent inchangés.
|
||||
|
||||
Correctif vérifié à deux clients Vulkan avec PBR actif, vidéo en mouvement et
|
||||
gros plans de face et en vue rasante. Le détail des contrôles et leurs limites
|
||||
est dans `docs/media-anchor-normals-beta298.md` ; pas de nouvelle validation
|
||||
des sources publiques ni de l'endurance du lecteur.
|
||||
@@ -0,0 +1,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/`.
|
||||
+1
-1
@@ -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.
|
||||
|
||||
+2
-2
@@ -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.297
|
||||
pack_version=beta.297
|
||||
mod_version=beta.298
|
||||
pack_version=beta.298
|
||||
resource_pack_version=beta.121
|
||||
maven_group=fr.koka.sanctuary
|
||||
jei_version=30.32.0-sanctuary.4
|
||||
|
||||
@@ -20,6 +20,10 @@ 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);
|
||||
@@ -33,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")){
|
||||
@@ -40,6 +45,27 @@ 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;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
plugins { id 'java-library' }
|
||||
|
||||
group = rootProject.maven_group
|
||||
version = '0.3.1'
|
||||
version = '0.3.2'
|
||||
base { archivesName = 'sanctuary-media' }
|
||||
evaluationDependsOn(':sanctuary')
|
||||
|
||||
|
||||
+2
-165
@@ -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.1",
|
||||
"version": "0.3.2",
|
||||
"name": "Sanctuary Media",
|
||||
"license": "GPL-3.0-or-later",
|
||||
"environment": "*",
|
||||
|
||||
+6
@@ -142,6 +142,12 @@ public final class Pbr134ClientChecks implements FabricClientGameTest {
|
||||
check(failures==0,"Close PBR stays stable under subpixel motion: failing distances="+failures);
|
||||
}
|
||||
private static void materials(){
|
||||
try(var materials=new PbrMaterials()){
|
||||
check(!materials.candidate(Blocks.BARRIER.defaultBlockState())&&!materials.candidate(Blocks.MOVING_PISTON.defaultBlockState()),
|
||||
"Invisible and entity-rendered blocks cannot leave normals from their baked terrain model");
|
||||
check(materials.candidate(Blocks.OAK_PLANKS.defaultBlockState())&&materials.candidate(Blocks.GLASS.defaultBlockState()),
|
||||
"Visible wooden and glass terrain models keep their material pass");
|
||||
}
|
||||
int[] flat=new int[16];Arrays.fill(flat,0xFF808080);var profile=PbrMaterials.profile("bricks");
|
||||
for(int p:PbrMaterials.generate(flat,4,4,profile))check((p>>8&0xFFFF)==0x8080,"Flat source has neutral normal");
|
||||
flat[5]=0xFFFFFFFF;var slope=PbrMaterials.generate(flat,4,4,profile);check((slope[4]>>16&255)<128&&(slope[6]>>16&255)>128,"Height gradients produce opposite normal slopes");
|
||||
|
||||
@@ -24,7 +24,9 @@ final class PbrMaterials implements AutoCloseable {
|
||||
return state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)&&state.liquid()?2:
|
||||
(name.equals("glass")||name.endsWith("_glass")||name.equals("glass_pane")||name.endsWith("_glass_pane"))?1:0;
|
||||
}
|
||||
boolean candidate(BlockState state){return !state.isAir();}
|
||||
// Invisible blocks may still have a baked model (for particles or items).
|
||||
// Their hidden faces must never enter the normal/material buffer.
|
||||
boolean candidate(BlockState state){return state.getRenderShape()==net.minecraft.world.level.block.RenderShape.MODEL;}
|
||||
Profile profile(BlockState state){return profiles.computeIfAbsent(state,s->profile(BuiltInRegistries.BLOCK.getKey(s.getBlock()).getPath()));}
|
||||
static Profile profile(String name){
|
||||
if(name.equals("water"))return new Profile(.12f,0);
|
||||
|
||||
@@ -31,7 +31,7 @@ final class PbrTerrain implements AutoCloseable {
|
||||
PbrTerrain(){this(false);}
|
||||
PbrTerrain(boolean transparent){this.transparent=transparent;maxBytes=(transparent?8L:24L)*1024*1024;}
|
||||
private boolean candidate(net.minecraft.world.level.block.state.BlockState state){
|
||||
return transparent ? PbrMaterials.family(state)==1||state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)
|
||||
return transparent ? (materials.candidate(state)&&PbrMaterials.family(state)==1)||state.getFluidState().is(net.minecraft.tags.FluidTags.WATER)
|
||||
: materials.candidate(state)&&!state.liquid()&&PbrMaterials.family(state)==0;
|
||||
}
|
||||
private final Long2ObjectOpenHashMap<Section> sections=new Long2ObjectOpenHashMap<>();
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
name = "Sanctuary"
|
||||
author = "KOKA99CAB"
|
||||
version = "beta.297"
|
||||
version = "beta.298"
|
||||
pack-format = "packwiz:1.1.0"
|
||||
|
||||
[index]
|
||||
|
||||
Reference in New Issue
Block a user