
As the year draws to a close, we gather in the shipping room one more time to press the buttons that make snapshots happen! In this final release of 2025 we're (among other things) upgrading our runtime version of Java, giving villager trades the data-driven treatment, and adding a new swing command that swings the arms of entities. Finally, all our builds will now be unobfuscated moving forward.
Did we miss something? Oh, yeah! This snapshot marks the beginning of our new version numbering system for Minecraft on Java Edition. We'll see you next year for more snapshots and the eventual release of what will be Java Edition 26.1!
Happy mining!
F3 + 4 keybindF3 + 4 keybindlooking_at_block and looking_at_fluid debug entries no longer show tagslooking_at_block_tagslooking_at_fluid_tagslooking_at_entity_tagslooking_at_block -> looking_at_block_statelooking_at_fluid -> looking_at_fluid_statepiglin.* similar to how Villager inventories can be accessed using villager.*Trades offered by Villagers and Wandering Traders are now data-driven and can be customized by datapack developers
villager_trade folder, represents a blueprint for trades which is used by Villagers and Wandering Traders to generate actual tradeswants, an object representing an item type and number of them needed to tradeid, the id of the itemcount, an optional number provider representing how many of the item is needed for the trade1components, an optional component map representing the expected data components on the itemadditional_wants, an optional object representing an additional item required by the merchant, has the same format as wantsgives, an Item Stack representing the resulting item given by the merchant when tradinggiven_item_modifiers, a optional list of Item Modifiers representing modifiers to apply to the item in gives such as enchantments or potions, used to add dynamism to the trade rather than hardcoding certain valuesstored_enchantment component containing an enchantment in the #double_trade_price tag, then the count of wants is doubledmax_uses, an optional number provider representing the maximum number of times a trade may be used1 if the number provider returns a lower value4reputation_discount, an number provider representing how much factors such as demand, discounts or penalties affects the cost represented by wants0.0 if the number provider returns a lower value0.0xp, an optional number provider representing the amount of xp a merchant gets when the trade is done0 if the number provider returns a lower value1merchant_predicate, a Predicate representing conditions on the merchant that need to be met for the trade to be offereddouble_trade_price_enchantments, an optional enchantment id, list of namespaced enchantment IDs, or hash-prefixed enchantment tag representing enchantments that will double the additional cost from minecraft:enchant_randomly and minecraft:enchant_with_levels if they have include_additional_cost_component set to true and if the item has one of the provided values in its minecraft:stored_enchantments componentAn example trade of an emerald and a book for an enchanted book offered only by Desert Villagers
{
"additional_wants": {
"id": "minecraft:book"
},
"double_trade_price_enchantments": "#minecraft:double_trade_price",
"given_item_modifiers": [
{
"function": "minecraft:enchant_randomly",
"include_additional_cost_component": true,
"only_compatible": false,
"options": "#minecraft:trades/desert_common"
},
{
"function": "minecraft:filtered",
"item_filter": {
"items": "minecraft:enchanted_book",
"predicates": {
"minecraft:stored_enchantments": [
{}
]
}
},
"on_fail": {
"function": "minecraft:discard"
}
}
],
"gives": {
"count": 1,
"id": "minecraft:enchanted_book"
},
"max_uses": 12.0,
"merchant_predicate": {
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"predicates": {
"minecraft:villager/variant": "minecraft:desert"
}
}
},
"reputation_discount": 0.2,
"wants": {
"id": "minecraft:emerald"
}
}
trade_set folder, they're groupings of trades offered by Villagers and Wandering Traders<profession>/level_<level> for Villagers, as well as wandering_trader/buying, wandering_trader/special, wandering_trader/common for Wandering Traderstrades, a villager trade id, list of namespaced villager trade IDs, or hash-prefixed villager trade tag representing the trades that are part of this trade setamount, a number provider representing the amount of trades to be generated from this set when usedtrades then it will only generate until all trades have been used once, unless allow_duplicates is set to trueallow_duplicates, a boolean representing if the trade set can use the same Villager Trade multiple times to generate tradesfalserandom_sequence, an optional named random sequence that determines which trades are generatedAn example trade set offering 2 trades from the #minecraft:armorer/level_1 tag, allowing duplicates
{
"amount": 2.0,
"trades": "#minecraft:armorer/level_1",
"random_sequence": "minecraft:trade_set/armorer/level_1",
"allow_duplicates": true
}
swing#swing will succeed for those entities, but clients will only display it when possibleSyntax: /swing <entity selector> <mainhand|offhand>
minecraft:visual/block_light_tint#Tint of the block light. Block light color start as dark grey at low light levels, becomes tinted by this attribute at medium levels and turns white at high levels. By default, it provides the yellowish tint of torches. Bright colors work best for this attribute, with at least one color component being fully bright. The tint applies globally to all light sources visible on the screen. Individual lights can not be tinted differently.
#FFD88Cminecraft:visual/ambient_light_color#Defines both the ambient light tint and brightness. This light is applied to the world at 0 light level. Block and sky light are added on top of it.
#0A0A0A for the Overworld, #302821 for the Nether, #3f473f for the Endminecraft:visual/night_vision_color#This color is used similarly to ambient light color. When the Night Vision effect is active, per-component maximum of minecraft:visual/night_vision_color and minecraft:visual/ambient_light_color is used as ambient color. Night Vision is not tinted by default.
#999999minecraft:additional_trade_cost#count needed of the gives item in a villager trade, is removed after a trade has been generatedminecraft:villager_trade loot table type which takes the following parameters:this, the entity offering the tradeorigin, the block position of the entity at its feetminecraft:set_random_dyes#minecraft:dyed_color data component if the item is in the #dyeable tag Fields:conditions - conditions for the function to applynumber_of_dyes - number provider representing the number of random dyes out of sixteen to apply to the itemminecraft:set_random_potion#minecraft:potion_contents data component on an item Fields:conditions - conditions for the function to applyoptions - optional potion id, list of namespaced potion IDs, or hash-prefixed potion tag, representing the possible potions to select frompotions registryminecraft:enchant_with_levels#Now also takes the following field:
include_additional_cost_component - optional boolean representing if an minecraft:additional_cost_component should be added to the item based on the cost of the enchantmentfalselevels number provider and is the same that is used to determine what enchantment level is used for enchantingminecraft:enchant_randomly#Now also takes the following field:
include_additional_cost_component - optional boolean representing if an minecraft:additional_cost_component should be added to the item based on the cost of the enchantmentfalselevels or its default value using the following formula: 2 + random(0, 5 + level * 10) + 3 * levelplayer Sub-Predicate#food - A Food predicatelevel - optional integer min/max range specifying the required food levelsaturation - optional float min/max range specifying the required saturation levelminecraft:sum#summands, a list of number providerspost_piercing_attack component no longer only works for a player if that player has a certain food level#<profession>/level_<level>, up to level 5#common_smith/level_<level> tags representing common trades among armorers, weaponsmiths and toolsmiths, up to level 5#wandering_trader/buying, #wandering_trader/special, #wandering_trader/commontrades/desert_specialtrades/jungle_specialtrades/plains_specialtrades/savanna_specialtrades/snow_specialtrades/swamp_specialtrades/taiga_special#tradeable - all potion effects that can appear in villager tradeslightmap.fsh shader was significantly modified.LightmapInfo uniform now has two new fields:BlockLightTintNightVisionColorAmbientLightFactor field was removed, its value is now premultiplied into AmbientColorDarkenWorldFactor was renamed to BossOverlayWorldDarkeningFactor