Skip to main content

Minecraft - 1.19.70 (Bedrock)

Updated Add-On Template Packs

  • Updated Add-On templates for 1.19.70 with new resources, behaviors, and documentation are available to download at aka.ms/MCAddonPacks

General

  • Behavior packs with scripts can now be removed from worlds
  • Item loot table conditions are no longer ignored in-game when used inside functions (MCPE-164582)
  • Carrots now display the proper name in item tooltips when used in can_place_on and can_destroy item components (MCPE-160838)
  • In JSON formats 1.19.70 and later, blocks fail to load if the "condition" field in Block Permutations is not a valid Molang string
  • Crafting Table component no longer appends "tile." when defaulting to use block name for crafting table label

Wool Blocks

Wool has been flattened into separate blocks, namely:

  • white_wool
  • orange_wool
  • magenta_wool
  • light_blue_wool
  • yellow_wool
  • lime_wool
  • pink_wool
  • gray_wool
  • light_gray_wool
  • cyan_wool
  • purple_wool
  • blue_wool
  • brown_wool
  • green_wool
  • red_wool
  • black_wool

Commands, recipes, loot tables, etc. will still work with wool and an aux value or color state, but wool will not be suggested in the command prompt. Instead, the new wool block names will.

Commands

  • Fixed a crash with deferred command execution when the executing actor is removed before execution (MCPE-165374)
  • Summon command no longer causes some entities to be spawned in at an angle
  • Removed support for field "data" in commands /clone, /execute, /fill, /setblock and /testforblock beyond version 1.19.70, eg. /setblock ~ ~ ~ minecraft:wool 1 will only have its equivalent /setblock ~ ~ ~ minecraft:wool ["color":"orange"] supported
    • Here are some additional examples[JW1] [JW2] [JW3] :
      • /setblock ~~~ green_wool [] [] is equivalent to the old 0
      • /setblock ~~~ wood ["wood_type": "oak"]
      • /setblock ~~~ coral ["dead_bit" : true , "coral_color" : "blue" ]
      • /setblock ~~~ coral_fan ["coral_fan_direction" : 1, "coral_color" : "pink"]
      • /setblock ~~~ wool ["color": "blue"]
      • /fill ~ ~ ~ ~5 ~5 ~5 gold_block [] replace air
    • More information about commands can be found at learn.microsoft.com/minecraft/creator/commands
  • Volume arguments no longer floor the selector's position (MCPE-162237)
  • Selecting targets by volume will now select all entities whose hitbox collides with the volume box. This is versioned for 1.19.70 and later (MCPE-162237)
    • Previous behavior works as expected on versions less than 1.19.70
  • Volume arguments for selectors (dx, dy, dz) now support float values (MCPE-163863)
  • Replaceitem and loot replace block commands no longer place items in Cauldrons (MCPE-129472)
  • Rotation in the teleport command is now relative to the executor of the command instead of the target. Old usage of rotations in commands will stay relative to the target mob for backwards compatibility

Entity Properties

  • Fixed an issue where Entity Property value changes could be discarded if done by events fired as part of removal of active behaviors caused by other events

Mobs

  • Witch potion drinking and ranged attack behaviour is now defined in its .json file
  • The game will no longer create a content error when Bee spawn eggs are used on a Mob Spawner

GameTest Framework (Experimental)

  • Test
    • Added optional searchDistance parameter to assertEntityPresent(entityTypeIdentifier: string, blockLocation: BlockLocation, searchDistance?: number, isPresent?: boolean)
    • Added assertEntityInstancePresentInArea(entity: Entity, isPresent?: boolean) to check if an entity instance is present in the test area
    • Made the searchDistance parameter optional in assertItemEntityPresent

