- Le Snapshot 4 de Minecraft 26.3 remplace GLFW par SDL3 pour le backend de gestion des fenêtres, d’entrée et d’intégration de plateforme, et introduit les SDL scancodes et keycodes pour l’entrée clavier
- Les raccourcis clavier utilisent la position physique des touches plutôt que des codes liés à la disposition du clavier, Linux privilégie Wayland quand c’est possible, et macOS prend en charge la fenêtre native de composition de saisie
- Un composant de données pour les combustibles personnalisés de four et d’alambic a été ajouté, permettant de définir le temps de combustion, le nombre d’utilisations et la vitesse de cuisson ou de brassage via un number provider
- Le data pack 111.0 et le resource pack 92.0 modifient en profondeur les événements de clic sur les panneaux, les références de tables de loot, les triggers d’avancement, les propriétés d’environnement de génération des mobs, les paramètres de génération du terrain et les shaders
- Des plantages du mode plein écran exclusif sont connus sous Windows en configuration multi-écran et sous Wayland, et cette version de test peut corrompre les mondes : il faut donc faire une sauvegarde ou l’exécuter dans un dossier séparé
Système de fenêtre et d’entrée basé sur SDL3
- La bibliothèque de gestion des fenêtres, d’entrée et d’intégration de plateforme passe de GLFW à SDL3
- L’entrée clavier utilise les SDL scancodes pour la position physique des touches
- Les raccourcis d’édition de texte qui varient selon la disposition du clavier utilisent les SDL keycodes
- Les raccourcis clavier fonctionnent désormais selon les touches physiques plutôt que selon les codes de touches propres à chaque disposition
- Le réglage de souris Raw Input est supprimé, et le jeu utilise désormais toujours le mode souris relative en cours de partie
- Le plein écran sans bordure devient le mode plein écran par défaut, et il est possible de basculer entre le mode sans bordure et le mode exclusif sans redémarrer
- Sur macOS, le plein écran exclusif n’est plus pris en charge
- La taille minimale de la fenêtre est de 320×240 pixels
- Sous Linux, Wayland est privilégié nativement lorsqu’il est disponible
- Sur macOS, maintenir une touche pendant une saisie de texte affiche la fenêtre native d’accents et de candidats
Problèmes connus en plein écran
- Le plein écran exclusif sous Windows peut faire planter le jeu dans certaines situations, en particulier en environnement multi-écran
- Sous Wayland, le jeu plante lors de l’entrée en plein écran exclusif
Changements de gameplay et d’interface
- Les joueurs en mode spectateur peuvent interagir avec les portails pour se téléporter
- Les tatous n’essaient plus de se rouler en boule lorsqu’ils sont immergés dans un liquide
- Une échelle GUI distincte peut être appliquée à l’overlay de débogage
- Elle se règle dans les Debug Options avec
F3 + F6 - La valeur par défaut
Autoconserve une résolution plus élevée que le GUI normal, tandis queUnchangedcorrespond à l’échelle GUI normale player_speed, qui affiche la vitesse de déplacement du joueur en blocs par tick, ainsi qu’un affichage du taux de rafraîchissement ont aussi été ajoutés
- Elle se règle dans les Debug Options avec
- L’ordre des minerais dans l’inventaire créatif a été réorganisé en matériaux sans palier, matériaux de palier non raffinés, puis matériaux de palier raffinés
- Les blocs de construction suivent l’ordre minerais sans palier, minerais de palier raffinés, puis famille Copper, avec les blocs Copper les plus nombreux placés plus loin
- L’onglet Natural Blocks est organisé dans l’ordre Overworld → Nether → End
Combustibles personnalisés et composants d’objet
minecraft:cooking_fueldéfinit le carburant pour Furnace, Smoker et Blast Furnaceburn_timeindique le nombre de ticks de combustion, etspeed_multiplierdéfinit la vitesse de cuisson ou de fusion viaminecraft:number_provider
minecraft:brewing_fueldéfinit le nombre d’utilisations et la vitesse de brassage du carburant de Brewing Stand- L’ancien item tag
#brewing_fuelest supprimé et ne peut plus servir à enregistrer de nouveaux carburants de brassage
- L’ancien item tag
- Les recettes de Smoker et Blast Furnace utilisent désormais le même temps de cuisson que Furnace, et l’accélération provient du
minecraft:cooking/speed_defaultdu composant de carburant - Les champs de temps de cuisson et de carburant de Furnace, Smoker et Blast Furnace passent de short à integer et
speed_multiplierest ajouté BrewTimeetFueldu Brewing Stand passent aussi à integer, avec l’ajout detotal_brew_time,total_fueletspeed_multiplier- Les composants de données ajoutés sont les suivants
minecraft:sign_text_front,minecraft:sign_text_back: stockent le texte avant et arrière d’un panneau et l’affichent dans l’infobulle de l’objetminecraft:waxed: marqueur sans champ indiquant que le contenu a été ciréminecraft:cushion/color: applique l’une des 16 couleurs de teinture à un Cushion placéminecraft:villager_food: définit les objets que les villageois peuvent manger et leur valeur nutritiveminecraft:mob_visibility: définit de 0.0 à 10.0 l’effet d’un équipement sur la distance de détection par les mobs ; même cumulée, la valeur maximale de vision ne dépasse pas 10.0
Compatibilité des panneaux et des data packs
- La version du data pack passe à 111.0
- Les commandes et événements de clic des textes personnalisés sur panneau ne s’exécutent plus par défaut lors d’un clic sur le bloc, et les composants de texte des nouveaux panneaux ne sont plus interprétés automatiquement
- Le nouveau champ
allow_op_featuresvautfalsepar défaut ; pour restaurer l’ancien comportement, il faut le définir explicitement àtrue - Les panneaux enregistrés dans les anciennes versions ainsi que les
minecraft:block_entity_datacontenant des données de panneau reçoiventallow_op_features=true
- Le nouveau champ
- L’écran d’édition des panneaux après placement n’apparaît que lorsqu’un clic normal peut ouvrir l’écran d’édition, par exemple si le panneau n’est pas ciré et que le texte avant peut être modifié
- Les panneaux échangent les composants
minecraft:sign_text_front,minecraft:sign_text_backetminecraft:waxed - Les blocs sûrs sur lesquels
/spreadplayerspeut placer les joueurs sont contrôlés par le block tag#entities_can_teleport_to
Références de registre et changements sur le loot et les avancées
- Les types de tables de loot disposant d’un registre dédié prennent en charge les références à des éléments de registre et à des tags
- Les champs d’élément unique peuvent recevoir un ID namespaced ou une valeur inline
- Les champs de liste peuvent recevoir une valeur inline, un ou plusieurs ID namespaced, une liste de valeurs inline ou un ID de tag avec
# - Cela concerne advancement, item modifier, loot table, number provider, predicate, recipe et slot source
- Les anciens types
referencede predicate, item modifier et slot source sont supprimés car devenus inutiles - Plusieurs champs des triggers d’avancement peuvent désormais recevoir non seulement des predicates inline, mais aussi des ID de predicate namespaced
- Le comportement implicite
minecraft:all_ofde l’ancienne liste de conditions est supprimé, il faut donc désormais toujours précisertype - Plusieurs champs
block,recipe_idetloot_tablepassent respectivement au pluriel et prennent en charge un ID unique, une liste ou un tag
- Le comportement implicite
- Dans Loot Pool Entry,
conditionsdevientconditionetfunctionsdevientmodifier - Dans Loot Function,
conditionsdevientcondition, etfunction, qui indiquait le type de fonction, devienttype- Les listes de conditions inline ne sont plus acceptées ; pour le même comportement, il faut expliciter
minecraft:all_of
- Les listes de conditions inline ne sont plus acceptées ; pour le même comportement, il faut expliciter
- Dans Predicate, le champ de type
conditiondevienttype, etminecraft:referenceainsi queminecraft:block_state_propertysont supprimés- Le nouveau
minecraft:match_blockvérifie ensemble l’ID ou le tag du bloc, les états, le NBT, les composants et les predicates de composant
- Le nouveau
- Les number providers inline doivent désormais toujours préciser
typeet n’utilisent plusminecraft:uniformcomme valeur par défaut - Plusieurs number providers Vanilla ont été ajoutés pour fournir le temps de combustion par combustible de cuisson, la vitesse de cuisson ou de brassage par défaut, et le nombre d’utilisations pour le brassage
Apparition des mobs et génération du monde
- La nouvelle propriété d’environnement
minecraft:gameplay/natural_mob_spawnsdéfinit les apparitions de mobs basées sur un poids par catégorie ainsi que le spawn cost par entité- Pendant le placement lors de la génération du monde, seules Dimension et Biome appliquent cette propriété
- Le modificateur
overlayapplique en priorité les paramètres de catégorie de la couche supérieure ainsi que le spawn cost de la même entité
minecraft:gameplay/creature_world_gen_spawn_probabilitydéfinit, pendant la génération du monde, la probabilité de répétition des apparitions de mobs de catégorie creature entre 0 inclus et 1 exclu, avec une valeur par défaut de 0.1spawners,spawn_costsetcreature_spawn_probabilitydes biomes sont supprimés et déplacés vers la nouvelle propriété d’environnement- La propriété d’environnement des particules ambiantes interpole la probabilité entre les images-clés de la timeline et prend en charge le modificateur
append, qui ajoute des éléments à la liste de particules de la couche inférieure - Dans Noise Settings, les paramètres d’aquifère et de veines de minerai sont réorganisés en un objet optionnel
aquiferset une listeore_veins- En l’absence de configuration, aucun aquifère ou aucune veine de minerai n’est généré
- Les champs de density function associés quittent
noise_routerpour rejoindre cette nouvelle structure
- Les Density Functions ajoutent
sub,div,negate,lerp,floor,round,ceil,truncate,beardifier- Plusieurs noms d’arguments existants deviennent
value,left,right,input,noise invertest renommé enreciprocalbeardifiern’est plus implicitement ajouté àfinal_density
- Plusieurs noms d’arguments existants deviennent
Graphismes et principales corrections de bugs
- La version du resource pack passe à 92.0
- Des shaders compatibles avec la transparence indépendante de l’ordre (order-independent transparency) ainsi que la définition
OIT_ALWAYS_WRITE_DEPTHsont ajoutés core/integrate_depth.fshintègre le depth buffer du HUD 3D et des gizmos toujours affichés au-dessus dans le depth buffer principal- Les principaux problèmes corrigés sont les suivants
- Problèmes de raccourcis clavier et de saisie liés aux claviers non QWERTY ainsi qu’à macOS et aux saisies CJK
- Plantages du rendu des cartes avec Improved Transparency, ainsi que problèmes d’affichage du verre, des objets semi-transparents, des particules et des limites du monde
- Plantages causés par des projectiles hors de la hauteur du monde et par le placement de ruches à la hauteur minimale
- Problèmes d’enregistrement et de chargement des heightmaps lors de la génération du monde, ainsi que désynchronisation de la position des mobs après tick sprint
- Problèmes de placement, de couleur, de nom personnalisé, de durée de carburant et de détection de collision des Cushion
- Problèmes liés aux dégâts et au vol de l’Ender Dragon, à l’usage des portails par les spectateurs et à la détection des blocs sûrs par
/spreadplayers
Installation et précautions de test
- Ce Snapshot est destiné à Minecraft: Java Edition et s’installe en activant Snapshot dans l’onglet
Installationsdu Minecraft Launcher - Les versions de test peuvent corrompre les mondes, il faut donc les sauvegarder ou les exécuter dans un dossier distinct de vos mondes principaux
- Un Minecraft server jar multiplateforme est également fourni
- Les bugs peuvent être signalés sur le Minecraft issue tracker, et les retours sur le site Feedback
1 commentaires
Avis sur Hacker News
L’implémentation LWJGL de ce binding a été écrite par un membre de l’équipe du modpack GTNH, bouclant à nouveau la boucle vanilla→moddé→vanilla https://github.com/LWJGL/lwjgl3/pull/1033
J’ai récemment porté le jeu Tribal Trouble (https://github.com/bondolo/tribaltrouble) de GLFW vers SDL3, et dans l’ensemble le refactoring s’est fait assez facilement. Il y a eu quelques problèmes avec le plein écran exclusif et le plein écran bureau, mais ils ont fini par être résolus
J’ai aussi écrit une démo pour tester et documenter la gestion délicate des modes d’affichage. Le jeu est en Java, comme Minecraft, mais la démo est en C pour la garder aussi simple que possible
Le plein écran exclusif sous Windows peut faire planter le jeu, surtout en multi-écran, et sous Wayland il existe un problème connu où le simple fait d’y entrer provoque un plantage. Dans les deux cas, ça ressemble typiquement à des bugs bloquants justifiant de reporter un snapshot ; j’espère qu’ils seront corrigés avant la sortie stable
À mon sens, le niveau d’attente en matière de stabilité va dans l’ordre suivant : version à support long terme, version stable, release candidate, bêta, alpha, snapshot, commit tout juste mergé, PR non mergée, PR brouillon, etc. Un gros bug devrait repousser une release candidate ou une bêta, et un bug critique devrait empêcher le merge lui-même, mais il n’y a aucune raison de retarder un snapshot à cause d’un bug qui a passé la CI et a été mergé
Un snapshot, c’est plutôt une coupe régulière de l’état actuel pour permettre aux utilisateurs de l’exécuter et de faire des retours sans devoir compiler eux-mêmes main
Les snapshots n’ont jamais promis d’être exempts de bugs ; c’est même l’inverse qui est supposé
Je me demande comment un papa technicien qui ne connaît absolument pas Minecraft devrait s’y prendre pour monter un serveur familial en 2026. Les enfants jouent actuellement sur iPad et parfois sur un vieux MacBook ou un PC Windows
On peut faire tourner un serveur Java standard et utiliser Geyser pour convertir en temps réel le protocole Bedrock. Les clients Bedrock, plus fortement limités, peuvent nécessiter des contournements, mais cela permet de gérer le tout autour d’un serveur Java, qui offre plus d’options
Il suffit d’utiliser une JVM récente, d’augmenter la mémoire maximale autant que raisonnablement possible, puis d’utiliser ZGC. Certains guides recommandent de modifier quantité de flags sans justification, voire de combiner des réglages contradictoires comme la taille de la région Eden et une pause cible
ZGC a une latence très faible et ses performances se dégradent moins avec de grands heaps, mais il vaut mieux rester sous 32 Go pour conserver la compression des en-têtes d’objets. Les JVM récentes améliorent aussi l’utilisation mémoire et les performances globales
Si davantage de performances sont nécessaires, on peut installer fabric et lithium. Mieux vaut éviter les mods comme Paper, Spigot ou Purpur, qui peuvent casser des systèmes automatisés
J’ai utilisé itzg/docker-minecraft-server de façon fiable pendant des années, et j’aimais le fait que l’image prenne tout en charge sans avoir à installer les dépendances une par une. Il existe aussi une image de serveur Bedrock, mais je n’ai pas réussi à la faire fonctionner correctement
Pour l’exploitation la plus simple, tout le monde devrait utiliser l’édition Java sous Windows, Mac ou Linux ; sinon, il reste la solution de payer un serveur hébergé, Realms
Selon l’objectif du serveur familial, ce ne sera peut-être pas adapté, mais pour que les enfants jouent ensemble rapidement et simplement, c’est la solution la plus facile. J’ai aussi vu des enfants qui se sont longtemps obstinés sur Bedrock, puis sont passés à Java et ont regretté de ne pas l’avoir fait plus tôt
Icculus a publié une excellente vidéo sur le portage d’un jeu de SDL2 vers SDL3, et la vidéo du portage de Doom est ici : https://www.youtube.com/watch?v=ixdeGhsoxy8
C’est surprenant de voir Minecraft se rapprocher de plus en plus d’un moteur de jeu à part entière plutôt que d’un simple jeu.
Je me demande si la raison de l’abandon de GLFW est documentée. Comme j’ai un projet qui utilise GLFW, je me demande toujours si SDL serait un meilleur choix.
SDL3 dispose par défaut d’une prise en charge solide de Wayland. Dans Minecraft, GLFW ne servait qu’à la création de fenêtres, à l’icône de barre des tâches, au plein écran et aux entrées, le reste étant géré en OpenGL brut, donc la transition était aussi facile. Désormais, avec la prise en charge de Vulkan en plus, on peut utiliser une pile entièrement moderne sur les bureaux Linux et le Steam Deck.
SDL3 fonctionne même sur Android 4.2, et j’ai déjà créé une appli avec SDL3 et ImGui sans Java.
Ce n’est peut-être pas une grande différence pour tous les projets, mais SDL offre plus de fonctionnalités et une meilleure portabilité.
Le jeu de rythme osu! est lui aussi récemment passé de SDL2 à SDL3, avec de nettes améliorations de performances et de latence. L’adoption de SDL3 semble un peu lente, et il est aussi surprenant que Minecraft ait utilisé GLFW jusqu’ici.
En particulier, après le passage à SDL3, la latence qui apparaissait quand le client Discord était ouvert pendant l’exécution d’osu! a disparu ; je crois l’avoir vu dans une vidéo de développement sur YouTube.
Ubuntu 24.04 n’incluait pas SDL3 dès le départ ; SDL3 étant plus récent qu’on ne le pense, cela semble être l’une des raisons pour lesquelles son adoption est plus lente que prévu.
SDL2 montrait son âge, notamment dans l’abstraction des API GPU incluant Vulkan et Metal, donc le passage à SDL3 est logique. Je me demande aussi si les problèmes anciens de latence d’entrée et d’Alt+Tab sous Linux dans l’édition Java seront résolus par le changement de couche fenêtre/entrée.
Pour prendre activement en charge les mods, il semble préférable d’utiliser un langage où la décompilation et les modifications à l’exécution sont faciles, comme Java ou C#, ou bien la JVM et le CLR .NET.
En tenant compte des moddeurs lors des changements internes, on peut obtenir une excellente API de modding pratiquement sans coût supplémentaire.