
Hello! Here is a slightly bigger than usual snapshot with a lot of technical changes, refreshed UI, another iteration of Wolf Armor, and tweaks to new features.
Since the initial release of the Wolf Armor, we have been working on improving it to increase its protection, usability and add customization. For protection there is a new approach to armor, which considers the player's need to quickly see the state of the armor without using UI elements, and the ability to act quickly to help their pet wolf if needed. Please try it out and let us know what you think over at the feedback site: Let's talk about Wolf Armor!
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.
As always, we're eager to hear your thoughts and opinions on further improvements or changes. Let us know what you think over at the dedicated feedback site.
playsound command can now be used without specifying the player (assuming @s) and without specifying the mixer (assuming master)minecraft:bypasses_wolf_armor for damage sources that can not be absorbed by Wolf Armorloot_table now also accepts inline loot tablestag field) has been replaced with structured 'components'Loot table entry loot_table (which returns all items from provided nested loot table) now has the following syntax:
value - can be either:We are making some large changes to how Item Stack-specific properties are stored and represented in this snapshot, replacing the current NBT 'tag' with structured components.
This change has been made in order to:
We understand that this is a significant breaking change for many datapacks and custom maps which will require significant effort to upgrade.
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.
Although we have made our best effort to identify these cases, some of these techniques rely on undocumented or undefined behavior with certain tag configurations.
We want to ensure that no functionality is lost without a suitable alternative, but due to the undocumented nature of these techniques, we have very likely not caught everything!
We hope to address any regressions over the remaining course of this snapshot cycle.
With such a large change, we deeply value your feedback! You can share your thoughts on these changes over at the feedback site: Let's talk about Item Stack Components!.
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 directoryignoreTags field on villager trades has been removed and replaced by a component predicate on damageblocks.json report (note: those definitions are not used yet and present only for informational purposes)key_item field of Vault block is not present, the Vault cannot be unlockedminecraft:custom_data#{...}) in commands/clear), will be partially matched as currentlytag will be moved into herecustom_data={some:'data'}minecraft:damage#Damage tagdamage=120minecraft:repair_cost#RepairCost tagrepair_cost=120minecraft:unbreakable#Unbreakable boolean tagshow_in_tooltip: boolean (default: true)true, an 'Unbreakable' line will be included in the tooltipHideFlags tagunbreakable={}, unbreakable={show_in_tooltip:false}minecraft:enchantments#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}{levels:{}}minecraft:stored_enchantments#StoredEnchantments tag on Enchanted Booksminecraft:enchantmentsshow_in_tooltip value replaces 6th bit of HideFlags tag{levels:{}}minecraft:custom_name#display.Name tagcustom_name='{"text": "This item is renamed!", "color": "red"}'minecraft:lore#display.Lore taglore=['{"text": "The cake is a lie!"}'][]minecraft:can_break#CanDestroy 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'}minecraft:can_place_on#CanPlaceOn tagpredicates: list of block predicatescan_break.predicatesshow_in_tooltip: boolean (default: true)HideFlags tagcan_place_on={predicates:{blocks:'minecraft:furnace',state:{facing:'north'}}can_place_on={blocks:'minecraft:stone'}minecraft:dyed_color##minecraft:dyeable tag)display.color tagrgb: integer, RGB valueshow_in_tooltip: boolean (default: true)HideFlags tagdyed_color={rgb:16711680}minecraft:attribute_modifiers#AttributeModifiers tag{modifiers:[]})modifiers: list of attribute modifierstype: attribute idAttributeNameslot: one of:any (default)hand: either in main or offhand (new)armor: any armor slot (new)mainhandoffhandheadchestlegsfeetSlotuuid: uuid, uniquely represents this modifierUUIDname: string, human-readable nameNameamount: double, number of units to modify this attribute (controlled by operation)Amountoperation: 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']}minecraft:charged_projectiles#Charged and ChargedProjectiles tagscharged_projectiles=[{id:'minecraft:arrow'}]minecraft:intangible_projectile#charged_projectiles componentintangible_projectile={}minecraft:bundle_contents#Items tagbundle_contents=[{id:'minecraft:poisonous_potato'}][]minecraft:map_color#display.MapColor tagmap_color=167116804603950minecraft:map_decorations#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)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}}{}minecraft:map_id#map tagmap_id=1minecraft:custom_model_data#minecraft:custom_model_data property in the item modelCustomModelData tagcustom_model_data=43minecraft:potion_contents#Potion, 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}{}minecraft:writable_book_contents#pages and filtered_pages tags{text:'...'} wrappingfiltered_pages are pulled by index keys into the relevant page entry under the filtered fieldpages: list of either:text: string, page plain text contentsfiltered: string, filtered page contents (optional)textwritable_book_contents={pages:[{text:'Hello world!'}]}{pages:[]}minecraft:written_book_contents#pages, filtered_pages, title, filtered_title, author, generation, and resolved tagspages: listwritable_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; 2]0 = original)resolved: booleantrue if the chat components in this book have already been resolved (entity selectors, scores substituted)false, will be resolved when opened by a playerwritten_book_contents={pages:[{text:'Hello world!'}],title:{text:'A delightful read'},author:'Herobrine',generation:1,resolved:true}minecraft:trim##minecraft:trimmable_armor 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'}minecraft:suspicious_stew#effects tag of the same formatid: effect idduration: integer, tick count (default: 160)suspicious_stew=[{id:'minecraft:poison'}][]minecraft:hide_additional_tooltip#HideFlags taghide_additional_tooltip={}minecraft:debug_stick_state#DebugProperty tagdebug_stick_state={'minecraft:turtle_egg':'eggs','minecraft:furnace':'facing'}{}minecraft:entity_data#EntityTag tag, with same behaviorid field with the entity typeentity_data={id:'minecraft:pig',Health:1.0f}minecraft:bucket_entity_data#NoAI, Silent, NoGravity, Glowing, Invulnerable, Health, Age, Variant, HuntingCooldown, and BucketVariantTag tagsbucket_entity_data={NoAI:1,Age:43}{}minecraft:instrument#instrument tag of same formatinstrument='minecraft:ponder_goat_horn'minecraft:recipes#Recipes tag of same formatrecipes=['minecraft:acacia_boat','minecraft:anvil'][]minecraft:lodestone_target#LodestonePos, LodestoneDimension, and LodestoneTracked tagspos: integer array of x, y, and zdimension: dimension idtracked: boolean (default: true)true, when the Lodestone at the target position is removed, the component will be removedlodestone_target={pos:[13,64,-43],dimension:'minecraft:the_nether'}minecraft:firework_explosion#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}minecraft:fireworks#Fireworks.Explosions and Fireworks.Flight tagsexplosions: list of explosionsminecraft:firework_explosion componentflight_duration: byte, number of gunpowder in this rocketfireworks={explosions:[{shape:'large_ball',colors:[16711680],has_trail:true}],flight_duration:2}{explosions:[],flight_duration:1}minecraft:profile#SkullOwner tagname is specified, will be resolved into the corresponding player ID and skin dataname: string, player profile nameid: 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'}minecraft:note_block_sound#BlockEntityTag.note_block_sound tagnote_block_sound='minecraft:ambient.cave'minecraft:base_color#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'minecraft:banner_patterns#BlockEntityTag.Patterns tagpattern: banner pattern registry idPatterns[].Patterncolor: dye color namePatterns[].Colorbanner_patterns=[{pattern:'minecraft:stripe_top',color:'red'}][]minecraft:pot_decorations#BlockEntityTag.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']minecraft:container#BlockEntityTag.Items tagslot: integer [0; 255], representing a slot in the containeritem: item stackcontainer=[{slot:7,item:{id:'diamond_pickaxe',components:{'minecraft:unbreakable':{}}}}][]minecraft:bees#BlockEntityTag.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}][]minecraft:lock#BlockEntityTag.Lock taglock='hunter2'minecraft:container_loot#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}minecraft:block_entity_data#BlockEntityTag tag, with same behaviorid field with the block entity typeblock_entity_data={id:'minecraft:chest',Items:[{Slot:1,item:'minecraft:diamond'}]}minecraft:block_state#BlockStateTag tagblock_state={eggs:'10'}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/give, /item, /loot, and /clear have 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{...}) is rewired to set or match the minecraft:custom_data component/give @s stick{foo:'bar'} is equivalent to /give @s stick[custom_data={foo:'bar'}][...] and {...} are specified, [...] must be ordered before {...}/clear) have new semantics with respect to matching components and custom datadamage=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{...} custom data syntax will use pre-existing NBT partial match behaviour/attribute command have been renamed:add -> add_valuemultiply_base -> add_multiplied_basemultiply -> add_multiplied_totalid (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), and no longer stored if defaulttag 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 stacksitemminecraft:potion_contents component in a potion_contents field:Potion -> potion_contents.potionColor -> potion_contents.custom_coloreffects -> potion_contents.custom_effectsminecraft: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_dataBees[].TicksInHive -> bees[].ticks_in_hiveBees[].MinOccupationTicks -> bees[].min_ticks_in_hiveFlowerPos -> flower_pos'minecraft:damage': 0components field in item predicates)minecraft:set_components functionconditions: list of conditions (default: []):components: map of component id to component value (format varied by id)! prefix (e.g. "!minecraft:damage": {}) will cause this component to be removedminecraft:copy_components functionminecraft:copy_name and minecraft:copy_nbt functionsconditions: list of conditions (default: []):source: source type to pull from"block_entity"components: list of component ids to copyminecraft:set_nbt and minecraft:copy_nbt functions have been renamed to minecraft:set_custom_data and minecraft:copy_custom_data respectivelyminecraft:custom_data component of the target itemminecraft:set_attributes function has been updatedslot field now supports any, armor, and hand valuesoperation values have been renamed:addition -> add_valuemultiply_base -> add_multiplied_basemultiply_total -> add_multiplied_totaltag field has been removeditems field now supports a single entry, hash-prefixed item tag, or list of itemspotion -> potions, and supports a single entry, hash-prefixed potion tag, or list of potionsnbt predicate has been renamed to custom_data and now matches minecraft:custom_data componentcomponents field matches exact components"components": { "minecraft:damage": 0 } will match only undamaged itemstag 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 fluidstype field now supports a single entry, hash-prefixed entity type tag, or list of entity typesbiome -> 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 structuresinfinity, 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)textures/entity/wolf/wolf_armor_overlay.pngtextures/item/wolf_armor_overlay.pngtextures/item/wolf_armor.png, has been raise by 2px to create space for the durability bartextures/entity/wolf/wolf_armor_crackiness_low.pngtextures/entity/wolf/wolf_armor_crackiness_medium.pngtextures/entity/wolf/wolf_armor_crackiness_high.pngoptions_background and the light_dirt_background textures have been removedmenu_background is used as the background of screens, while menu_list_background is used for the background of listsheader_separator and footer_separator textures at the top and bottom, respectivelyfooter_separator, header_separatorwidget\tab, widget\tab_highlighted, widget\tab_selected, widget\tab_selected_highlightedwidget\scroller_background sprite has been addedchanges, changes_highlighted, restore, restore_highlighted, make_operator_highlighted, remove_operator_highlighted, remove_player_highlighted