Special cases where an armadillo doesn't roll up include when it is:
Fleeing.
In water or in the air.
On a lead.
When an armadillo is rolled up it cannot walk nor eat, and is not tempted by food. Additionally, it is protected by its shell, causing it to take reduced damage and completely negating damage from weaker attacks.
While rolled up, armadillo continuously scans for threats. If no threats are detected for 3 seconds (60 ticks), it unrolls. Armadillos peek out to see if βthe coast is clearβ before unrolling.
Wolves spawned with the wolf spawn egg spawn as the variant associated with the biome the egg is used in. They default to pale wolf in any other biome.
All wolves spawned before 1.20.5 are pale wolves and continue to be pale wolves.
The new variants combined with the ability to dye a wolf's armor and collar, there are effectively 2,415,919,248 (2.4 billion) distinct wolves, which is 2,415,919,232 more than the 16 wolves that used to be available. Therefore, this update added 2,415,919,232 distinct wolves. See Wolf Β§ Trivia for more details.
explosions field is now optional, while value field inside it is now mandatory.
Added set_firework_explosion loot function.
New function for setting the details of the minecraft:firework_explosion component.
Fields:
conditions: list of conditions (default: []):
Conditions to check before applying the function
shape: optional Explosion Shape:
The explosion shape to set
If omitted, the original shape is kept (or small_ball is used if there was no component)
colors: optional integer array, RGB values:
List of initial particle colors to replace the ones on the existing explosion with
If omitted, the original colors are kept (or [] is used if there was no component)
fade_colors: optional integer array, RGB values:
List of fade-to particle colors to replace the ones on the existing explosion with
If omitted, the original colors are kept (or [] is used if there was no component)
trail: optional boolean:
Set whether the explosion should have a trail or not
If omitted, the original has_trail value is kept (or false is used if there was no component)
twinkle: optional boolean:
Set whether the explosion should have a twinkle or not
If omitted, the original has_twinkle value is kept (or false is used if there was no component)
Added set_item loot function.
Replaces item type of item stack without changing count and components.
Fields:
conditions - list of conditions to filter this function.
item - new item type.
Added set_writable_book_pages loot function.
New function for manipulating the pages of the minecraft:writable_book_content component.
Fields:
conditions: list of conditions (default: []):
Conditions to check before applying the function
pages: list of Filterable strings (same format as pages on the minecraft:writable_book_content component):
The pages to apply
mode: enumerated value deciding function:
replace_all: fully replace the book contents
replace_section: replace a section of the book. Arguments:
offset: optional non-negative integer:
Start of replaced range
If omitted, 0 is used
size: optional non-negative integer:
Size of range to be replaced in book
If omitted, the size of pages field is used
insert: insert pages, moving existing pages to after the inserted section. Arguments:
offset: optional non-negative integer:
Index before which pages are inserted
If omitted, 0 (before first page) is used
append: append pages at the end of the book
Added set_written_book_pages loot function.
New function for manipulating the pages of the minecraft:written_book_content component. Same format as set_writable_book_content but the pages field contains filterable Components instead of Strings (same format as pages on the minecraft:writable_book_content component), and is a JSON Object rather than a string containing JSON.
Any cover data is left untouched, and the page content components are set to resolve next time a player opens the book.
Added toggle_tooltips loot function.
This function can be used to modify item component tooltip visiblity.
It works by setting fields like show_in_tooltip without changing other values.
Format: toggles - a map of supported item component type to boolean value.
Added storage loot number provider to access values from command storage.
This number provider is able to access numeric values from command storage directly.
If selected storage does not exist or tag selected by path is not numeric or does not exist, provider returns 0.
Fields:
storage: namespaced id of command storage.
path: NBT path to field.
Added new loot table type minecraft:equipment.
Has required parameters of this_entity and origin.
this_entity: the mob that is about to be given equipment.
origin: the position of the mob.
Added optional equipment_loot_table to the spawn data present in the SpawnPotentials of monster spawners and spawn_potentials of trial spawner configs.
If present, rolled items from the specified loot table are equipped to the mob that spawns.
Added the default_block_use advancement trigger, which triggers due to the default interaction of a block by a player, such as opening a door.
Added the any_block_use advancement trigger, which triggers due to any type of interaction with a block by a player, such as using an item on the block or its default usage.
Added the crafter_recipe_crafted advancement trigger, which triggers when a crafter ejects a successfully crafted item into the world.
The player entity predicate matches the player who is nearby.
Has a recipe_id condition which is the ID of the recipe being crafted.
Has an optional ingredients condition which is a list of item predicates matching the ingredients that form the recipe being crafted.
Added the fall_after_explosion advancement trigger, which triggers when a player begins falling after being knocked upwards by an explosion or wind burst
The player entity predicate matches the player who is falling.
Has an optional start_position condition which is a location predicate matching the position the player was at when they were hit by the explosion or burst.
Has an optional distance condition which is a distance predicate matching how far the player must be from start_position to cause the criterion to be granted.
Has an optional cause condition which is an entity predicate matching the entity which caused the explosion or burst to happen.
Unique enchantment which can only be found in ominous vaults.
Has 3 levels.
Maces enchanted with Wind Burst emit a burst of wind upon hitting an enemy, launching the attacker upward and enabling the linking of smash attacks one after the other.
Each level bounces the attacker higher up in the air; however any level above the default maximum of 3 obtained through commands makes the player simply lose all downward momentum and begin falling again, without gaining any upward momentum.
Added the following particle types: infested, item_cobweb, small_gust, raid_omen, trial_omen, trial_spawner_detection_ominous, ominous_spawning, and vault_connection.
No longer accepts items that have [NBT Compound / JSON Object] unbreakable component but do not have an enchantment.
If the item above has durability, it can be repaired with an unbreakable item and the output does not inherit [NBT Compound / JSON Object] unbreakable component. If the order is swapped, the item is neither be repaired nor disenchanted. If the only item in slots is an enchanted unbreakable item, it is disenchanted and [NBT Compound / JSON Object] unbreakable component remains.
Unstructured NBT data attached to stacks of items (tag field) has been replaced with structured 'components'.
This data is parsed and validated when the item is loaded.
This should improve performance in certain scenarios (e.g. armor trim rendering) when item data was frequently compared or requested and parsed.
Custom data can still be stored in the minecraft:custom_data component.
This change has been made in order to:
Improve performance in cases where the game needs to frequently look up some property of an item (e.g. armor trims rendering every frame).
Validate item properties at load time, enabling easier identification of invalid data in commands and data packs.
This should avoid any 'silent' breakages in commands specifying custom item data for any potential future format changes.
Continue to evolve the game to enable the creation of dynamic content.
Item types (e.g. minecraft:stick) hold a set of default components on an item that individual item stacks can override.
Commands such as /give, /item, /loot, and /clear have updated item syntax.
Components can now be specified after the item name in square brackets.
Components are assigned with an = (e.g. wooden_pickaxe[damage=23]).
Components are comma-separated (e.g. netherite_hoe[damage=5,repair_cost=2]).
Component types are autocompleted, but values themselves are not.
Values however are validated, and the command fails to parse if the component is improperly specified.
e.g. /give @s wooden_pickaxe[damage=-34] is not valid.
The pre-existing NBT syntax ({...}) must now be specified with the minecraft:custom_data component.
e.g. /give @s stick{foo:'bar'} is equivalent to /give @s stick[custom_data={foo:'bar'}].
Item predicate arguments (in /clear) have new semantics with respect to matching components and custom data.
Each specified component must be present on the target item, and have an exactly equal parsed value.
Components with default values (e.g. damage=0 by default) automatically exist on the target item if not specified.
As such, /clear @s diamond_pickaxe[damage=0] matches only undamaged diamond pickaxes.
On the other hand, /clear @s diamond_pickaxe matches any diamond pickaxe, irrespective of damage.
Exact matching of component values applies even for the minecraft:custom_data component.
However, the {...} syntax for custom data still uses the pre-existing partial matching behavior for NBT.
This means that all tags specified in the predicate must be present on the target item, but additional tags on the target item are ignored.
Lists in the target must contain all list-items specified in the predicate, but additional list-items are ignored.
The format of serialized items and items in data packs has been updated for consistency and to support components.
When advanced tooltips are enabled (F3+H), the number of components is displayed instead of number of tags.
Default component values for items are now listed in items.json generated in reports directory.
Block definitions are now added to blocks.json report (note: those definitions are not used yet and present only for informational purposes).
The ignoreTags field on villager trades has been removed and replaced by a component predicate on damage.
If the key_item field of a vault block is not present, the vault cannot be unlocked.
Command arguments that previously accepted namespaced ids of loot tables, modifiers and predicates can now also accept inline definitions
loot
item
execute if predicate
Values have same structure as matching JSON files, though they are encoded as SNBT. Example: execute if predicate {condition:weather_check, raining:true}
Added [NBT Compound / JSON Object] body_armor_item to entity data, which functions similarly to entries of [NBT List / JSON Array] HandItems and [NBT List / JSON Array] ArmorItems.
Also added [Float] body_armor_drop_chance, which determines the chance of dropping body armor.
Potion effects stored in items or entities no longer encode their default values.
amplifier: 0
duration: 0
ambient: false
show_particles: true
All block positions are now stored as an array of 3 integers instead of a map of XYZ.
FlowerPos 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.
Tipped arrows no longer store their applied potion effects.
This is instead fetched from their held item.
Area effect clouds now store potions in the same format as the minecraft:potion_contents component in a potion_contents field:
Potion -> potion_contents.potion
Color -> potion_contents.custom_color
effects -> potion_contents.custom_effects
Villager trades can be configured to accept only undamaged items by selecting for 'minecraft:damage': 0
By default, if no components are specified, any item is accepted (similar to components field in item predicates).
Item stack format
Along with format changes due to components, the structures of item stacks on disk and in data packs have been updated for consistency.
Previous id (string) and Count (byte) fields have been replaced with id (namespaced string) and count (integer) fields.
This format is additionally applied to the icon field in advancements, items in chat component hover events, and the result field in smelting recipes (result and count are no longer inlined).
The count field is optional (defaults to 1), and no longer stored if default.
Stack size is now limited to the maximum stack size of the item.
The tag field has been removed, and any remaining contents end up in the minecraft:custom_data component when upgrading.
A new components field stores all components attached to an item.
Format: map of component id to component value (varies by component id).
e.g. {..., components: {'minecraft:damage': 12}}.
Components with a ! prefix (e.g. "!minecraft:damage": {}) cause this component to be removed.
Components equal to their default value are not stored.
The item stack format no longer represents empty stacks (air item, or count 0).
Instead, in places that support it, the field should be omitted.
In some cases, such as lists of stacks (e.g. HandItems in living entities), an empty map ({}) is used to represent empty stacks.
The item predicate syntax (used in execute if|unless items and clear commands) has been significantly expanded.
The general syntax is: <type> [comma-separated list of <test>]
<type> can be one of:
item id
item tag id prefixed with #
* to match any item
<test> can have one of 3 forms:
<component_id>=<value> - match exact value of component (same as in previous format)
<value> is a representation of component value in SNBT format (same as in item give argument)
<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 same as one used for advancement and loot table JSON files)
Example: *[damage~{durability:{min:3}}] matches any stack with at least 3 uses left
The special name minecraft:count can be used for matching the stack size
count=<positive int> passes only when the stack size equals the given value
count~<int range> passes when the stack size is in the specified range
Example: *[count~{max:2}] matches any stack with count <= 2
count always passes
Any <test> entry can be negated by prefixing with !
Example: *[!count=1] matches any stack that has count other than 1
<test> elements can be also joined with | to check multiple alternatives
Example: *[!damage|damage=0] looks for items without damage component or with 0 damage
Removed redundant custom data section ({...}) from item arguments (it's fully replaced by [custom_data={...}])
To make this transition easier, custom_data item sub-predicate has been changed to allow unquoted SNBT
The syntax for custom data partial matching ({}) has been removed in favor of using custom_data predicates
So stick{a:2} becomes stick[custom_data~{a:2}]
Item sub-predicates
General rules of component predicates:
Unless otherwise specified, a field in predicate with the same name as a field in component that matches (i.e. has the same name as predicate) will match that field value
Those fields usually have the same type as in the components, but are optional.
Exceptions:
List fields are replaced with collection matchers (see below)
Integer and float fields are replaced with ranges
Registry ids are replaced with a type that accepts id, list of ids or a tag
Collection matcher is a shared part of predicate used for matching collections. Every instance of this matcher has same fields with same functionality, with only difference being type of matched elementFields:
size - integer range to match against collection size
contains - a list of element predicates
All conditions must match for predicate to pass
Not all elements in tested container have to be matched
Elements can be in any order
Single element can match multiple predicates
Examples (when matching item stacks):
{contents:[{item:diamond}]} - matches when there is at least one diamond item
{contents:[{item:diamond}, {item:dirt}]} - matches when there is at least one diamond item and at least one dirt item
count - a list of matchers on element counts
Entry fields:
test - element matcher
count - optional integer range to check against number of elements passing test
Examples (when matching item stacks):
{count:[{count:3,test:{items:diamond}}]}} matches only when there are exactly 3 stacks of diamonds (no matter the stack size)
Contents of item entity can now be accessed through contents slot name.
Component-specific item predicate properties have been moved to separate field predicates.
Some fields from item predicate have been moved to a map in an optional field predicates.
The new field is similar to the components field on item stacks.
This was done to simplify addition for future predicates and to allow sub-predicates to more closely resemble names of components they match.
The following fields have been moved:
enchantments - field moved to sub-predicate minecraft:enchantments
stored_enchantments - field moved to sub-predicate minecraft:stored_enchantments
potions - field moved to sub-predicate minecraft:potion_contents
custom_data - field moved to sub-predicate minecraft:custom_data
Predicate minecraft:custom_data now accepts both SNBT data written as a string (existing format) and unflattened tags
That means that *[custom_data~{a:1}] and *[custom_data~"{a:1}"] are equivalent
Flattened string format has been kept since NBT type information can't be expressed in JSON
durability field has been expanded to minecraft:damage predicate:
This check now works for any item that has minecraft:damage component
An item that does not have a minecraft:damage component can never match
To check for unbreakable items, query value of minecraft:unbreakable component
Fields:
damage - optional bounds for value of minecraft:damage component
durability - optional bounds for durability (max damage minus value of minecraft:damage)
Predicates minecraft:enchantments, minecraft:stored_enchantments, minecraft:potion_contents and minecraft:damage require matching component to exist on item
That means that, for example, matching for empty enchantment list does not pass on items without minecraft:damage component
Note: some components, like minecraft:enchantments have default values, so they always match.
wolf
New wolf sub-predicate has been added to match wolf variantsFields: variant - wolf variant to match (single entry, list of entries or tag)
cat, frog, painting
Field variant now accepts single entries, list of entries or tags.
wolf, cat, frog and painting entity sub-predicates now accept tags and plain lists instead of just single elements.
The projectile weapon enchantments Infinity, Flame, Multishot, Piercing, Power, and Punch now work on both crossbows and bows, if placed onto the alternative weapon using data manipulation or a change to the enchantable/* tags.
The animated end portal effect is displayed when changing dimension to or from The End.
After defeating the ender dragon and entering the end portal, the End Poem and credits are now displayed with a background based on the animated end portal effect.
Chat
Client chat state (on-screen messages and chat input history) is now preserved by client when entering and exiting configuration phase.
Message signature chain handling remains unchanged - going into configuration phase starts new session.
If client has message delay configured, pending messages are delivered immediately before leaving world.
Server can clear chat state by sending reset_chat packet in configuration phase.
The minecraft:sweeping enchantment has been renamed to minecraft:sweeping_edge.
Loot table entry with id loot_table now also accepts inline loot tables.
Loot table entry loot_table (which returns all items from provided nested loot table) now has the following syntax: value - can be either:
namespaced id - reference to another named loot table.
full loot table (same format as in standalone file).
Banner patterns are now be loaded into the registry from data/<namespace>/banner_pattern/<id>
[NBT Compound / JSON Object]: The root object.
[String] asset_id: A namespaced id for the texture. e.g. custom:pattern resolves to assets/custom/textures/entity/banner/pattern.png and assets/custom/textures/entity/shield/pattern.png.
[String] translation_key: A translation key prefix. e.g. block.minecraft.banner.custom.pattern resolves to block.minecraft.banner.custom.pattern.<color>.
Int and float providers used in worldgen definitions are no longer wrapped in an extra value field next to type
For example, {"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 text field within filterable entries in book components has been renamed to raw to avoid ambiguity.
The profile component and fields on player head items and blocks respectively now support resolving from a UUID.
By specifying the id field without a name, the name and textures will be looked up.
Added new terrain adaptation type for structures: encapsulate
Density will be added all around every piece of a structure
Ideal for structures that need to be entirely covered underground
The combination of max_stack_size and max_damage components is no longer allowed in commands and data pack definitions
Added a new option body in entity equipment sub-predicate to match the item in the body armor slot of an entity
The saturation_modifier field on the food component has been replaced with saturation
saturation is the exact value added to the player's saturation level
In respect to the former saturation_modifier, this is defined by saturation = nutrition * saturation_modifier * 2
Changed optional equipment_loot_table field in the SpawnPotentials of Monster Spawners and spawn_potentials of Trial Spawner configs.
Now named equipment instead of equipment_loot_table
Format: object with fields
loot_table - A loot table used to generate the equipment
slot_drop_chances - An optional map of equipment slot to specified drop chance
Can also be a single value instead of a list to apply to all slots: e.g. slot_drop_chances: 0.0f applies a chance of 0% to all slots
Status effect particle colors are no longer blended into one particle color.
All active visible status effect particles are now rendered separately.
The frequency of emitting status effect particles has been lowered to clutter the screen less.
Particle options in commands and in fields like Particles in Area Effect clouds now use the same representation as worldgen files (like existing biomes' ambient particle settings)
For example, command /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} ...
The syntax for particles without extra options (like minecraft:villager) remains unchanged
Changes to block particles (minecraft:block, minecraft:block_marker, minecraft:falling_dust, minecraft:dust_pillar) options:
Field value has been renamed to block_state
Field block_state now also accepts plain block name to represent default block state
[NBT Compound / JSON Object] result field for crafting_shaped, crafting_shapeless, stonecutting, and smithing_transform now accepts [NBT Compound / JSON Object] components.
[String] result field for smelting, blasting, smoking, and campfire_cooking recipes are now an item stack without count. That is, [String] id must be specified and [NBT Compound / JSON Object] components is now accepted.
The options_background and the light_dirt_background textures have been removed.
Instead, menu_background is used as the background of screens, while menu_list_background is used for the background of lists.
Lists now use the header_separator and footer_separator textures at the top and bottom, respectively.
The following textures have been updated: footer_separator, header_separator.
The following sprites have been updated: widget\tab, widget\tab_highlighted, widget\tab_selected, widget\tab_selected_highlighted.
The widget\scroller_background sprite has been added.
The following textures in Realms have been removed: changes, changes_highlighted, restore, restore_highlighted, make_operator_highlighted, remove_operator_highlighted, remove_player_highlighted.
Added gui/inworld_menu_background, gui/inworld_menu_list_background, gui/inworld_header_separator, and gui/inworld_footer_separator textures to allow menus accessed from the pause menu to look different from menus accessed from the title screen.
Added gui/tab_header_background texture, which is rendered behind the tab buttons in the Create World Screen.
Added misc/credits_vignette texture, which is rendered behind the poem and the credits.
The blur post-processing shader has been renamed to box_blur.
Added optional boolean field 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 pass.
No longer appears when hovering outside the containing element.
UI
π Image The enhanced UI as seen in the "Create World" menu
The 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.
Screen elements such as titles and buttons are positioned more consistently across different screens.
The "Player" and "World Backups" screens in Realms have been updated.
Lists now have clearer borders at the top and bottom.
Other
Added JFR (Java Flight Recorder) events for individual chunk reads (minecraft.ChunkRegionRead) and writes (minecraft.ChunkRegionWrite).
Introduced changes to optimizing worlds.
Optimizing singleplayer worlds and running dedicated server with forceUpgrade now also upgrades contents of entities and poi directories of the world.
New recreateRegionFiles dedicated server startup parameter.
It triggers world optimization similar to forceUpgrade, but also rewrites all the chunks independently of whether they have been upgraded.
This creates fresh and defragmented region files.
Using this parameter after changing the region-file-compression server property recompresses all region files in the new format.
Improved server TPS debug chart.
As before, it is accessible by pressing F3 + 2 in a singleplayer world.
The bottom dark red section of the chart displays the time spent during the main logic of the server tick. It is equivalent to the value displayed in the old chart.
The light brown section displays time spent on running scheduled tasks.
The purple section displays time spent executing all other code during the tick.
The top light green (or yellow or red depending on lag) section displays time spent idling, waiting for next tick.
The min, avg, max aggregate values are based on the sum of the first 3 sections.
Allowed server operators to view dedicated server TPS debug chart.
Maximum length of a command in a function (including macro expansions) can no longer exceed 2,000,000 characters.
These additions and changes only take effect when the Update 1.21 experimental data pack is enabled, the exception to this is the change to villagers, which takes effect when the "Villager Trade Rebalance" experimental data pack is enabled.
Using the weapon while falling can increase the damage output. The higher the player falls, the more damage is dealt.
This can be done by jumping toward the target and hitting them before the player hits the ground.
Successfully striking a target in this way negates any damage accumulated from the fall, similar to how a wind charge works, as well as resets all vertical momentum.
Maces have a unique explosive particle effect when executing a smash attack with the mace to really show the player's power.
Maces have a unique sound when hitting an entity from a fall of more than 5 blocks.
Other entities near the struck enemy receive knockback, even stronger when falling for more than 5 blocks before attacking.
When used it fires off a wind charge projectile similar to the breeze's.
A wind charge fired by a player grants 10% more knockback than a breeze's, but has a much smaller area of impact.
Just like the projectile fired by the breeze, wind charges fired by the player also deal damage if they hit an entity directly, and they activate redstone components.
Made various layout changes in intersections and corridors.
Fixed various broken jigsaw connections in the corridors.
Trial chambers now generate slightly more rarely and a bit more spaced out from each other, and more consistently buried by terrain when found underground.
MC-266738 β Subtitles string "subtitles.block.trial_spawner.spawn_mob" is misleading and inconsistent.
MC-266879 β Clouds, entity hitboxes, block outlines, specially rendered blocks, and enchantment glints, render through the insides of breezes' eyes and eyebrows.
MC-266909 β Breezes don't have smooth transitions to their idle states when they stop moving.
MC-266999 β Crafter's tooltip buttons can still be visible to players on Spectator mode.
MC-267044 β Tick status strings contain inconsistent word usage.
MC-267045 β Some tick strings are missing articles and are unclear.
MC-267086 β Compass does not indicate spawn point correctly when game is frozen with /tick.
MC-267103 β Client crashes when receiving inconsistent network registries.
MC-267104 β The bottom face textures of breezes' rods are incorrect and don't match with surrounding colors.
MC-267133 β Breezes can't attack or move when there is no land around them and they are on the same height block as the player.
MC-267149 β Crafter top face has an inverted UV texture map.
MC-267193 β A function with /return fail run in chat doesn't indicate failure.
MC-267465 β 1.20.3 upload error: "Cannot invoke "ctt.c()" because "this.b" is null".
From 1.20.4
MC-267194 β /return run function in combination with a fork and a function that doesn't return has inconsistent behavior.
MC-267273 β Second beacon power for level 4 beacon flickers when player hovers the mouse pointer over it.
MC-267352 β Singleplayer worlds don't load the player.dat when the "Player" tag is absent from level.dat.
MC-267384 β Unused duplicate wolf armor sound events.
MC-267451 β Items named with an anvil on 1.20.4 don't stack with items named prior.
MC-267500 β Attribute modifier on an item with the first and/or last 2 integers of the UUID being 0 are non-functional.
The scale attribute comes from the April Fools snapshot 23w13a_or_b mainly taken from the attribute "minecraft:generic.scale" or the /transform scale command.
This minor update has the most snapshots (15, beating the previous record of 1.7.4 and 1.20.3 at 8 snapshots), even surpassing major updates such as 1.19 and 1.20.
The first snapshot was released on the 51st week, surpassing 1.9 (15w51a/15w51b) as it was released on the latest calendar of all snapshots, on December 18th.
1.20.5 has the longest wait for a minor update to Java Edition, with 138 days having elapsed since the release of 1.20.4 on December 7, 2023, surpassing 1.8.9 by only 4 days.