Do you smell that? Ah yes, it's the magical, tell-tale scent of release day Tuesday - and what a release day it is!
Today we are shipping Minecraft: Java Edition 1.20.5, also known as the Armored Paws drop! Travel to the Savanna and Badlands biomes and say hello to the endearing Armadillos. Find and befriend eight new Wolf variants and equip your canine companions with dyable armor made from Armadillo Scutes and go adventuring together!
On the technical side, the Armored Paws drop is also introducing a change to how Java Edition spawn chunks work, the details of which we covered in the changelog for Snapshot 24w03a earlier this year. The tl;dr version of this change is that we're making the spawn chunk radius a configurable game rule and decreasing the default value by 98%. This should translate to a noticeable performance boost for most players!
So what are you waiting for? Stock up on food and water and start reading through the complete 1.20.5 changelog below. It's a looong one.
Happy scute brushing!
New Wolf variants have been added. The variant is determined by the biome they spawn in. Wolves spawn in packs, with a default pack size of 4.
When summoned in other ways (e.g. using the Spawn Egg or using the summon
command), the variant selection follows the natural spawning biome rules with the following extensions:
Isn't It Scute?
- Get Armadillo Scutes from an Armadillo using a BrushShear Brilliance
- Remove Wolf Armor from a Wolf using ShearsGood as New
- Repair a damaged Wolf Armor using Armadillo ScutesThe Whole Pack
- Tame one of each Wolf variantThe UI has been updated to sport a fresher look and to be more consistent when it comes to the layout of different UI elements, all while retaining the essence and feel of the old screens.
spawnChunkRadius
to set the size of the spawn chunksminecraft.ChunkRegionRead
) and writes (minecraft.ChunkRegionWrite
)handshake/game_profile
packetchat_command_signed
packet has been split from chat_command
accepts-transfers
property to true
in the server.properties
filehello
packetregion-file-compression
with 3 possible values:deflate
, the default option. Uses the old algorithmlz4
uses LZ4 algorithm, which requires less CPU time to compress and decompress but uses more disk spacenone
does not compress the data127
can now be used for custom implementations of region file compressionforceUpgrade
option now also upgrades contents of entities
and poi
directories of the worldrecreateRegionFiles
dedicated server startup parameterforceUpgrade
, but will also rewrite all the chunks independently of whether they have been upgradedregion-file-compression
server property will recompress all region files in the new formatF3 + 2
min
, avg
, max
aggregate values are based on the sum of the first 3 sectionsreset_chat
packet in configuration phaseThe Data Pack version used by the game is now 41. These are the changes compared to version 26, used in 1.20.4.
scute
item to turtle_scute
We have made some large changes to how Item Stack-specific properties are stored and represented in this release, replacing the current NBT 'tag' with structured 'components'.
This change has been made in order to:
We do however believe that this builds critical foundations for future extensibility. We have taken care to ship these changes all at once, with the hope that this avoids future incremental changes requiring many small updates to packs.
The current NBT 'tag' has existed for quite some time, and we are aware that a lot of clever techniques have been developed with this for commands and data packs. Over the course of the snapshot series, we have hugely appreciated your feedback on these changes, allowing us to avoid (often undocumented) functionality being lost without suitable alternatives.
tag
field) has been replaced with structured 'components'minecraft:custom_data
componentminecraft:stick
) hold a set of default components on an item that individual item stacks can overrideitems.json
generated in reports
directoryblocks.json
report (note: those definitions are not used yet and present only for informational purposes)These are item stack components that replace existing functionality that was formerly specified in item NBT. All commands and data definitions will need to be upgraded to use these formats. Items in-world will however be automatically upgraded.
tag
will be moved into herecustom_data={some:'data'}
set_custom_data
and copy_custom_data
loot functionsDamage
tagdamage=12
max_damage
component), has an implicit default value of: 0
set_damage
loot functionRepairCost
tagrepair_cost=12
0
Unbreakable
boolean tagshow_in_tooltip
: boolean (default: true
)true
, an 'Unbreakable' line will be included in the tooltipHideFlags
tagunbreakable={}
, unbreakable={show_in_tooltip:false}
Enchantments
taglevels
: object of enchantment (id string) to level (integer [0; 255])show_in_tooltip
: boolean (default: true
)false
, no enchantments will be shown in the item tooltipHideFlags
tagenchantments={levels:{'minecraft:protection':2},show_in_tooltip:false}
enchantments={sharpness:1}
{levels:{}}
set_enchantments
, enchant_randomly
, and enchant_with_levels
loot functionsminecraft:enchantments
, the effects provided by enchantments do not apply from this componentStoredEnchantments
tag on Enchanted Booksminecraft:enchantments
show_in_tooltip
value replaces 6th bit of HideFlags
tag{levels:{}}
display.Name
tagcustom_name='{"text": "This item is renamed!", "color": "red"}'
set_name
loot functiondisplay.Lore
taglore=['{"text": "The cake is a lie!"}']
[]
set_lore
loot functionCanDestroy
tagpredicates
: list of block predicatesblocks
: block, list of blocks, or hash-prefixed block tagnbt
: block entity NBT to matchstate
: map of state property key to values to matchshow_in_tooltip
: boolean (default: true
)HideFlags
tagcan_break={predicates:[{blocks:'minecraft:furnace',state:{facing:'north'}]}
can_break={blocks:'minecraft:stone'}
CanPlaceOn
tagpredicates
: list of block predicatescan_break.predicates
show_in_tooltip
: boolean (default: true
)HideFlags
tagcan_place_on={predicates:[{blocks:'minecraft:furnace',state:{facing:'north'}]}
can_place_on={blocks:'minecraft:stone'}
#minecraft:dyeable
item tag)display.color
tagrgb
: integer, RGB valueshow_in_tooltip
: boolean (default: true
)HideFlags
tagdyed_color={rgb:16711680}
dyed_color=16711680
AttributeModifiers
tag{modifiers:[]}
)modifiers
: list of attribute modifierstype
: attribute idAttributeName
slot
: one of:any
(default)hand
: either in main or offhand (new)armor
: any armor slot (new)mainhand
offhand
head
chest
legs
feet
body
(new)Slot
uuid
: uuid, uniquely represents this modifierUUID
name
: string, human-readable nameName
amount
: double, number of units to modify this attribute (controlled by operation
)Amount
operation
: one of:add_value
(was 0
): Adds amount
to the attributeadd_multiplied_base
(was 1
): Adds amount
* base value to the attributeadd_multiplied_total
(was 2
): Adds amount
* total value (from all previous modifiers) to the attributeOperation
with integer idsshow_in_tooltip
: boolean (default: true
)HideFlags
tagattribute_modifiers={modifiers:[{type:'minecraft:generic.scale',uuid:[1,2,3,4],name:'Big!',amount:1.0,operation:'add_multiplied_base'}]}
attribute_modifiers=[{type:'generic.scale',uuid:[1,2,3,4],name:'Big!',amount:1.0,operation:'add_multiplied_base'}]
set_attributes
loot functionCharged
and ChargedProjectiles
tagscharged_projectiles=[{id:'minecraft:arrow'}]
modify_contents
and set_contents
loot functionsminecraft:intangible_projectile
charged_projectiles
componentintangible_projectile={}
Items
tagbundle_contents=[{id:'minecraft:poisonous_potato'}]
[]
modify_contents
and set_contents
loot functionsdisplay.MapColor
tagmap_color=16711680
4603950
Decorations
tagtype
: one of:player
(was 0
)frame
(was 1
)red_marker
(was 2
)blue_marker
(was 3
)target_x
(was 4
)target_point
(was 5
)player_off_map
(was 6
)player_off_limits
(was 7
)mansion
(was 8
)monument
(was 9
)banner_white
(was 10
)banner_orange
(was 11
)banner_magenta
(was 12
)banner_light_blue
(was 13
)banner_yellow
(was 14
)banner_lime
(was 15
)banner_pink
(was 16
)banner_gray
(was 17
)banner_light_gray
(was 18
)banner_cyan
(was 19
)banner_purple
(was 20
)banner_blue
(was 21
)banner_brown
(was 22
)banner_green
(was 23
)banner_red
(was 24
)banner_black
(was 25
)red_x
(was 26
)village_desert
(was 27
)village_plains
(was 28
)village_savanna
(was 29
)village_snowy
(was 30
)village_taiga
(was 31
)jungle_temple
(was 32
)swamp_hut
(was 33
)trial_chambers
(new)type
byte with numeric idsx
: double, world coordinatez
: double, world coordinaterotation
: float, clockwise rotation from north in degreesrot
doublemap_decorations={'Some marker':{type:'target_x',x:123.0,z:-45.0,rotation:0.0f}}
{}
map
tagmap_id=1
minecraft:custom_model_data
property in the item modelCustomModelData
tagcustom_model_data=43
set_custom_model_data
loot functionPotion
, CustomPotionColor
, and custom_potion_effects
tagspotion
: potion id (optional)custom_color
: integer, RGB value (optional)custom_effects
: list of effect instances (default: []
)potion_contents={potion:'minecraft:invisibility',custom_color:16711680}
potion_contents="invisibility"
{}
set_potion
loot functionminecraft:writable_book_content
pages
and filtered_pages
tags{raw:'...'}
wrappingfiltered_pages
are pulled by index keys into the relevant page entry under the filtered
fieldpages
: list (max: 100 entries) of either:raw
: string, page plain text contentsfiltered
: string, filtered page contents (optional)raw
writable_book_content={pages:['Hello world!']}
or writable_book_content={pages:[{raw:'Hello world!'}]}
{pages:[]}
set_writable_book_pages
loot functionminecraft:written_book_content
pages
, filtered_pages
, title
, filtered_title
, author
, generation
, and resolved
tagspages
: list of filtered chat componentswritable_book_contents
pages, except uses JSON chat component strings which can be formattedtitle
: filtered string (same format as pages)author
: string, player namegeneration
: integer [0; 3]0
= original)resolved
: booleantrue
if the chat components in this book have already been resolved (entity selectors, scores substituted)false
, it will be resolved when opened by a playerwritten_book_content={pages:['"Hello world!"'],title:{raw:'"A delightful read"'},author:'Herobrine',generation:1,resolved:true}
set_written_book_pages
and set_book_cover
loot functions#minecraft:trimmable_armor
item tag (although, this tag is still used for recipes)Trim
tag of the same formatpattern
: pattern id (or inline pattern)material
: material id (or inline material)show_in_tooltip
: boolean (default: true
)HideFlags
tagtrim={pattern:'minecraft:silence',material:'minecraft:redstone'}
effects
tag of the same formatid
: effect idduration
: integer, tick count (default: 160
)suspicious_stew=[{id:'minecraft:poison'}]
[]
set_stew_effect
loot functionminecraft:hide_additional_tooltip
HideFlags
taghide_additional_tooltip={}
DebugProperty
tagdebug_stick_state={'minecraft:turtle_egg':'eggs','minecraft:furnace':'facing'}
{}
EntityTag
tag, with same behaviorid
field with the entity typeentity_data={id:'minecraft:pig',Health:1.0f}
NoAI
, Silent
, NoGravity
, Glowing
, Invulnerable
, Health
, Age
, Variant
, HuntingCooldown
, and BucketVariantTag
tagsbucket_entity_data={NoAI:1,Age:43}
{}
instrument
tag of same formatinstrument='minecraft:ponder_goat_horn'
set_instrument
loot functionRecipes
tag of same formatrecipes=['minecraft:acacia_boat','minecraft:anvil']
[]
LodestonePos
, LodestoneDimension
, and LodestoneTracked
tagstarget
: object with fields (optional)pos
: integer array of x, y, and zdimension
: dimension idtracked
: boolean (default: true
)true
, when the Lodestone at the target position is removed, the target
field will be removedlodestone_tracker={target:{pos:[13,64,-43],dimension:'minecraft:the_nether'}}
Explosion.Type
, Explosion.Colors
, Explosion.FadeColors
, Explosion.Trail
, and Explosion.Flicker
tagsshape
: one ofsmall_ball
(was 0
)large_ball
(was 1
)star
(was 2
)creeper
(was 3
)burst
(was 4
)Type
numeric idscolors
: integer array, RGB values (default: []
)fade_colors
: integer array, RGB values (default: []
)has_trail
: boolean (default: false
)has_twinkle
: boolean (default: false
)Flicker
tagfirework_explosion={shape:'large_ball',colors:[16711680],has_trail:true}
set_firework_explosion
loot functionFireworks.Explosions
and Fireworks.Flight
tagsexplosions
: list of explosions (max: 256 entries)minecraft:firework_explosion
componentflight_duration
: unsigned byte, number of gunpowder in this rocketfireworks={explosions:[{shape:'large_ball',colors:[16711680],has_trail:true}],flight_duration:2}
{explosions:[],flight_duration:1}
set_fireworks
loot functionSkullOwner
tagname
is specified, it will be resolved into the corresponding player ID and skin dataSkullOwner
which only supported resolution by name, if only id
is specified, the profile and skin will be resolved from this UUIDname
: string, player profile name (optional)item_name
component which is persisted when placed and brokenid
: uuid, player profile id (optional)properties
: list of properties (optional)name
: string, property name (e.g. textures
)value
: string (base64 encoded texture data)signature
: string (optional)profile={name:'MHF_Sheep'}
profile='MHF_Sheep'
fill_player_head
loot functionBlockEntityTag.note_block_sound
tagnote_block_sound='minecraft:ambient.cave'
BlockEntityTag.Base
tagwhite
(was 0
)orange
(was 1
)magenta
(was 2
)light_blue
(was 3
)yellow
(was 4
)lime
(was 5
)pink
(was 6
)gray
(was 7
)light_gray
(was 8
)cyan
(was 9
)purple
(was 10
)blue
(was 11
)brown
(was 12
)green
(was 13
)red
(was 14
)black
(was 15
)base_color='magenta'
BlockEntityTag.Patterns
tagpattern
: banner pattern registry idPatterns[].Pattern
color
: dye color namePatterns[].Color
banner_patterns=[{pattern:'minecraft:stripe_top',color:'red'}]
[]
set_banner_pattern
loot functionBlockEntityTag.sherds
tag of same format['arms_up_pottery_sherd','angler_pottery_sherd','danger_pottery_sherd','shelter_pottery_sherd']
['minecraft:brick','minecraft:brick','minecraft:brick','minecraft:brick']
BlockEntityTag.Items
tagslot
: integer [0; 255], representing a slot in the containeritem
: item stackcontainer=[{slot:7,item:{id:'diamond_pickaxe',components:{'minecraft:unbreakable':{}}}}]
[]
modify_contents
and set_contents
loot functionsBlockEntityTag.Bees
tagentity_data
: map of string to stringid
: entity idticks_in_hive
: integermin_ticks_in_hive
: integerbees=[{entity_data:{id='minecraft:bee'},ticks_in_hive:3,min_ticks_in_hive:10}]
[]
BlockEntityTag.Lock
taglock='hunter2'
BlockEntityTag.LootTable
and BlockEntityTag.LootTableSeed
tagsloot_table
: loot table idseed
: long, pseudorandom seed to resolve the loot table with (optional)0
, the seed will be picked randomly when the loot table is evaluatedcontainer_loot={loot_table:'minecraft:chests/buried_treasure',seed:123}
set_loot_table
loot functionBlockEntityTag
tag, with same behaviorid
field with the block entity typeblock_entity_data={id:'minecraft:chest',Items:[{Slot:1,item:'minecraft:diamond'}]}
BlockStateTag
tagblock_state={eggs:'10'}
These are new components that did not exist in the previous item tag, and support new features and use-cases.
minecraft:enchantment_glint_override
Enchantments
tag would previously behave to add a glinttrue
, an item without an enchantment glint will display a glintfalse
, an item with a glint will not display this glint (either from enchantments or intrinsic properties of the item)enchantment_glint_override=true
nutrition
: non-negative integer, number of food points to restore when eatensaturation
: float, amount of saturation to restore when eatencan_always_eat
: boolean (default: false
)true
, this food can be eaten even if not hungryeat_seconds
: float (default: 1.6
)effects
: list of effects to apply when eaten (default: []
)effect
: effect instance (same format as custom_effects
in minecraft:potion_contents
component)probability
: float between 0 and 1, chance for the effect to be applied (default: 1
)food={nutrition:4,saturation:0.1}
max_damage
componentmax_stack_size=4
64
)max_stack_size
component greater than 1damage
component is also present on the itemmax_damage=123
rules
: list of rule entries to apply in orderblocks
: single block, list of blocks, or #
-prefixed block tag to matchspeed
(optional): float, overrides the mining speed if present and matchedcorrect_for_drops
(optional): boolean, overrides whether this tool is considered 'correct' if present and matchedtrue
will cause the block to mine at its most efficient speed, and drop items if the targeted block requires thatdefault_mining_speed
: float, mining speed to use if no rules match and override mining speed (default: 1.0
)damage_per_block
: non-negative int, amount of durability to remove each time a block is mined with this tooltool={rules:[{blocks:"#mineable/pickaxe",speed:4.0,correct_for_drops:true}]}
custom_name
:item_name
can't be changed or removed in Anvilitem_name
is not styled with italics when displayed to playeritem_name
does not show labels where applicable (for example: banner markers, names in item frames)set_name
loot functionfire_resistant={}
common
(default): white name, or aqua when enchanteduncommon
: yellow name, or aqua when enchantedrare
: aqua name, or light purple when enchantedepic
: light purple namerarity=rare
minecraft:ominous_bottle_amplifier
ominous_bottle_amplifier=3
set_ominous_bottle_amplifier
loot functionid
(string) and Count
(byte) fields have been replaced with id
(namespaced string) and count
(integer) fieldsicon
field in advancements, items in chat component hover events, and the result
field in smelting recipes (result
and count
are no longer inlined)count
field is optional (defaults to 1
if not specified)tag
field has been removed, and any remaining contents will end up in the minecraft:custom_data
component when upgradingcomponents
field stores all components attached to an item{..., components: {'minecraft:damage': 12}}
!
prefix (e.g. "!minecraft:damage": {}
) will cause this component to be removedair
item, or count
0)HandItems
in living entities), an empty map ({}
) is used to represent empty stacksbody_armor_item
and body_armor_drop_chance
to all entities that currently have HandItems
and ArmorItems
, and handle the same way as HandItems
and ArmorItems
ArmorItem
, Llamas DecorItem
, and Wolf's armor
has been changed to use body_armor_item
and body_armor_drop_chance
instead'minecraft:damage': 0
components
field in item predicates)amplifier
: 0
duration
: 0
ambient
: false
show_particles
: true
FactorCalculationData
has been removed from mob effect instance tagsitem
minecraft:potion_contents
component in a potion_contents
field:Potion
-> potion_contents.potion
Color
-> potion_contents.custom_color
effects
-> potion_contents.custom_effects
minecraft:banner_patterns
component in a patterns
field:Patterns[].Pattern
(string short id) -> patterns[].pattern
(string pattern registry id)Patterns[].Color
(integer dye id) -> patterns[].color
(string dye name)Bees[].EntityData
-> bees[].entity_data
Bees[].TicksInHive
-> bees[].ticks_in_hive
Bees[].MinOccupationTicks
-> bees[].min_ticks_in_hive
FlowerPos
-> flower_pos
SkullOwner
and ExtraType
fields in Player Head blocks have been replaced with a profile
field, with the same format as the item componentcustom_name
tag, which will be copied to and from the item form when broken or placedequipment
field to the spawn data present in the SpawnPotentials
of Monster Spawners and spawn_potentials
of Trial Spawner configsloot_table
- A loot table used to generate the equipmentslot_drop_chances
- An optional map of equipment slot to specified drop chanceslot_drop_chances: 0.0f
will apply a chance of 0% to all slotsequipment: {loot_table: "minecraft:equipment/trial_chamber", slot_drop_chances: {"head": 0.0f, "chest": 0.25f, "legs": 1.0f, "feet": 0.25f}}
Non-default components on item stacks containing block items are now stored on block entities when placed.
copy_components
function to loot tablecomponents
custom_name
) are still handled by legacy serialization, which means they might not be present in thereX
, Y
, and Z
for consistencyFlowerPos
and HivePos
in Bees have been renamed to flower_pos
and hive_pos
FlowerPos
in Beehives has been renamed to flower_pos
BeamTarget
in End Crystals has been renamed to beam_target
Leash
in all leashable entities has been renamed to leash
PatrolTarget
in patrolling mobs has been renamed to patrol_target
ExitPortal
in End Gateways has been renamed to exit_portal
WanderTarget
in Wandering Traders has been renamed to wander_target
config
loot_table
- The loot table that will be ejected upon being unlocked"minecraft:chests/trial_chambers/reward"
activation_range
- The range any player who hasn't unlocked the Vault must be within for it to open its keyhole4
deactivation_range
- The range all viable players must be outside of for the Vault to close its keyhole4.5
key_item
- An Item Stack that is required to unlock the Vaultoverride_loot_table_to_display
- An optional loot table which will be used for displaying items inside the cage instead of results from the config's loot_table
shared_data
connected_particles_range
- The range players who have not unlocked the Vault must be within before particles will flow from them4.5
container.*
playsound
command can now be used without specifying the player (assuming @s
) and without specifying the mixer (assuming master
)execute if|unless items
to check and count itemstransfer
command/give
, /item
, /loot
use an updated item syntax=
(e.g. wooden_pickaxe[damage=23]
)netherite_hoe[damage=5,repair_cost=2]
)/give @s wooden_pickaxe[damage=-34]
is not valid{...}
) has been removed, and replaced with custom_data
assignment/give @s stick{foo:'bar'}
becomes /give @s stick[custom_data={foo:'bar'}]
/attribute
command have been renamed:add
-> add_value
multiply_base
-> add_multiplied_base
multiply
-> add_multiplied_total
execute if|unless items
execute if|unless items <source> <slots> <item_predicate>
command can be used to count items<source>
is the same as one used in item
command, i.e.block <x> <y> <z>
entity <target>
(selector can return multiple entities)<slots>
can accept single slot (like container.0
) or a range (like container.*
)<item_predicate>
is the same as item predicate in clear
commandThe item predicate syntax (used in execute if|unless items
and clear
commands) has been significantly expanded.
<type> [comma-separated list of <test>]
<type>
can be one of:#
*
to match any item<test>
can have one of 3 forms:<component_id>=<value>
- match exact value of component<value>
is a representation of component value in SNBT format (same as in item give
argument)damage=0
by default) will be assumed to exist on the target item if not specified/clear @s diamond_pickaxe[damage=0]
will match only undamaged Diamond Pickaxes/clear @s diamond_pickaxe
will match any Diamond Pickaxe, irrespective of damageminecraft:custom_data
component<component_id>
- check if component exists<predicate_id>~<value>
- check item sub-predicate<value>
is a representation of item sub-predicate in SNBT format (but otherwise the same as those used for advancement and loot table JSON files)*[damage~{durability:{min:3}}]
will match any stack with at least 3 uses leftminecraft:count
can be used for matching the stack sizecount=<positive int>
will pass only when the stack size equals the given valuecount~<int range>
will pass when the stack size is in the specified range*[count~{max:2}]
will match any stack with count <= 2count
will always pass<test>
entry can be negated by prefixing with !
*[!count=1]
will match any stack that has count other than 1<test>
elements can be also joined with |
to check multiple alternatives*[!damage|damage=0]
will look for items without damage component or with 0
damage{}
) has been replaced by the custom_data
predicatestick{a:2}
becomes stick[custom_data~{a:2}]
item
commands and slots
entity predicates) now include slot rangescontainer.*
- contains container.0
to container.53
hotbar.*
- contains hotbar.0
to hotbar.8
inventory.*
- contains inventory.0
to inventory.26
enderchest.*
- contains enderchest.0
to enderchest.26
villager.*
- contains villager.0
to villager.7
horse.*
- contains horse.0
to horse.14
weapon.*
- contains weapon.mainhand
and weapon.offhand
armor.*
- contains armor.head
, armor.chest
, armor.legs
, armor.feet
, armor.body
player.cursor
- item held by player on screenplayer.crafting.0
- player.crafting.3
, player.crafting.*
- player's crafting slotscontents
- for single-slot entities like item frames, item displays, or dropped item entitieshorse.armor
slot name with armor.body
, which is applicable to all mobsArguments in the following commands that previously accepted namespaced ids of loot tables, modifiers and predicates can now also accept inline definitions:
loot
item
execute if predicate
Values have the same structure as matching JSON files, though they are encoded as SNBT. Example:
execute if predicate {condition:weather_check, raining:true}
New command that triggers a transfer of a player to another server. Only exists on dedicated servers.
Syntax:
transfer <hostname> [<port>] [<players>]
Parameters:
hostname
: String describing the hostname of the server to connect toport
: Integer denoting the port number of the server to connect to - if omitted, 25565 is usedplayers
: The players to transfer - if omitted, @s
is usedtag
field has been removedblocks
field now supports a single entry, hash-prefixed block tag, or list of blockstag
field has been removedfluid
-> fluids
, and supports a single entry, hash-prefixed fluid tag, or list of fluidsbiome
-> biomes
, and supports a single entry, hash-prefixed biome tag, or list of biomesstructure
-> structures
, and supports a single entry, hash-prefixed structure tag, or list of structurestype
field now supports a single entry, hash-prefixed entity type tag, or list of entity typesslots
, for matching item slotsequipment
field format has been updatedbody
field to match the item in the body armor slot of an entityany
entity type-specific predicate (which had no effect)slots
allows checking a single or multiple slots on any entityitem
commands) to item predicatesExample:
{
"condition": "minecraft:entity_properties",
"entity": "this",
"predicate": {
"slots": {
"container.*": {
"items": "dirt"
}
}
}
}
wolf
type-specific entity predicate
wolf
sub-predicate has been added to match Wolf variantsvariant
- Wolf variant to match (single entry, list of entries or tag)raider
type-specific entity predicate
raider
sub-predicate has been added to match raidershas_raid
- Match whether the raider is in an active raidis_captain
- Match whether the raider is a captaincat
, frog
, painting
type-specific entity predicate
variant
field now accepts single entries, list of entries or tagsItem predicate format has been updated:
tag
field has been removeditems
field now supports a single entry, hash-prefixed item tag, or list of itemscomponents
field matches exact components"components": { "minecraft:damage": 0 }
will match only undamaged itemspredicates
predicates
components
field on item stacksenchantments
- field moved to sub-predicate minecraft:enchantments
stored_enchantments
- field moved to sub-predicate minecraft:stored_enchantments
potion
- field moved to sub-predicate minecraft:potion_contents
custom_data
- field moved to sub-predicate minecraft:custom_data
durability
field has been expanded to minecraft:damage
predicate:minecraft:damage
componentminecraft:damage
component can never matchminecraft:unbreakable
componentdamage
- optional bounds for value of minecraft:damage
componentdurability
- optional bounds for durability (max damage minus value of minecraft:damage
)minecraft:enchantments
, minecraft:stored_enchantments
, minecraft:potion_contents
and minecraft:damage
require matching component to exist on itemminecraft:damage
componentminecraft:enchantments
have default values, so they will always match/clear
and /execute if|unless items
minecraft:custom_data
predicate now accepts both SNBT data written as a string (existing format) and unflattened tags*[custom_data~{a:1}]
and *[custom_data~"{a:1}"]
are equivalentBefore:
"item": {
"enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
After:
"item": {
"predicates": {
"minecraft:enchantments": [
{
"enchantment": "minecraft:silk_touch",
"levels": {
"min": 1
}
}
]
}
}
size
- integer range to match against collection sizecontains
- a list of element predicates{contents:[{item:diamond}]}
- will match when there is at least one diamond item{contents:[{item:diamond}, {item:dirt}]}
- will match when there is at least one diamond item and at least one dirt itemcount
- a list of matchers on element countstest
- element matchercount
- optional integer range to check against number of elements passing test
{count:[{count:3,test:{items:diamond}}]}}
will match only when there are exactly 3 stacks of diamonds (no matter the stack size)container
component (like Shulker Box)items
- optional collection matchercontainer~{items:{size:3}}
will only pass if there are exactly 3 non-empty stacks in containerbundle_contents
componentitems
- optional collection matcherfirework_explosion
componentshape
- optional matcher for shape, same values as shape
field in minecraft:firework_explosion
componenthas_trail
- optional booleanhas_twinkle
- optional booleanfireworks
componentexplosions
- optional collection matcher for firework_explosion
predicatesflight_duration
- optional integer range check for flight durationminecraft:fireworks~{explosions:{contains:[{shape:small_ball}]}}]
- matches if firework has at least one explosion with small_ball
shapewritable_book_content
componentpages
- optional collection matcher for strings (matching only the unfiltered/raw contents of each page)written_book_content
componentpages
- optional collection matcher for chat components (matching only the unfiltered/raw contents of each page)author
- optional string valuetitle
- optional string value (matching only value)generation
- optional integer range check for generationresolved
- optional booleanattribute_modifiers
componentmodifiers
- optional collection matcher for following entries with following fields:attribute
- optional id, list of ids or tag for attribute to be matchedid
- optional UUIDname
- optional stringamount
- optional double range checkoperation
- optional operation type (same values as operation
field from attribute_modifiers
component)slot
- optional applicable slot type (same values as slot
field from attribute_modifiers
component)trim
componentmaterial
- optional id, list of ids or tag for material to be matchedpattern
- optional id, list of ids or tag for pattern to be matcheditem_used_on_block
default_block_use
any_block_use
crafter_recipe_crafted
recipe_crafted
):player
- an entity predicate matching nearby players in an 8 block radiusrecipe_id
- the ID of the recipe being craftedingredients
- a list of item predicates matching the ingredients that form the recipe being craftedfall_after_explosion
player
- entity predicate matching the player who is fallingstart_position
- location predicate matching the position the player was at when they were hit by the explosion or burstdistance
- distance predicate matching how far the player must be from start_position
to cause the trigger to activatecause
- entity predicate matching the entity that caused the explosion or burst to happengameplay/panda_sneeze
loot table for drops when Pandas sneezeloot_table
(which returns all items from provided nested loot table) now has the following syntax:value
- can be either:minecraft:equipment
used for equipping items onto mobsstorage
- namespaced id of command storagepath
- NBT path to fieldtype
field has been removedcomponent
:container
, bundle_contents
, charged_projectiles
bundle_contents
and charged_projectiles
will ignore empty stacksset_custom_data
(renamed from set_nbt
)
custom_data
component of the target itemtag
field now accepts both SNBT data written as a string (existing format) and unflattened tagscopy_custom_data
(renamed from copy_nbt
)
custom_data
component of the target itemtarget
to specify which name should be setcustom_name
- sets custom_name
component (default)item_name
- sets item_name
componentslot
field now supports any
, armor
, hand
, and body
valuesoperation
values have been renamed:addition
-> add_value
multiply_base
-> add_multiplied_base
multiply_total
-> add_multiplied_total
replace
field to the set_attributes
loot function (default: true
)false
, attributes will be appendedreplace
field has been removedmode
like set_fireworks
and set_written_book_pages
conditions
- optional list of conditions to filter this functioncomponents
- map of component id to component value (format varied by id)!
prefix (e.g. "!minecraft:damage": {}
) will cause this component to be removedcopy_name
and copy_nbt
functionsconditions
- optional list of conditions to filter this functionsource
- source type to pull from"block_entity"
include
- optional list of data components to be copied from sourceexclude
- optional list of data components to be excluded from copyingconditions
- optional list of conditions to filter this functioncomponent
- target componentcontainer
, bundle_contents
, charged_projectiles
modifier
- function or list of functions to be applied to every item inside containerconditions
- optional list of conditions to filter this functionitem
- new item typeconditions
- optional list of conditions to filter this functionitem_filter
- item predicate used to match itemsmodifier
- functions to apply to matching itemscustom_model_data
component on the target item according to a number providerconditions
- optional list of conditions to filter this functionvalue
- integer number providerominous_bottle_amplifier
component on the target item according to a number providerconditions
- optional list of conditions to filter this functionamplifier
- a number provider used to generate the ominous_bottle_amplifier
componentminecraft:fireworks
componentconditions
: optional list of conditions:flight_duration
: optional integer, 0-255:explosions
: optional object with fields:values
: List of firework_explosion
data - same format as the explosion
field in the minecraft:fireworks
component:mode
: enumerated value deciding function for explosions:replace_all
: fully replace the explosions listreplace_section
: replace a section of the explosions. Arguments:offset
: optional non-negative integer:0
is usedsize
: optional non-negative integer:explosions
field is usedinsert
: insert explosions, moving existing explosions to after the inserted section. Arguments:offset
: optional non-negative integer:0
(before first explosion) is usedappend
: append explosions at the end of the listminecraft:firework_explosion
componentconditions
: optional list of conditions:shape
: optional Explosion Shape:small_ball
is used if there was no component)colors
: optional integer array, RGB values:[]
is used if there was no component)fade_colors
: optional integer array, RGB values:[]
is used if there was no component)trail
: optional boolean:has_trail
value is kept (or false
is used if there was no component)twinkle
: optional boolean:has_twinkle
value is kept (or false
is used if there was no component)minecraft:written_book_content
componentconditions
: optional list of conditions:title
: optional Filterable text (same format as title
on the minecraft:written_book_content
component):author
: optional string:generation
: optional integer [0; 3]:0
is used if there was no component)minecraft:writable_book_content
componentconditions
: list of conditions (default: []
):pages
: list of Filterable strings (same format as pages
on the minecraft:writable_book_content
component):mode
: enumerated value deciding function:replace_all
: fully replace the book contentsreplace_section
: replace a section of the book. Arguments:offset
: optional non-negative integer:0
is usedsize
: optional non-negative integer:pages
field is usedinsert
: insert pages, moving existing pages to after the inserted section. Arguments:offset
: optional non-negative integer:0
(before first page) is usedappend
: append pages at the end of the bookminecraft:written_book_content
componentset_writable_book_content
but the pages
field contains filterable Chat Components instead of Stringswritten_book_content
component, pages
stores a list of JSON objects instead of JSON in string formshow_in_tooltip
without changing other valuestoggles
- a map of supported item component type to boolean valuetrim
, dyed_color
, enchantments
, stored_enchantments
, unbreakable
, can_break
, can_place_on
, attribute_modifiers
{function:"toggle_tooltips","toggles":{"enchantments":false}}
will hide enchantments tooltipcrafting_shaped
, crafting_shapeless
, stonecutting
and smithing_transform
now accept components
for the result
item stackresult
field for recipe types smelting
, blasting
, smoking
and campfire_cooking
is now an item stack format without a count, which means you'll need to specify an object with an id
fieldresult
now also accepts components
datageneric.scale
attribute that can be used to rescale any living entity (default: 1.0
)player.block_interaction_range
(default: 4.5
) and player.entity_interaction_range
(default: 3.0
) attributes that control player reach distancegeneric.step_height
attribute that defines the maximum number of blocks that an entity can step up without jumping (default: 0.6
)generic.gravity
attribute that controls blocks/tick^2 acceleration downward (default: -0.08
)generic.safe_fall_distance
attribute to control the fall distance after which the entity will take fall damage (default: 3.0
)generic.fall_damage_multiplier
attribute to multiply overall applied fall damage (default: 1.0
)horse.jump_strength
to generic.jump_strength
, and now applies to all entitiesplayer.block_break_speed
attribute that acts as a multiplier over block breaking speed for players (default: `1.0)Added the following particle types:
vault_connection
infested
item_cobweb
small_gust
raid_omen
trial_omen
trial_spawner_detection_ominous
ominous_spawning
Particles
in Area Effect clouds now use the same representation as worldgen files (like existing biomes' ambient particle settings)/particle minecraft:dust 1.0 0.0 0.0 2.0 ...
becomes /particle minecraft:dust{color:[1.0, 0.0, 0.0], scale:2.0} ...
minecraft:villager
) remains unchangedminecraft:block
, minecraft:block_marker
, minecraft:falling_dust
, minecraft:dust_pillar
) options:value
has been renamed to block_state
block_state
now also accepts plain block name to represent default block stateminecraft:block minecraft:redstone_lamp[lit=true]
-> minecraft:block{block_state: {Name: "minecraft:redstone_lamp", Properties: {lit: "true"}}}
minecraft:block minecraft:diamond_block
-> minecraft:block{block_state: "minecraft:diamond_block"}
minecraft:item
options:value
has been renamed to item
item
now also accepts plain item name to represent item stack with default componentscount
field is now ignoredminecraft:item minecraft:dirt
-> minecraft:item{item: {id: "minecraft:dirt"}}
minecraft:item minecraft:dirt
-> minecraft:item{item: "minecraft:dirt"}
dust_color_transition
options:fromColor
field has been renamed to from_color
toColor
field has been renamed to to_color
dust_color_transition 1.0 0.0 0.0 0.5 0.0 1.0 0.5
-> dust_color_transition{from_color: [1.0f, 0.0f, 0.0f], scale: 0.5f, to_color: [0.0f, 1.0f, 0.5f]}
entity_effect
options:color
: packed integer ARGB color, or list of floats (0.0 to 1.0) representing RGBA colorminecraft:sweeping
enchantment has been renamed to minecraft:sweeping_edge
infinity
, multishot
and piercing
now work on both Crossbows and Bows, if placed onto the alternative weapon using data manipulation or a change to the enchantable/*
tags)spit
instead of mob_projectile
minecraft:does_not_block_hoppers
for blocks that will never disable a Hopper when placed above oneminecraft:blocks_wind_charge_explosions
for blocks not impacted by the explosion when hit by Wind Chargeminecraft:incorrect_for_wooden_tool
, minecraft:incorrect_for_gold_tool
, minecraft:incorrect_for_stone_tool
, minecraft:incorrect_for_iron_tool
, minecraft:incorrect_for_diamond_tool
, minecraft:incorrect_for_netherite_tool
needs_diamond_tool
, needs_iron_tool
, and needs_stone_tool
tags for each specific tool tierNew item tags controlling what enchantments can be added to what gear:
minecraft:enchantable/foot_armor
minecraft:enchantable/leg_armor
minecraft:enchantable/chest_armor
minecraft:enchantable/head_armor
minecraft:enchantable/armor
minecraft:enchantable/weapon
minecraft:enchantable/sword
minecraft:enchantable/mining
minecraft:enchantable/mining_loot
minecraft:enchantable/fishing
minecraft:enchantable/trident
minecraft:enchantable/durability
minecraft:enchantable/bow
minecraft:enchantable/equippable
minecraft:enchantable/crossbow
minecraft:enchantable/vanishing
New item tags defining food and tempting items for various mobs:
minecraft:armadillo_food
minecraft:axolotl_food
(renamed from minecraft:axolotl_tempt_items
)minecraft:bee_food
minecraft:camel_food
minecraft:cat_food
minecraft:chicken_food
minecraft:cow_food
minecraft:fox_food
minecraft:frog_food
minecraft:goat_food
minecraft:hoglin_food
minecraft:horse_food
minecraft:horse_tempt_items
minecraft:llama_food
minecraft:llama_tempt_items
minecraft:meat
collection tag: not used by the game directly, but may be included in other tagsminecraft:ocelot_food
minecraft:panda_food
minecraft:parrot_food
minecraft:parrot_poisonous_food
minecraft:pig_food
minecraft:piglin_food
minecraft:rabbit_food
minecraft:sheep_food
minecraft:strider_food
minecraft:strider_tempt_items
minecraft:turtle_food
minecraft:wolf_food
Removed item tags:
minecraft:tools
(overlapping with minecraft:breaks_decorated_pots
)minecraft:ignores_poison_and_regen
for entities that cannot be affected by Poison and Regeneration effectsminecraft:illager_friends
for entities that Illagers will consider allies (unless on a different team)minecraft:immune_to_infested
for entities that cannot receive the Infested mob effectminecraft:immune_to_oozing
for entities that cannot receive the Oozing mob effectminecraft:inverted_healing_and_harm
for entities that have inverted meanings of the Healing and Harm effectsminecraft:not_scary_for_pufferfish
for entities that will not cause Pufferfish to puffminecraft:redirectable_projectile
for projectiles which should be able to be redirected and deflected toward the direction the player is lookingminecraft:sensitive_to_bane_of_arthropods
for entities sensitive to Bane of Arthropodsminecraft:sensitive_to_impaling
for entities sensitive to Impalingminecraft:sensitive_to_smite
for entities that take extra damage from the Smite Enchantmentminecraft:wither_friends
for entities that the Wither will not target and which cannot harm the Witherminecraft:bypasses_wolf_armor
for damage sources that cannot be absorbed by Wolf Armorminecraft:is_player_attack
for attacks performed by the playerminecraft:tooltip_order
controlling which order Enchantments are listed in tooltipsBanner Patterns will now be loaded into a dynamic registry from data packs (data/<namespace>/banner_pattern/<id>
)
asset_id
(namespaced string) is used to resolve texture locationscustom:pattern
resolves to assets/custom/textures/entity/banner/pattern.png
, assets/custom/textures/entity/shield/pattern.png
translation_key
(string) is a translation key prefixblock.minecraft.banner.custom.pattern
resolves to block.minecraft.banner.custom.pattern.<dye color>
Wolf variants can be data-driven by adding entries to data/<namespace>/wolf_variant/<id>.json
.
wild_texture
- wild/untamed texture for this variant<namespace>:<path>
resolves to assets/<namespace>/textures/<path>.png
tame_texture
- tamed texture for this variantangry_texture
- to angry texture for this variantbiome
- a single entry, list or a tag describing biomes in which this variant naturally spawnsencapsulate
value
field next to type
{"type":"minecraft:uniform","value":{"min_inclusive":0.0,"max_inclusive":1.0}}
becomes {"type":"minecraft:uniform","min_inclusive":0.0,"max_inclusive":1.0}
The Resource Pack version is now 32. These are the changes compared to version 22, used in 1.20.4.
scute
textures and models to turtle_scute
textures/entity/wolf/wolf_armor_overlay.png
textures/item/wolf_armor_overlay.png
textures/entity/wolf/wolf_armor_crackiness_low.png
textures/entity/wolf/wolf_armor_crackiness_medium.png
textures/entity/wolf/wolf_armor_crackiness_high.png
trial_chambers
map decoration iconbad_omen_121
infested
oozing
raid_omen
trial_omen
weaving
wind_charged
gui/options_background
and the gui/light_dirt_background
textures have been removed. Instead;gui/menu_background
to be used as the background of screens, while gui/menu_list_background
is used for the background of lists for menus accessed from the Title Screengui/inworld_menu_background
, gui/inworld_menu_list_background
, gui/inworld_header_separator
, gui/inworld_footer_separator
textures for menus accessed from the Pause Menugui/header_separator
and gui/footer_separator
textures at the top and bottom, respectivelygui/footer_separator
, gui/header_separator
widget/tab
, widget/tab_highlighted
, widget/tab_selected
, widget/tab_selected_highlighted
widget/scroller_background
sprite has been addedgui/sprites/backup/changes
, gui/sprites/backup/changes_highlighted
, gui/sprites/backup/restore
, gui/sprites/backup/restore_highlighted
, gui/sprites/player_list/make_operator_highlighted
, gui/sprites/player_list/remove_operator_highlighted
, gui/sprites/player_list/remove_player_highlighted
gui/tab_header_background
texture, which is rendered behind the tab buttons in the Create World Screenmisc/credits_vignette
texture, which is rendered behind the poem and the creditsmap_icons.png
to use an atlas loaded from the textures/map/decorations/
directoryttf
font provider transforms have been adjusted to have more reasonable defaultsshift
is no longer applied double, and now directly represents a number of pixels in the game UIsize
pixels in the game UI, instead of between the font ascender and font descendersize
of 9 and no shift
should look correct by defaultshift
is now restricted to the range [-512; 512]
uniform
- wired to "Force Uniform" buttonjp
- wired to "Japanese Glyph Variants" buttonfilter
, available for every glyph provideruniform
)position_color_normal
and position_tex_lightmap_color
shaders have been removedposition_tex_color_normal
shader (only used by clouds) has been replaced with rendertype_clouds
IViewRotMat
uniform has been removed, and the Position
attribute for entities is now in (camera relative) world spaceblur
post-processing shader has been renamed to box_blur
use_linear_filter
to post-processing passes which when set to true
switches texture sampling mode from nearest-neighbor sampling to linear interpolation for that passentity_outline_box_blur
post-processing shaderAdded the following particle types:
infested
item_cobweb
ominous_spawning
raid_omen
small_gust
trial_omen
trial_spawner_detection_ominous
vault_connection
Added the following sound events:
block.cobweb.break
block.cobweb.fall
block.cobweb.hit
block.cobweb.place
block.cobweb.step
block.trial_spawner.about_to_spawn_item
block.trial_spawner.ambient_charged
block.trial_spawner.charge_activate
block.trial_spawner.spawn_item_begin
block.trial_spawner.spawn_item
event.mob_effect.bad_omen
event.mob_effect.raid_omen
event.mob_effect.trial_omen
item.ominous_bottle.dispose
The following changes only apply when their respective Experiment is turned on, either by activating the corresponding experimental data pack or by turning it on in the Experiments screen while creating the world.
Known issue:
Minecraft: Trial(s) Edition
- Step foot in a Trial ChamberUnder Lock & Key
- Unlock a Vault using a Trial KeyBlowback
- Kill a Breeze with a deflected Wind Charge (challenge - gives 40 exp)Who Needs Rockets?
- Use a Wind Charge to launch yourself upward at least 8 blocksCrafters Crafting Crafters
- Be near a Crafter when it crafts a CrafterLighten Up
- Scrape a Copper Bulb with an Axe to make it brighterOver-Overkill
- Deal 50 hearts of damage in a single hit using the Mace (challenge - gives 50 exp)Revaulting
- Unlock an Ominous Vault with an Ominous Trial Key (goal)Around 210 bugs were fixed in this release. View the list on the issue tracker.