API (Experimental)

  • IMPORTANT BREAKING CHANGE: The classes Location and BlockLocation no longer exist in the beta script API. All usages of these classes have been changed to use the Vector3 interface (that is, { x: 1, y: 2, z: 3} objects)
  • Also, note that several changes were made to properties and get/set methods across objects (listed below) to make them more consistent in calling structure
    • World Events
    • Added event entityDie - It is fired when an entity dies
    • Modified projectileHit to be a readOnly property on the Events class
  • Player
    • Added method getSpawnPosition - Gets the spawnPoint position
    • Added property spawnDimension - Gets the spawnPoint dimension
    • Added method setSpawn(spawnPosition : Vec3, spawnDimension : Dimension) i Sets spawnPoint with a position and dimension
    • Added method clearSpawn - Sets the spawnPoint position and dimension to undefined
    • Renamed function tell to sendMessage
  • World
    • Renamed function say to sendMessage
    • Added method 'getDefaultSpawnPosition' - Gets the spawnPoint position
    • Added method 'setDefaultSpawn'(spawnPosition : Vec3) - Sets the spawnPoint position within 'overworld' dimension
  • BeforeChatEvent
    • Added function getTargets(): Player[] - Gets chat Player targets
    • Added function setTargets(players: Player[]) - Sets chat Player targets
    • Removed property targets
  • BeforeDataDrivenEntityTriggerEvent
    • Added function getModifiers(): DefinitionModifier[] - Gets entity definition modifiers
    • Added function setModifiers(modifiers: DefinitionModifier[]) - Sets entity definition modifiers
    • Removed property modifiers
  • BoolBlockProperty
    • Added function getValidValues(): boolean[] - Gets all valid boolean values for the BoolBlockProperty
    • Removed property validValues
  • Converted BlockHitInformation to an interface
  • ChatEvent
    • Added function getTargets(): Player[] - Gets chat Player targets
    • Removed property targets
  • Converted Color to an interface
  • DataDrivenEntityTriggerEvent
    • Added function getModifiers(): DefinitionModifier[] - Gets Entity definition modifiers
    • Removed property modifiers
  • DefinitionModifier
    • Added function getComponentGroupsToAdd(): string[] - Gets component groups that will be added with the DefinitionModifier
    • Added function setComponentGroupsToAdd(newGroups: string[]): void - Sets component groups that will be added with the DefinitionModifier
    • Added function getComponentGroupsToRemove(): string[] - Gets component groups that will be removed with the DefinitionModifier
    • Added function setComponentGroupsToRemove(removedGroups: string[]): void - Sets component groups that will be removed with the DefinitionModifier
    • Added function getTriggers(): Trigger[] - Gets event triggers of the DefinitionModifier
    • Added function setTriggers(newTriggers: Trigger[]): void - Sets event triggers of the DefinitionModifier
    • Removed property componentGroupsToAdd
    • Removed property componentGroupsToRemove
    • Removed property triggers
  • DirectionBlockProperty
    • Added function getValidValues(): Direction[] - Gets all valid direction enum values for the DirectionBlockProperty
    • Removed property validValues
  • Entity
    • Added function getViewDirection(): Vector3 - Gets view direction of the Entity
    • Added function getRotation(): XYRotation - Gets rotation of the Entity
    • Added function getVelocity(): Vector - Gets velocity of the Entity
    • Removed property viewDirection
    • Removed property rotation
    • Removed property velocity
  • Added function playAnimation(animationName: string, options?: PlayAnimationOptions)
    • Plays the specified animation for an entityReplaced general setVelocity call with methods to apply impulses to entities:
  • Added function clearVelocity(): void - Sets the current velocity of the Entity to zero
  • Added function applyImpulse(vector: Vector3): void - Applies impulse vector to the current velocity of the Entity
  • Added function applyKnockback(directionX: number, directionZ: number, horizontalStrength: number, verticalStrength: number): void - Applies knockback to the Entity in specified direction based on vertical and horizontal strength
  • Removed function setVelocity
  • EntityAgeableComponent
    • Added function getDropItems(): string[] - Gets items that drop when entity grows
    • Added function getFeedItems(): EntityDefinitionFeedItem[] - Gets items that can be fed to the entity
    • Removed property dropItems
    • Removed property feedItems
  • EntityBreathableComponent
    • Added function getBreatheBlocks(): BlockPermutation[] - Gets blocks entity can breathe in
    • Added function getNonBreatheBlocks(): BlockPermutation[] - Gets blocks entity can't breathe in
    • Removed property breatheBlocks
    • Removed property nonBreatheBlocks
  • EntityHealableComponent
    • Added function getFeedItems(): FeedItem[] - Gets healing items for the EntityHealableComponent
    • Removed property items
  • Converted EntityHitInformation to an interface
  • EntityRideableComponent
    • Added function getFamilyTypes(): string[] - Gets supported rider entity types
    • Added function getSeats(): Seat[] - Gets rider information for each seat
    • Removed property familyTypes
    • Removed property seats
  • EntityTameableComponent
    • Added function getTameItems(): string[] - Gets tame items of the EntityTameableComponent
    • Removed property tameItems
  • FeedItem
    • Added function getEffects(): FeedItemEffect[] - Gets effect of the FeedItem
    • Removed property effects
  • IntBlockProperty
    • Added function getValidValues(): number[] - Gets all valid integer values for the IntBlockProperty
    • Removed property validValues
  • ItemDurabilityComponent
    • Added function getDamageRange(): NumberRange - Gets the range of numbers that describes the chance of the item losing durability
    • Removed property damageRange
  • Converted NumberRange to an interface
  • ProjectileHitEvent
    • Added function getBlockHit(): BlockHitInformation - Gets block hit information from the ProjectileHitEvent
    • Added function getEntityHit(): EntityHitInformation - Gets entity hit information from the ProjectileHitEvent
    • Removed property blockHit
    • Removed property entityHit
  • StringBlockProperty
    • Added function getValidValues(): string[] - Gets all valid string values for the StringBlockProperty
    • Removed property validValues
  • ItemStack
    • ItemStack can now be constructed using a string identifier
    • Removed constructor parameter data
    • Removed property data
    • Removed function clearLore - To clear lore, call setLore with an empty array or undefined
    • Setting nameTag to an empty string will now clear the name tag
    • Setting nameTag to a string longer than 255 characters will now result in an exception
    • Setting amount greater than the maximum stack size will now clamp the value to the maximum stack size
    • Setting amount to a value less than 1 will now result in an exception
    • Item lore can now be cleared by calling setLore(undefined) or setLore([])
    • Fixed a bug where calling function ItemStack.getComponent or ItemStack.getComponents would fail on ItemStacks returned from EntityItemComponent.itemStack
    • Added read-only property getMaxAmount: number - Returns the maximum stack size for the item
    • Added read-only property isStackable: bool - Returns whether the item is stackable
    • Added function isStackableWith(itemStack: ItemStack): bool - Returns whether the item can be stacked with the given item
    • Added read-only property type: ItemType - Returns the type of the item
    • Added function clone(): ItemStack - Returns a copy of the item stack
    • Added property keepOnDeath: bool - Sets whether the item is kept on death
    • Added property lockMode: ItemLockMode - Sets whether the item can be moved or dropped
    • Added function setCanPlaceOn(blockIdentifiers?: string[]) - Sets which blocks the item can be placed on
    • Added function setCanDestroy(blockIdentifiers?: string[]) - Sets which blocks this item can destroy
  • ContainerSlot
    • Removed function clearItem - To clear the item, call setItem with undefined
    • Removed function clearLore - To clear lore, call setLore with an empty array or undefined

