Minecraft: Java Edition now uses SDL3
Happy Snapshot Tues... Thursday? Yes, you read that right! As we've entered peak vacation season here in Sweden, snapshots might not come out on their usual schedule.
In today's snapshot we have switched the library used for window management, input and platform integration from GLFW to SDL3. We have also added new item components for custom furnace fuels, as well as several technical changes for signs, world generation and loot tables.
Happy mining!
Known Issues
- Exclusive fullscreen mode on Windows may cause the game to crash in certain situations, especially when using multiple monitors
- Entering Exclusive fullscreen mode crashes the game on Wayland
New Features
- Players in spectator mode can now interact with portals to teleport
Changes
Minor Tweaks to Blocks, Items and Entities
- Armadillos no longer try to roll up when submerged in liquids
UI
- Removed the Raw Input mouse setting
- Mouse input now always uses relative mouse mode while playing in-game
- Key bindings now use physical keys instead of keyboard-layout-specific key codes
- Borderless Fullscreen is now the default fullscreen mode
- Switching between Borderless and Exclusive Fullscreen no longer requires restarting the game
- Exclusive fullscreen mode on macOS is no longer supported
- The minimum window size is now 320 by 240 pixels
- On macOS, holding a key while entering text now displays the native accent and candidate popup
- On Linux systems, the game will now use and prefer Wayland natively if available
Debug Overlay
- The debug overlay now supports a separate GUI scale than the rest of the game
- This is customizable through the Debug Options screen, F3 + F6
- The default scale is "Auto", which tries to stay at a higher resolution than normal
- Another option is "Unchanged", which matches your regular GUI scale
- The rest of the options work the same as in the normal "GUI Scale", controlling the scale directly
- Added a
player_speeddebug entry that displays the speed of the player in blocks per tick - The debug overlay now shows the display refresh rate
Creative Inventory
- Reordered mineral item and block ordering to have non-tiered ingredients up first, then tiered ingredients that craft into equipment last
- Ingredients
- Non-tiered minerals
- Unrefined tiered minerals
- Refined tiered minerals
- Nuggets
- Ingots
- Building Blocks
- Non-tiered mineral blocks and variants
- Refined tiered mineral blocks and variants
- Copper block family
- Ingredients
- Copper Blocks continue to be pushed to the end of the order in Building Blocks since they have a large list of content
- Ingredients
- Improved ordering of Natural Blocks tab so that all inner ordering of group content sequentially progresses from Overworld -> Nether -> End to stay consistent with other tabs
Technical Changes
- The Data Pack version is now 111.0
- The Resource Pack version is now 92.0
Loot Table Types
Loot table types that have a dedicated registry now support registry element and tag references. This means that the majority of fields of such types that previously accepted single elements will now accept either a namespaced ID or an inline value, while fields that previously accepted lists can now accept an inline value, a single namespaced ID, a list of namespaced IDs, a list of inline values, or a hash-prefixed tag ID.
Affected types:
minecraft:advancementminecraft:item_modifierminecraft:loot_tableminecraft:number_providerminecraft:predicateminecraft:recipeminecraft:slot_source
Existing reference types for predicates, item modifiers and slot sources are now obsolete and have been removed.
Windowing and Input Backend
- Minecraft now uses SDL3 instead of GLFW for window management, input and platform integration
- Keyboard input now uses SDL scancodes for physical key positions and SDL keycodes for layout-dependent text editing shortcuts
Data Pack Version 111.0
- Signs no longer automatically execute click events in custom text
Commands
Changes to spreadplayers
- Whether a block is safe to spread a player to is now controlled by the
#entities_can_teleport_toblock tag
Environment Attributes
Added minecraft:gameplay/natural_mob_spawns
Defines mob spawns in an Environment Attribute Source. During worldgen placement, only Dimensions and Biomes will apply this Environment Attribute.
Format: object with fields:
spawns_by_category- map of spawn category to weighted list of spawn data- Spawn data format: object with fields:
type- entity type, the entity to spawncount- int provider, amount to spawn
- Spawn data format: object with fields:
- Spawn data format: object with fields:
spawn_costs- map of entity type to object with fields:energy_budget- float, energy change allowed per spawncharge- float, how much existing mobs will attract or repulse other charged mobs
spawns_by_category- map of spawn category to weighted list of spawn data
Available attribute modifiers:
overlay- For each mob category, overrides the lower layer's spawn settings with the higher layer's, unless the category is not included. Merges each layer's spawn costs together, overriding the lower layer's spawn costs with the higher layer's if both define the same entity type.overlay- Default: Empty
Added minecraft:gameplay/creature_world_gen_spawn_probability
Sets the probability to run an iteration in which mobs defined to spawn in the creature mob category will spawn during world generation. Only Dimensions and Biomes will apply this Environment Attribute.
Format: float with range [0,1)
Default: 0.1
Changed minecraft:visual/ambient_particles
- Now supports interpolation between Timeline keyframes (probabilities will be crossfaded)
- Introduced support for new modifier:
append - Unlike
overridewhich totally replaces the particle list, this modifier concatenates all elements with the layers below
Data Components
Added minecraft:cooking_fuel
Describes an item that can be used as fuel for a Furnace, Smoker or Blast Furnace.
Format: object with fields:
burn_time- namespaced ID pointing to an element ofminecraft:number_providerregistry representing the time, in ticks, for which this fuel will burnspeed_multiplier- namespaced ID pointing to an element ofminecraft:number_providerregistry representing the speed of the cooking/smelting
Added minecraft:brewing_fuel
Describes an item that can be used as fuel for a Brewing Stand.
Format: object with fields:
uses- namespaced ID pointing to an element ofminecraft:number_providerregistry representing the number of times this fuel will brew before being consumedspeed_multiplier- namespaced ID pointing to an element ofminecraft:number_providerregistry representing the speed of the brewing
Note: the #brewing_fuel item tag has been removed and will no longer function to register new brewing fuels.
Added minecraft:sign_text_front and minecraft:sign_text_back
Two identical components that represent text in front and back of a sign. Contents will be displayed in item tooltip.
The format is the same as front_text and back_text fields on minecraft:sign and minecraft:hanging_sign block entities, i.e.:
messages- a list of text componentsfiltered_messages- an optional list of text components, if omitted, it will be set to the same value asmessagesmessagesandfiltered_messagesmust have same entry count
color- optional dye color, default: blackhas_glowing_text- optional boolean, default: false
Added minecraft:waxed
A marker for blocks with contents that are waxed. No fields.
Added minecraft:cushion/color
Applied to Cushion entities when they get placed using an item.
Format: one of 16 dye colors
Added minecraft:villager_food
Represents items that Villagers can eat. Villagers will pick up items with this component in addition to items in the #villager_picks_up tag.
Format: object with fields:
nutrition- positive integer, how much hunger the item satiates in the Villager once eaten
Added minecraft:mob_visibility
Represents the visibility percentage provided by an item with the appropriate minecraft:equippable component, modifying the range at which mobs are able to detect an entity.
Format: object with fields:
targeting_entity- an entity ID, a list of namespaced entity IDs, or a hash-prefixed entity tag to matchvisibility- float (between 0.0 and 10.0), with 0.0 reducing the range at which mobs detects the entity to 2 blocks while 10.0 increases the detection range tenfold
While multiple items with this component stack, the maximum vision will still never exceed 10.0.
Block Entity Data
Changed minecraft:sign and minecraft:hanging_sign
- By default, commands and other click events contained in Sign text are no longer executed when the block is clicked
- Additionally, text components on newly placed Signs are no longer resolved by default
- New boolean field called
allow_op_features(defaults to false) has been added to restore previous behavior - Placed Signs and items with the
minecraft:block_entity_datacomponent containing Sign data stored in worlds saved before this version will haveallow_op_featuresset to true - Any newly created Sign will need to have that field set explicitly
- Changed the rules for opening the Sign edit screen after a block is placed:
- Previously, the screen would open unless
minecraft:block_entity_datawas applied successfully - Now, the screen will open only if it could be opened normally by clicking the block (i.e. it's not waxed and only has editable text on the front side)
- Previously, the screen would open unless
- Signs will now accept and return the
minecraft:sign_text_front,minecraft:sign_text_backandminecraft:waxedcomponents
Changed minecraft:brewing_stand
The following fields are now stored as integers rather than shorts:
- Changed the
BrewTimefield from a short to an integer, this is the amount of time that the current brewing process has taken so far - Changed the
Fuelfield from a byte to an integer, this is the amount of fuel remaining
The following new fields have been added:
- Added the
total_brew_timeinteger field, this is the total amount of time the current brewing process will take - Added the
total_fuelinteger field, this represents the amount of fuel that was added in the last refuel - Added the
speed_multiplierfloat field, this will be used to speed up or slow down the next brewing process
Changed minecraft:furnace, minecraft:smoker and minecraft:blast_furnace
The following fields are now stored as integers rather than shorts:
- Changed the
cooking_time_spentfield from a short to an integer, this is the amount of time that the current cooking process has taken so far - Changed the
cooking_total_timefield from a short to an integer, this is the total amount of time the current cooking process will take - Changed the
lit_time_remainingfield from a short to an integer, this is the amount of burn time remaining - Changed the
lit_total_timefield from a short to an integer, this is the total amount of burn time that was added in the last refuel
The following new fields have been added:
- Added the
speed_multiplierfloat field, this will be used to speed up or slow down the next brewing process
Advancements
Rewards
- The
lootsub-field in the rewards field now accepts an inline value, a single namespaced ID, a list of namespaced IDs, a list of inline values, or a hash-prefixed tag ID of aminecraft:loot_tabletype
Triggers
- Multiple fields that accepted a list of loot conditions are now stricter:
- Previous functionality of a list of conditions was equivalent to a single
minecraft:all_ofcondition has been removed - Additionally,
typefield is mandatory (previously it defaulted tominecraft:entity_properties)
- Previous functionality of a list of conditions was equivalent to a single
- Some fields that previously accepted only inline loot conditions now also accept a namespaced ID of a
minecraft:predicate - The
playerfield, available on all triggers exceptminecraft:impossible, now accepts an inline value or a namespaced ID of aminecraft:predicatetype- To avoid duplication, this field is not mentioned in entries below
Changed minecraft:any_block_use trigger
- The
locationfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:bee_nest_destroyed
- The
blockfield has been renamed toblocksand now accepts a single namespaced ID, a list of namespaced IDs, or a hash-prefixed tag ID of aminecraft:blocktype - Added field
statethat matches block state properties (same format asminecraft:enter_block)
Changed minecraft:bred_animals trigger
child,parent, andpartnerfields now accept an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:brewed_potion trigger
- The
potionfield now acceptsminecraft:potion_contentsdata component predicate
Changed minecraft:cured_zombie_villager trigger
villagerandzombiefields now accept an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:default_block_use trigger
- The
locationfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:effects_changed trigger
- The
sourcefield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:enter_block
- The
blockfield has been renamed toblocksand now accepts a single namespaced ID, a list of namespaced IDs, or a hash-prefixed tag ID of aminecraft:blocktype
Changed minecraft:fall_after_explosion trigger
- The
causefield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:fishing_rod_hooked trigger
- The
entityfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:placed_block trigger
- The
locationfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:item_used_on_block trigger
- The
locationfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Changed minecraft:allay_drop_item_on_block trigger
- The
locationfield now accepts an inline value or a namespaced ID of aminecraft:predicatetype
Comments
No comments yet. Start the discussion.