Le menu titre rendait entièrement noir sur les PC Windows + NVIDIA
(2 postes) : le mod créait sa texture (DynamicTexture) et son sampler
pendant l'extraction du rendu, et blittait une texture hors atlas.
Correctifs :
- la texture est désormais enregistrée via le mécanisme officiel de MC
(ReloadableTexture + TextureContents) : c'est MC qui crée la texture
GPU ET le sampler, comme pour ses propres textures. Plus de sampler
custom, plus d'upload manuel ;
- la création de la texture GPU est déplacée dans TitleScreen.init, donc
HORS de l'enregistrement des commandes de la frame (le créer pendant
l'extraction invalide le frame entier sur les backends à command
encoder => écran noir) ;
- fond réduit de 3840x2400 à 1920x1200 (36 Mo -> 9 Mo de VRAM) ;
- suppression des 6 panorama_*.png embarqués : MC 26.3 n'expose pas les
ressources des mods au ResourceManager, ils n'ont jamais été rendus
(vérifié : le panorama vanilla'affiche le stock Mojang) ;
- jar réduit de 3,6 Mo à 871 Ko.
Vérifié par capture d'écran en jeu : menu OK en OpenGL (Mesa/AMD) et en
Vulkan (lavapipe).
atlas : distribution.json regénérée (nosingleplayer 1.2.0, MD5/URL à
jour) ; retrait de spatial-gui du pack (fait par le repo, documenté dans
server/mods/SOURCE.md).
Écran noir au menu titre sur les PC Windows (2 postes) : dans
TitleScreen.extractRenderState, les widgets sont dessinés juste APRÈS
extractPanorama. Toute exception dans la redirection du panorama
interrompt donc le rendu du menu entier (écran noir, sans bouton).
Mod nosingleplayer 1.1.9 :
- try/catch autour du fond custom + repli automatique sur le panorama
vanilla (avant : écran noir définitif si la texture est refusée par
le GPU ou absente du jar) ;
- try/catch autour de la construction du menu, et les widgets vanilla ne
sont retirés qu'APRÈS la création des widgets SurviePote (avant : une
exception laissait un menu vidé) ;
- ping serveur déplacé sur un thread dédié : il était lancé depuis
extractWidgetRenderState, donc sur le thread de rendu (un DNS lent
suffisait à figer le menu) ;
- log GPU au démarrage du menu (nom/vendor/pilote/backend) ;
- option de diagnostic -Dsurviepote.customTitle=false (menu vanilla).
Launcher : java.exe est lancé avec detached:true sans windowsHide ->
sur Windows, une console noire et vide s'ouvre par-dessus le jeu.
Ajout de windowsHide:true.
atlas : distribution.json regénéré (MD5/URL du nouveau jar).
Menu principal :
- Bouton "Join Discord" (logo Discord lissé + texte) sous "Rejoindre
SurviePote", ouvre https://discord.gg/EpkgEPv5c.
- "Options..." et "Quit Game" remplacés par des boutons icônes sans texte
(engrenage / symbole power) qui conservent l'action du bouton vanilla
(ButtonAccessor -> onPress).
- Panneau de statut du serveur en haut à gauche : En ligne / Hors ligne,
joueurs current/max et ping.
Attention : dans ServerStatusPinger.pingServer les 2 Runnable ne sont pas
des callbacks succès/échec (le 1er ne fire que si le favicon change, le
2nd est le pong) -> on lit directement ServerData.status ("0/20" quand le
statut est arrivé, vidé en cas d'échec) + timeout 8s.
- Suppression du texte "26.3 mc" (bas à gauche) : le mixin TitleScreenTextMixin
qui le dessinait est supprimé, la redirection masque le texte de version.
- Suppression du splash, du logo Mojang, des boutons amis/icônes et du
copyright (TitleScreenMixin : FriendsButton/SpriteIconButton/PlainTextButton
sont des sous-classes de Button, ils étaient avalés par "instanceof Button").
Icônes : PNG lisses 64x64 (supersampling 8x8) au lieu du pixel art.
Chargement des textures du mod via ModTextures (les assets des mods ne sont
plus exposés au ResourceManager en MC 26.3).
- Titre de fenêtre : "Minecraft* 26.3" -> "SurviePote [26.3]"
(mixin sur Minecraft.createTitle(), la classe Window a changé de package
en 26.3 : com.mojang.blaze3d.platform.Window).
- Suppression du texte de splash (message rotatif) du menu principal.
- Bouton "amis" (FriendsButton) réellement supprimé : le if/else if de
TitleScreenMixin testait "instanceof Button" en premier, et FriendsButton /
SpriteIconButton / PlainTextButton en héritent -> ils tombaient dans cette
branche et n'étaient jamais retirés. Ordre des tests corrigé (icônes et
texte cliquable testés avant Button).
Trois bugs cumulés, tous vérifiés contre le jar client 26.3 :
1. blit() : l'overload 11 args réutilise w/h comme région source
(u0 = u/tw, u1 = (u+w)/tw) -> on n'affichait que le coin haut-gauche
de l'image (noir). On utilise l'overload 13 args avec une région
source explicite + recadrage "cover" (pas de déformation).
2. Texture introuvable : en MC 26.3 le ResourceManager ne lit plus les
packs depuis les jars du classpath (seulement des dossiers), donc les
assets d'un mod ne sont plus exposés -> placeholder magenta.
Vérifié : "Reloading ResourceManager: vanilla, vanilla" et
namespaces=[minecraft, realms]. Le PNG est donc lu dans le jar du
mod (getResourceAsStream) et uploadé en DynamicTexture, enregistrée
dans le TextureManager.
3. Filtrage : sampler NEAREST par défaut (aliasing visible) -> sampler
linéaire + clamp-to-edge.
Asset : PNG RGBA 3840x2400.
- TitleScreenMixin : TransferState null sur startConnecting -> connexion
normale, corrige "This server does not accept transfers".
- PauseScreenMixin (nouveau) : renomme le bouton de deconnexion du menu
Echap en "Quitter SurviePote" et redirige vers l'ecran d'accueil
(TitleScreen) au lieu de la liste des serveurs.
- build.gradle : tache runClient (dev sans loom) reutilisant
~/.surviepote/common.
- Jar 1.1.3 copie dans l'atlas + distribution.json regenere.