General changes to more consistently use methods when working with simple data-only objects vs. properties:

  • BeforeExplosionEvent
    • Added function getImpactedBlocks(): Vector3[] - Gets the blocks locations that are impacted the by the explosion
    • Added function setImpactedBlocks(blocks: Vector3[]): void - Sets the blocks locations that are impacted the by the explosion
    • Removed property impactedBlocks
  • BeforeItemUseOnEvent
    • Added function getBlockLocation(): Vector3 - Gets the location of the block being impacted
    • Removed property blockLocation
  • BlockInventoryComponent
    • Removed property location
  • BlockLavaContainerComponent
    • Removed property location
  • BlockPistonComponent
    • Added function getAttachedBlocks(): Vector3[] - Gets the blocks locations that are impacted by the activation of this piston
    • Removed property attachedBlocks
    • Removed property location
  • BlockPotionContainerComponent
    • Removed property location
  • BlockRecordPlayerComponent
    • Removed property location
  • BlockSignComponent
    • Removed property location
  • BlockSnowContainerComponent
    • Removed property location
  • BlockWaterContainerComponent
    • Removed property location
    • Added function getHeadLocation(): Vector3 - Gets the head location of the Entity
    • Removed property headLocation
  • ExplosionEvent
    • Added function getImpactedBlocks(): Vector3[] - Gets the blocks locations that are impacted the by the explosion
    • Removed property impactedBlocks
  • ItemStartUseOnEvent
    • Added function getBlockLocation(): Vector3 - Gets the location of the block being impacted
    • Added function getBuildBlockLocation(): Vector3 - Gets the location of the resulting build block
    • Removed property blockLocation
    • Removed property buildBlockLocation
  • ItemStopUseOnEvent
    • Added function getBlockLocation(): Vector3 - Gets the location of the block being impacted
    • Removed property blockLocation
  • ItemUseOnEvent
    • Added function getBlockLocation(): Vector3 - Gets the location of the block being impacted
    • Removed property blockLocation
  • NavigationResult
    • Added function getPath(): Vector3[] - Gets the locations of the blocks that comprise the navigation route
    • Removed property path
  • Player
    • Added function getHeadLocation(): Vector3 - Gets the head location of the Player
    • Removed property headLocation
  • Block
    • Added function isAir - Returns if the block is an air block (i.e. empty space)
    • Added function isLiquid - Returns if the block is a liquid (e.g., a water block and a lava black are liquid, while an air block and a stone block are not)
    • Added function isSolid - Returns if the block is solid (e.g., a cobblestone block and a diamond block are solid, while a ladder block and a fence block are not)
    • The following blocks now have an inventory component:
      • Barrel
      • Beacon
      • Blast Furnace
      • Brewing Stand
      • Dispenser
      • Dropper
      • Furnace
      • Hopper
      • Jukebox
      • Lectern
      • Smoker

