On January 22, 2025, Mojang released Minecraft snapshot 25w04a for Java Edition. Fans hoping for new feature additions might be disappointed, as this snapshot primarily includes technical changes and bug fixes. On the bright side, the developers have decided to revert the movement nerfs introduced in last week's snapshot.The movement nerfs had negatively impacted players who engage in parkour and speed bridging in Minecraft. After many players voiced concerns about the changes, the developers decided to revert them.The new Minecraft snapshot also adds language support for Kyrgyz. Aside from this, it includes numerous technical changes and bug fixes. Let's go through the patch notes for Minecraft snapshot 25w04a.Minecraft snapshot 25w04a patch notesNew FeaturesAdded language support for KyrgyzChangesReverted fixes:MC-271065 - Diagonal movement is not normalized when crouching or using certain itemsMC-152728 - The player continues sprinting when performing actions that slow them downDeveloper's Note: After consideration, we have decided to revert both fixed bugs. While we do want to revisit these mechanics in the future, it's clear that these recent fixes alone didn't quite hit the mark and caused too many negative side-effects for parkour, speedbridging, and movement in generalCrossbows will now show all charged projectiles in their tooltip instead of just the firstAll charged projectiles will also add their entire tooltip as a subsection, instead of only FireworksAll container items with stored contents, such as a Chest picked with Ctrl+Pick Block, will now list the first 4 items in their tooltip just like Shulker BoxesTechnical ChangesThe Data Pack version is now 64The Resource Pack version is now 49Data Pack Versions 64The potion entity type has been split into splash_potion and lingering_potionFilled Maps without any map_id component no longer show an 'Unknown Map' tooltip (invalid IDs will still produce this tooltip)Trim pattern and trim material items are no longer specified in the trim registries, but instead in the recipes and items respectivelyField background in advancement definition no longer contains textures/ prefix and .png suffixChanges to entity variant definitionsCat and Frog variants are now data-drivenAdded uniform way to define variant selection rulesCommandsSNBT literals now accept heterogenous listsSNBT changesSNBT (textual representation of NBT-like data) has been expanded to accept heterogenous lists, i.e. ones where elements are not of the same typeNBT format is not changedIf SNBT command argument transforms value to NBT (like arguments of /data or /summon), lists might be transformed to bypass NBT constraintsExample transform: ['a', {'b':3}] is stored as [{'':'a'},{'b':3}]This transform is not reversed by /dataDeveloper's Note: Internally, in new code we read and write data in both JSON and NBT formats. This change makes sure that we don't have to worry about NBT limitations when it comes to lists. We have chosen to not expand NBT itself to avoid breaking existing external tools.TagsEntity TagsAdded #can_wear_horse_armor - entity that can hold horse armor in their body slotDamage Type TagsRenamed #bypasses_shield to #bypasses_blockingCat Variant TagsRemoved #default_spawns and #full_moon_spawnsUniform variant selectionVariants that have spawn rules now use uniform approach for selectingSelection process:Every variant field spawn_conditions that contain a list of entriesEvery entry has a condition and an integer priorityConditions for all variants for given entity type are evaluated for position where entity is being spawnedEntries with priority lower than maximum priority of remaining entries are removedGame randomly picks one entry out of remaining onesIf no conditions are remaining, variant remains unchanged from defaultEntry format:priority - integercondition - optional structureFields:type - see below for valuesAdditional fields dependent on typeIf field is not present, condition is always trueSpawn conditionsminecraft:biomeChecks if entity is spawning in specific biomesFields:biomes - single entry, list or a tag describing biomesminecraft:moon_brightnessChecks if current moon brightness is within certain rangeFields:range - floating point range (a single number or an object like {"min": 1, "max": 2})minecraft:structuresChecks if entity is spawning in specific structuresFields:structures - single entry, list or a tag describing structuresWolf VariantsFields angry_texture, tame_texture and wild_texture have been grouped in field assets and renamed to angry, tame and wildAdded field spawn_conditions described in uniform variant selection abovePig Variantstexture and biome fields are replaced with asset_id and spawn_conditions respectively.Fields in file:asset_id - namespaced id for this variant asset, resolves to assets/<namespace>/textures/<path>.pngspawn_conditions - field described in uniform variant selection aboveCat variantsCat variants can be data-driven by adding entries to data/<namespace>/cat_variant/<id>.jsonThis feature is experimentalFields in file:asset_id - namespaced id for this variant asset, resolves to assets/<namespace>/textures/<path>.pngspawn_conditions - field described in uniform variant selection aboveFrog variantsFrog variants can be data-driven by adding entries to data/<namespace>/frog_variant/<id>.jsonThis feature is experimentalFields in file:asset_id - namespaced id for this variant asset, resolves to assets/<namespace>/textures/<path>.pngspawn_conditions - field described in uniform variant selection aboveItem ComponentsNewweaponcomponentcan_disable_blocking field is replaced with disable_blocking_for_secondsdisable_blocking_for_seconds - non-negative float (default: 0)If non-zero, will disable a blocking Shield on successful attack for the specified amount of secondsNewblocks_attackscomponentWhen present, this item can be used like a Shield to block attacks to the holding playerFormat: object with fields:block_delay_seconds - non-negative float (default: 0)The number of seconds that right-click must be held before successfully blocking attacksdisable_cooldown_scale - non-negative float (default: 1)Multiplier applied to the number of seconds that the item will be on cooldown for when attacked by a disabling attack (disable_blocking_for_seconds on the weapon component)If 0, this item can never be disabled by attacksdamage_reductions - list of object with fields (optional)Controls how much damage should be blocked in a given attackIf not specified, all damage is blockedEach entry in the list contributes an amount of damage to be blocked, optionally filtered by damage typeEach entry adds to blocked damage, determined by clamp(base + factor * dealt_damage, 0, dealt_damage)The final damage applied in the attack to the entity is determined by dealt_damage - clamp(blocked_damage, 0, dealt_damage)Entry format:type - damage type id, list of damage type ids, or hash-prefixed damage type tag (optional)This entry will only contribute to the blocked damage if the dealt damage type matches this fieldIf not specified, any damage type will be acceptedbase - floatConstant amount of damage to be blockedfactor - floatFraction of the dealt damage that should be blockeditem_damage - object with fields (optional)Controls how much damage should be applied to the item from a given attackIf not specified, a point of durability is removed for every point of damage dealtThe final damage applied to the item is determined by: floor(base + factor * dealt_damage)The final value may be negative, causing the item to be repairedFormat:threshold - non-negative floatThe minimum amount of damage dealt by the attack before item damage is applied to the itembase - floatConstant amount of damage applied to the item, if threshold is passedfactor - floatFraction of the dealt damage that should be applied to the item, if threshold is passedblock_sound - sound event (optional)If specified, this sound will be played when an attack is successfully blockeddisable_sound - sound event (optional)If specified, this sound will be played when the item goes on its disabled cooldown due to an attackNewbreak_soundcomponentWhen present, this sound will be played when the item runs out of durability and breaksIf not present, no sound will be played on breakThis component is present by default on every item typeFormat: sound evente.g. break_sound='item.wolf_armor.break'Newprovides_banner_patternscomponentWhen present, this item can be placed in the pattern slot of a LoomFormat: hash-prefixed banner pattern tage.g. provides_banner_patterns='#minecraft:pattern_item/globe'Newprovides_trim_materialcomponentWhen present, this item will provide the specified trim material when used in a trimming recipeNote that to be used in the built-in smithing recipes, the item must also be in the #trim_material tagAs such, the trim material registry definition no longer specifies an itemFormat: trim material ide.g. provides_trim_material='minecraft:iron'Entity componentsSome existing components are now also transferred from spawning item to spawned entity:minecraft:custom_name - any entityminecraft:potion_contents - Lingering Potion to Area Effect Cloudminecraft:potion_duration_scale - Lingering Potion to Area Effect CloudNewtooltip_displaycomponentThis component allows the tooltips provided specifically by any given item component to be surpressedThis replaces the previous show_in_tooltip fields, hide_additional_tooltip and hide_tooltip componentsFormat: object with fields:hide_tooltip - boolean (default: false)If true, the item will have no tooltip when hoveredhidden_components - list of item component ids (default: [])The tooltips provided by any component in this list will be hiddenIf that component provides no tooltip, it will have no effectRemovedhide_additional_tooltipComponentReplaced by use of the tooltip_display component and hidden_components fieldThe following components previously covered by the hide_additional_tooltip component may need to be hidden:minecraft:banner_patternsminecraft:beesminecraft:block_entity_dataSpecifically, Mob Spawner and Trial Spawner block entity data will display the configured mobminecraft:block_stateSpecifically, the honey_level property will be displayed in the tooltip for any item with this specifiedminecraft:bundle_contentsminecraft:charged_projectilesminecraft:containerminecraft:container_lootminecraft:firework_explosionminecraft:fireworksminecraft:instrumentminecraft:map_idminecraft:painting/variantminecraft:pot_decorationsminecraft:potion_contentsminecraft:tropical_fish/patternminecraft:written_book_contentThis additionally means that tooltips from the above listed components are no longer restricted to specific item typesNote: for existing items in a world with the hide_additional_tooltip component, any of the above listed components also present on the same item will be added to the list to hide in tooltip_displayRemovedhide_tooltipComponentReplaced by use of the tooltip_display component and hide_tooltip fieldattribute_modifiersComponentRemoved show_in_tooltip field, replaced by tooltip_display componentThis component now always uses its simplified form, with the modifiers field inlined to top-levele.g. attribute_modifiers={modifiers:[...]} -> attributes_modifiers=[...]dyed_colorComponentRemoved show_in_tooltip field, replaced by tooltip_display componentThis component now always uses its simplified form, with the rgb field inlined to top-levele.g. dyed_color={rgb:12345} -> dyed_color=12345The specified color now supports the RGB array formate.g. dyed_color=[0.5, 1.0, 0.2]can_place_onandcan_breakComponentsRemoved show_in_tooltip field, replaced by tooltip_display componentThe predicates field has been inlined to top-level, and supports either a single element or liste.g. can_place_on={predicates:[{blocks:'stone'},{blocks:'dirt'}]} -> can_place_on=[{blocks:'stone'},{blocks:'dirt'}]or: can_place_on={predicates:[{blocks:'stone'}]} -> can_place_on={blocks:'stone'}enchantmentsandstored_enchantmentsComponentsRemoved show_in_tooltip field, replaced by tooltip_display componentThese components now always use their simplified form, with the levels field inlined to top-levele.g. enchantments={levels:{sharpness:2}} -> enchantments={sharpness:2}jukebox_playableComponentRemoved show_in_tooltip field, replaced by tooltip_display componenttrimComponentRemoved show_in_tooltip field, replaced by tooltip_display componentunbreakableComponentRemoved show_in_tooltip field, replaced by tooltip_display componentParticlesThe particle type tinted_leaves now has a parameter:color: Tint color, specified either as packed int or list of 4 floatsRecipessmithing_transformRecipe TypeThe base ingredient field is no longer optionalPreviously, if no base ingredient was given, the recipe would parse but never be useablesmihing_trimRecipe TypeThe base, template, and addition ingredient fields are no longer optionalPreviously, if these ingredients were not given, the recipe would parse but never be useableAdded new pattern field, controlling which trim pattern will be applied in the recipeAs such, the trim pattern registry definition no longer specifies the itemFormat: trim pattern ide.g. "pattern": "minecraft:bolt"Trim Patterns and Trim MaterialsThe registry definitions for trim patterns and trim materials no longer include an item fieldInstead, this mapping in patterns and materials is defined by the recipe and item components respectivelyLoot Functionstoggle_tooltipsNow supports any component id in the toggles mapAny component specified will be toggled in the tooltip_display componentResource Pack Version 49Item Modelsminecraft:componentSelect PropertyIf the selected value comes from a registry and the current datapacks does not provide it, the entry will be silently ignoredIn previous snapshot, unrecognized elements caused the whole item model to be ignoredminecraft:componentBoolean PropertyNew conditional model property has been added to condition item model: componentUses component predicates (like ones used in item predicates) to match item componentsHowever, instead of encoding them as a map of <predicate type>:<predicate value>, a single predicate is encoded in two fieldsFields:predicate - type of component predicate (member of minecraft:data_component_predicate_type registry)value - predicate-specific valueAtlasminecraft:paletted_permutationssprite sourceNew field:separator - optional string (default: _) - value to be used when joining texture and permutation names to produce sprite nameFixed bugs in Minecraft snapshot 25w04aMC-98271 - The sound of blocking with a shield is only hearable by other players (not the person blocking)MC-165421 - Bubble columns have the opposite effect on wind chargesMC-165461 - Crossbow loading animation stops after loading, even when still holding down right clickMC-255756 - When the shield is broken between players, the attacking side has no shield breaking soundMC-276061 - Decorated pot sherds don't visually update until relog when replacing with blank potMC-278400 - Arrows and tridents move after hitting a block in flowing lavaMC-279217 - Arrows and tridents constantly spin after hitting a block in flowing lavaMC-279218 - The minecraft:enchant.thorns.hit sound does not play when mobs or players are killed by the Thorns enchantmentMC-279225 - Players jitter and land slightly too high up when landing on powder snow while wearing leather bootsMC-279232 - SNBT text components prevent mixing text styles in listsMC-279389 - The minecraft:entity.arrow.hit_player sound is played when player is hit by an arrow shot by himselfMC-279454 - hide_additional_tooltip no longer hides author and generation on written booksMC-279480 - The "test_instance_block.reset_success" string incorrectly spells the word "succeeded" as "succeded"MC-279481 - Leaf litter no longer generates in forests or wooded badlandsMC-279482 - Elements within the test block and test instance block menus are not selected in order when using the TAB keyMC-279483 - Test blocks set to start mode show the "Message:" text despite no text field being presentMC-279485 - Test block and test instance block menus have blurred backgroundsMC-279486 - Some strings displayed within the test instance block interface are untranslatableMC-279487 - The "Test Instance ID" and "Test Structure Size" text within the test instance block interface are positioned too far to the rightMC-279488 - Leaf litter generates very sparsely in Dark ForestsMC-279489 - An unexpected error occurs when attempting to create tests with large sizesMC-279490 - No command feedback messages are displayed when attempting to reset tests that don't existMC-279491 - The "commands.test.no_tests" raw translation key is displayed when using "/test run..." commands in situations where no tests existMC-279492 - An unexpected error occurs when attempting to locate tests that don't existMC-279493 - No command feedback messages are displayed when using the "/test create" commandMC-279498 - Test blocks and test instance blocks aren't part of the "#minecraft:dragon_immune" or "#minecraft:wither_immune" tagsMC-279502 - Axolotl variants are no longer saved when bucketingMC-279504 - "minecraft:enchantments" component does not work on the select property of Item ModelsMC-279505 - Horse-esque mobs that disallow horse armor still show an non-interactive slotMC-279511 - Using "minecraft:always_pass" while the player is inside the test zone breaks the worldMC-279518 - Test environment accepts minecraft:raining instead of minecraft:weatherMC-279519 - Some words within some test command strings are always pluralizedMC-279522 - GameTest entrypoint doesn't load zip datapacksMC-279527 - GameTest entrypoint doesn't load custom tests from datapacksMC-279538 - The key name of the test instances field that represents the namespaced ID of the test environment is different from the changelogMC-279539 - Villager variant is not applied to spawned zombie villagersMC-279553 - Players using items no longer turn their body in the moving direction while moving diagonallyMC-279570 - Some piston operations don't send neighbor updatesMC-279573 - The "test_instance_block.error.no_test" string is missing the word "no"MC-279588 - Test instance field typo 'sky_accesss'MC-279599 - /test pos is offset by one on the y and z axisMC-279601 - "test.error.expected_entity_at_pos" translation is missingMC-279646 - Toggling fullscreen with F11 does not visually update the fullscreen option in the video settings menuMC-279653 - Block Entity Data desynchronizes after subsequent setblock commandsThe highlight of Minecraft snapshot 25w04a is the reversal of the controversial movement nerf, addressing a key concern for players. Beyond that, the technical changes provide valuable tools for players working on data packs, and the bug fixes contribute to a smoother and more polished gameplay experience.This snapshot may not introduce flashy new features, but it reinforces Mojang's commitment to improving the game's core mechanics and listening to player feedback.