- O Snapshot 4 do Minecraft 26.3 substitui o backend de gerenciamento de janelas, entrada e integração de plataforma do GLFW pelo SDL3 e adota SDL scancode e keycode para entrada de teclado
- Os atalhos de teclado passam a usar a posição física das teclas em vez de códigos por layout; no Linux, o Wayland é priorizado quando possível, e no macOS há suporte à janela nativa de candidatos de entrada
- Foi adicionado um componente de dados para combustível personalizado de fornalha e de preparo de poções, permitindo configurar tempo de queima, número de usos e velocidade de cozimento/preparo com number provider
- No data pack 111.0 e no resource pack 92.0, houve mudanças amplas em eventos de clique de placas, referências de loot table, gatilhos de avanços, propriedades de ambiente de spawn de mobs, configurações de geração de terreno e shaders
- Há um erro conhecido de tela cheia exclusiva no Windows com múltiplos monitores e no Wayland; como versões de teste podem corromper mundos, é preciso fazer backup ou executar em uma pasta separada
Sistema de janela e entrada baseado em SDL3
- A biblioteca de gerenciamento de janelas, entrada e integração de plataforma foi migrada do GLFW para o SDL3
- A entrada de teclado usa SDL scancode para a posição física das teclas
- Atalhos de edição de texto que variam conforme o layout do teclado usam SDL keycode
- Os atalhos configuráveis agora funcionam com base em teclas físicas, e não em códigos dependentes do layout
- A configuração de mouse Raw Input foi removida, e durante a jogabilidade o modo de mouse relativo é sempre usado
- Tela cheia sem bordas passou a ser o modo padrão, e é possível alternar entre sem bordas e modo exclusivo sem reiniciar
- No macOS, a tela cheia exclusiva não é mais suportada
- O tamanho mínimo da janela é de 320×240 pixels
- No Linux, o Wayland é usado nativamente com prioridade quando disponível
- No macOS, ao manter uma tecla pressionada durante a entrada de texto, é exibido o pop-up nativo de acentos e candidatos
Problemas conhecidos de tela cheia
- A tela cheia exclusiva no Windows pode causar travamentos em certas situações, especialmente em ambientes com múltiplos monitores
- No Wayland, o jogo trava ao entrar em tela cheia exclusiva
Mudanças de jogabilidade e interface
- Jogadores no modo espectador podem interagir com portais para se teleportar
- Tatus não tentam se enrolar quando estão submersos em líquido
- Agora é possível aplicar uma escala de GUI separada ao overlay de depuração
- A configuração fica em Debug Options com
F3 + F6 - O padrão
Automantém resolução mais alta que a GUI normal, eUnchangedusa a mesma escala da GUI normal - Também foram adicionados
player_speed, que mostra a velocidade de deslocamento em blocos por tick, e a exibição da taxa de atualização da tela
- A configuração fica em Debug Options com
- A ordem dos minérios no inventário criativo foi reorganizada para materiais sem tier, materiais brutos por tier e materiais refinados por tier
- Em blocos de construção, a ordem é minérios sem tier, minérios refinados por tier e itens da linha Copper, com os blocos de Copper, que são muitos, posicionados mais ao fim
- A aba Natural Blocks foi organizada em Overworld → Nether → End
Combustíveis personalizados e componentes de item
minecraft:cooking_fueldefine combustíveis para Furnace, Smoker e Blast Furnaceburn_timedefine os ticks de queima, espeed_multiplierdefine a velocidade de cozimento/fundição, ambos comminecraft:number_provider
minecraft:brewing_fueldefine o número de usos e a velocidade de preparo do combustível do Brewing Stand- A antiga tag de item
#brewing_fuelfoi removida e não pode mais ser usada para registrar novo combustível de preparo
- A antiga tag de item
- Receitas de Smoker e Blast Furnace passam a usar o mesmo tempo de cozimento da Furnace, e o aumento de velocidade é controlado por
minecraft:cooking/speed_defaultno componente de combustível - Os campos de tempo de cozimento e de combustível de Furnace, Smoker e Blast Furnace mudaram de short para integer, e
speed_multiplierfoi adicionado BrewTimeeFueldo Brewing Stand também mudaram para integer, com adição detotal_brew_time,total_fuelespeed_multiplier- Os componentes de dados adicionados são os seguintes
minecraft:sign_text_front,minecraft:sign_text_back: armazenam o texto da frente e do verso de placas e o exibem na tooltip do itemminecraft:waxed: marcador sem campo que indica que o conteúdo recebeu ceraminecraft:cushion/color: aplica uma das 16 cores de corante a um Cushion colocadominecraft:villager_food: define itens que aldeões podem comer e seus valores nutricionaisminecraft:mob_visibility: define de 0.0 a 10.0 o multiplicador do efeito de equipamentos sobre a distância de detecção de mobs; mesmo acumulado, o valor máximo de visão não passa de 10.0
Compatibilidade de placas e data packs
- A versão do data pack subiu para 111.0
- Comandos e eventos de clique em textos personalizados de placas não são mais executados por padrão ao clicar no bloco, e componentes de texto em placas novas também não são mais interpretados automaticamente
- O novo campo
allow_op_featurestem valor padrãofalse; para restaurar o comportamento antigo, é preciso defini-lo explicitamente comotrue - Em placas salvas em versões anteriores e em
minecraft:block_entity_dataque contenha dados de placa,allow_op_features=trueserá aplicado
- O novo campo
- Após posicionar uma placa, a tela de edição só é mostrada quando um clique normal poderia abrir a edição, como quando a placa não está encerada e o texto da frente pode ser editado
- Placas agora trocam os componentes
minecraft:sign_text_front,minecraft:sign_text_backeminecraft:waxed - Os blocos seguros onde
/spreadplayerspode posicionar jogadores são controlados pela block tag#entities_can_teleport_to
Referências de registro e mudanças em loot e avanços
- Tipos de loot table com registro dedicado agora suportam referências a elementos de registro e tags
- Campos de elemento único podem receber um ID com namespace ou um valor inline
- Campos de lista podem receber valores inline, um ou mais IDs com namespace, listas de valores inline ou um ID de tag com
# - Os alvos são advancement, item modifier, loot table, number provider, predicate, recipe e slot source
- O tipo
referenceexistente em predicate, item modifier e slot source foi removido por ter se tornado desnecessário - Vários campos de gatilhos de avanço agora podem receber não só predicate inline, mas também IDs de predicate com namespace
- O comportamento implícito anterior de
minecraft:all_ofem listas de condições foi removido, entãotypeagora deve ser especificado obrigatoriamente - Vários campos como
block,recipe_ideloot_tableforam alterados para o plural e passam a aceitar um único ID, uma lista ou uma tag
- O comportamento implícito anterior de
- Em Loot Pool Entry,
conditionsfoi renomeado paracondition, efunctionsparamodifier - Em Loot Function,
conditionsviroucondition, efunction, que indicava o tipo da função, mudou paratype- Listas de condições inline não são mais aceitas; para o mesmo comportamento, é preciso declarar
minecraft:all_of
- Listas de condições inline não são mais aceitas; para o mesmo comportamento, é preciso declarar
- Em Predicate, o campo de tipo
conditionfoi renomeado paratype, eminecraft:referenceeminecraft:block_state_propertyforam removidos- O novo
minecraft:match_blockverifica juntos ID ou tag de bloco, estado, NBT, componentes e predicate de componentes
- O novo
- Number providers inline agora exigem sempre
typeexplícito e não usam maisminecraft:uniformcomo valor padrão - Foram adicionados vários number providers Vanilla para fornecer tempo de queima por combustível de cozimento, velocidade padrão de cozimento/preparo e número de usos no preparo
Spawn de mobs e geração de mundo
- A nova propriedade de ambiente
minecraft:gameplay/natural_mob_spawnsdefine spawn de mobs com pesos por categoria e spawn cost por entidade- Durante a colocação na geração do mundo, apenas Dimension e Biome aplicam essa propriedade
- O modificador
overlayprioriza a configuração de categoria da camada superior e o spawn cost da mesma entidade
minecraft:gameplay/creature_world_gen_spawn_probabilitydefine a probabilidade de repetição de spawn de mobs da categoria creature durante a geração do mundo com valor maior ou igual a 0 e menor que 1, com padrão 0.1spawners,spawn_costsecreature_spawn_probabilityde Biome foram removidos e movidos para a nova propriedade de ambiente- A propriedade de ambiente de partículas ao redor agora interpola a probabilidade entre keyframes da timeline e suporta o modificador
append, que concatena itens à lista de partículas de uma camada inferior - Em Noise Settings, as configurações de aquifer e de ore vein foram reorganizadas em um objeto opcional
aquiferse uma listaore_veins- Sem configuração, o respectivo aquifer ou ore vein não é gerado
- Campos relacionados de density function foram movidos de
noise_routerpara a nova estrutura
- Foram adicionados a Density Function:
sub,div,negate,lerp,floor,round,ceil,truncate,beardifier- Vários nomes de argumentos existentes foram alterados para
value,left,right,input,noise invertfoi renomeado parareciprocalfinal_densitynão recebe mais implicitamente o beardifier
- Vários nomes de argumentos existentes foram alterados para
Gráficos e principais correções de bugs
- A versão do resource pack subiu para 92.0
- Foram adicionados shaders com suporte a transparência independente de ordem (order-independent transparency) e a definição
OIT_ALWAYS_WRITE_DEPTH core/integrate_depth.fshintegra ao buffer de profundidade principal o buffer de profundidade do HUD 3D e de gizmos sempre exibidos por cima- Os principais problemas corrigidos incluem:
- Problemas de atalhos e entrada em teclados não QWERTY e com entrada em macOS/CJK
- Travamentos na renderização de mapas no Improved Transparency, além de problemas com vidro, objetos semitransparentes, partículas e exibição da borda do mundo
- Travamentos causados por projéteis fora da altura do mundo e pela colocação de colmeias na altura mínima
- Problemas ao salvar/carregar heightmaps da geração do mundo e dessincronização da posição de mobs após tick sprint
- Problemas com posicionamento, cor, nome personalizado, tempo de combustível e colisão de Cushion
- Problemas com dano e voo do Ender Dragon, uso de portais por espectadores e detecção de blocos seguros em
/spreadplayers
Instalação e cuidados para teste
- O Snapshot é para Minecraft: Java Edition e pode ser instalado ativando Snapshot na aba
Installationsdo Minecraft Launcher - Como versões de teste podem corromper mundos, é preciso fazer backup ou executá-las em uma pasta diferente da dos mundos principais
- Também é fornecido um Minecraft server jar multiplataforma
- Bugs podem ser reportados no Minecraft issue tracker, e opiniões podem ser enviadas pelo site de Feedback
1 comentários
Opiniões no Hacker News
A implementação LWJGL desse binding foi escrita por um integrante da equipe do modpack GTNH, completando novamente o ciclo vanilla→modded→vanilla https://github.com/LWJGL/lwjgl3/pull/1033
Recentemente migrei o jogo Tribal Trouble(https://github.com/bondolo/tribaltrouble) de GLFW para SDL3, e no geral foi uma refatoração tranquila. Houve alguns problemas com tela cheia exclusiva e tela cheia de desktop, mas no fim foram resolvidos
Também escrevi uma demo para testar e documentar o tratamento complicado de modos de tela. O jogo é em Java, como Minecraft, mas usei C na demo para deixá-la o mais simples possível
A tela cheia exclusiva no Windows tem um problema conhecido que pode travar o jogo, especialmente com múltiplos monitores, e no Wayland ele trava só de entrar nesse modo. Ambos normalmente parecem bugs bloqueadores que justificariam adiar um snapshot, então espero que sejam corrigidos antes do lançamento estável
Eu vejo as expectativas de estabilidade mais ou menos nesta ordem: versão de suporte de longo prazo, versão estável, release candidate, beta, alfa, snapshot, commit recém-mergeado, PR não mergeado, PR em rascunho. Um bug grande deve adiar um release candidate ou beta, e um bug crítico deve impedir o próprio merge, mas não há motivo para adiar um snapshot por causa de um bug que passou no CI e foi mergeado
Um snapshot é mais parecido com cortar e distribuir periodicamente o estado atual para que usuários possam executar e dar feedback sem precisar compilar a main por conta própria
Nunca houve promessa de que snapshots não teriam bugs; pelo contrário, essa é a premissa
Fico imaginando como um pai técnico que não conhece nada de Minecraft deveria montar um servidor familiar em 2026. As crianças atualmente jogam no iPad e, às vezes, em um MacBook antigo e em um PC com Windows
É possível operar um servidor Java padrão e usar o Geyser para converter o protocolo Bedrock em tempo real. Clientes Bedrock mais restritos podem exigir métodos alternativos, mas dá para administrar tudo tendo como base um servidor Java, que oferece mais opções
Basta usar uma JVM recente, aumentar a memória máxima até um limite aceitável e usar ZGC. Há orientações que ajustam várias flags sem justificativa, ou combinam configurações conflitantes, como tamanho da região eden e meta de tempo de pausa
O ZGC tem latência muito baixa e sofre menos degradação de desempenho quanto maior o heap, mas é melhor mantê-lo abaixo de 32 GB para preservar a compressão dos headers de objetos. JVMs recentes também melhoram o uso de memória e o desempenho geral
Se precisar de mais desempenho, instale fabric e lithium. É melhor evitar mods como Paper, Spigot e Purpur, pois eles podem quebrar farms automatizadas
Usei itzg/docker-minecraft-server de forma estável por vários anos, e gostei do fato de a imagem cuidar de tudo sem precisar instalar dependências uma a uma. Também existem imagens de servidor Bedrock, mas não consegui fazê-las funcionar corretamente
Para operar da forma mais simples, todos precisam usar a edição Java em Windows, Mac ou Linux; caso contrário, há a opção de pagar pelo Realms, um servidor hospedado
Dependendo do objetivo do servidor familiar, pode não ser adequado, mas é a forma mais fácil para as crianças jogarem juntas de modo rápido e simples. Já vi crianças que insistiram por muito tempo em ficar no Bedrock, depois migraram para Java e se arrependeram de não ter mudado antes
Icculus publicou um ótimo vídeo sobre portar um jogo do SDL2 para o SDL3, e o vídeo do port de Doom está aqui: https://www.youtube.com/watch?v=ixdeGhsoxy8
É surpreendente ver o Minecraft se aproximando cada vez mais de um motor de jogo próprio do que de um simples jogo
Fico curioso se o motivo para deixar o GLFW está documentado. Tenho um projeto que usa GLFW, então sempre acabo pensando se SDL seria uma escolha melhor
O SDL3 tem suporte a Wayland sólido por padrão. No Minecraft, o GLFW era usado apenas para criação de janelas, ícone na barra de tarefas, tela cheia e entrada, enquanto o resto era tratado com OpenGL bruto, então a transição também foi fácil. Agora, com suporte até a Vulkan, dá para usar uma stack totalmente moderna no desktop Linux e no Steam Deck
O SDL3 funciona até no Android 4.2, e eu já fiz um app com SDL3 e ImGui sem Java
Pode não fazer muita diferença em todos os projetos, mas o SDL oferece mais recursos e também mais portabilidade
O jogo de ritmo osu! também migrou recentemente do SDL2 para o SDL3 e teve grandes melhorias de desempenho e latência. A adoção do SDL3 parece um pouco lenta, e também é curioso que o Minecraft tenha usado GLFW até agora
Em especial, depois da migração para SDL3, a latência que ocorria quando o cliente do Discord ficava aberto durante a execução do osu! desapareceu; lembro de ter visto isso em um vídeo de desenvolvimento no YouTube
O Ubuntu 24.04 não incluiu SDL3 desde o início, e isso parece ser um dos motivos pelos quais a adoção está mais lenta do que o esperado, já que o SDL3 é mais recente do que parece
O SDL2 já mostrava sinais de envelhecimento, especialmente na abstração de APIs de GPU incluindo Vulkan e Metal, então a migração para SDL3 faz sentido. Também fico curioso se os problemas antigos de latência de entrada e Alt+Tab na edição Java no Linux serão resolvidos com a mudança da camada de janelas e entrada
Para dar suporte ativo a mods, parece melhor usar uma linguagem em que descompilação e modificações em runtime sejam fáceis, como Java ou C#, ou então usar JVM e .NET CLR
Se você considerar também os modders ao fazer mudanças internas, acaba obtendo uma ótima API de modding praticamente sem custo adicional