BlockPermutation

BlockPermutation has been significantly refactored! Every BlockPermutation now share a unique JavaScript handle so exact equality (===) will work for permutations that share exactly the same state values. We've also added utility methods that make interacting with permutations easier, which includes the removal of the XBlockProperty classes and now directly return properties (boolean | number | string) or a while collection of properties ( Record<string, boolean | number | string>)

  • Added method matches(blockName: string, properties?: BlockProperties): boolean which is used to match a block with optional states against a BlockPermutation
  • Added method withProperty(name: string, value: boolean | number | string): BlockPermutation; which returns a new block permutation with a given property set to a specific value. Throws if the provided data cannot be resolved as a valid block permutation
  • Added function static resolve(blockName: string, properties?: BlockProperties): BlockPermutation which resolve a BlockPermutation from a block name and optional states. Throws if the provided data cannot be resolved as a valid block permutation
  • Updated methods getProperty and getAllProperties to return values directly instead of wrapped into class objects. Example code:

Before:

const blockPermutation = MinecraftBlockTypes.stoneSlab.createDefaultBlockPermutation();

blockPermutation.getProperty(MinecraftBlockProperties.stoneSlabType).value = 'stone_brick';

blockPermutation.getProperty(MinecraftBlockProperties.topSlotBit).value = true;

Now:

const blockPermutation = BlockPermutation.resolve('minecraft:stone_slab', {

    stone_slab_type: 'stone_brick',

    top_slot_bit: true,

});

BlockProperties

  • Added new class to expose BlockPropertyType

BlockPropertyType

  • Added new class to track "definitional" data about block properties. This is how you can find which values are valid for each block property

Data-Driven Custom Blocks

  • Released block properties and permutations out of experimental in JSON formats 1.19.70 and higher
  • Added a content warning when loading world with more than 65536 custom block permutations. Custom block permutation counts are logged in debug log