Bedrock Edition 1.20.40

**This article is a work in progress.**
Please help in the expansion or creation of this article by expanding or improving it. The talk page may contain suggestions.

## v1.20.40

### Protocol version

Pending

**1.20.40** is a minor update to *Bedrock Edition* released on October 24, 2023 which brings more parity from *Java Edition* and fixes bugs.

## Additions

### General

Controls
* Added the ability to customize touch controls.

Options
* Added "Customize Controls" experimental *touch* option, OFF by default.
	+ Enables the ability to customize touch controls.
		- It can only be done within a world.

`options.txt`
* Added the following `options`:
	+ `gfx_moveStickX`, defaults to `0.15`.
	+ `gfx_moveStickY`, defaults to `0.6`.
	+ `gfx_moveStickScale`, defaults to `1`.
	+ `gfx_moveStickSensitivity`, defaults to `1`.
	+ `gfx_moveStickInvertX`, defaults to `false`.
	+ `gfx_moveStickInvertY`, defaults to `false`.
	+ `gfx_touchButton1X`, defaults to `0.925`.
	+ `gfx_touchButton1Y`, defaults to `0.4`.
	+ `gfx_touchButton1Scale`, defaults to `1`.
	+ `gfx_touchButton1Opacity`, defaults to `1`.
	+ `gfx_touchButton2X`, defaults to `0.825`.
	+ `gfx_touchButton2Y`, defaults to `0.5`.
	+ `gfx_touchButton2Scale`, defaults to `1`.
	+ `gfx_touchButton2Opacity`, defaults to `1`.
	+ `gfx_touchButton3X`, defaults to `0.925`.
	+ `gfx_touchButton3Y`, defaults to `0.6`.
	+ `gfx_touchButton3Scale`, defaults to `1`.
	+ `gfx_touchButton3Opacity`, defaults to `1`.
	+ `gfx_touchButton4X`, defaults to `0.825`.
	+ `gfx_touchButton4Y`, defaults to `0.7`.
	+ `gfx_touchButton4Scale`, defaults to `1`.
	+ `gfx_touchButton4Opacity`, defaults to `1`.
	+ `gfx_touchButton5X`, defaults to `0.925`.
	+ `gfx_touchButton5Y`, defaults to `0.8`.
	+ `gfx_touchButton5Scale`, defaults to `1`.
	+ `gfx_touchButton5Opacity`, defaults to `1`.
	+ `gfx_touchDpadX`, defaults to `0.135`.
	+ `gfx_touchDpadY`, defaults to `0.775`.
	+ `gfx_touchDpadScale`, defaults to `1`.
	+ `gfx_touchDpadOpacity`, defaults to `1`.
	+ `gfx_classicButton1X`, defaults to `0.9`.
	+ `gfx_classicButton1Y`, defaults to `0.6`.
	+ `gfx_classicButton1Scale`, defaults to `1`.
	+ `gfx_classicButton1Opacity`, defaults to `1`.
	+ `gfx_classicButton2X`, defaults to `0.9`.
	+ `gfx_classicButton2Y`, defaults to `0.75`.
	+ `gfx_classicButton2Scale`, defaults to `1`.
	+ `gfx_classicButton2Opacity`, defaults to `1`.
	+ `gfx_classicButton3X`, defaults to `0.9`.
	+ `gfx_classicButton3Y`, defaults to `0.9`.
	+ `gfx_classicButton3Scale`, defaults to `1`.
	+ `gfx_classicButton3Opacity`, defaults to `1`.

## Changes

### Blocks

Note Block
* Updated the sound that’s played when wither skeleton skulls are placed on top.

Sculk
* No longer drops XP when mined with Silk Touch.

Sculk Sensor and Calibrated Sculk Sensor
* Can now detect closing the inventory of a boat with chest, a bamboo raft with chest, or a minecart with chest.

Water
* Mobs no longer receive fall damage when falling into a 1 block deep water pool.
* The ambient sounds for entering exiting water is now played only when an entity is submerged below eye-level in water, matching *Java Edition*.
* The splash sound for entering water has been updated to match *Java Edition*.

### Command format

`/give`
* The sound for picking up items is now played when using the command.

Chest, Ender Chest, Stonecutter, and Trapped Chest
* Now they use the `minecraft:cardinal_direction` block state instead of `facing_direction`.
	+ `minecraft:cardinal_direction` uses four string values `["east", "north", "south", "west"]`.

### Gameplay

Game rules
* The `spawnradius` game rule is now set to `10` by default to match *Java Edition*.

### General

Options
* The "Respawn radius" advanced option is now set to `10` by default instead of `5`.

### Items

Bottle
* Now emit sounds when filling it from water.
* Pouring liquid from a bottle into a cauldron emits the appropriate sound.
* Filling a bottle from a cauldron now emits the appropriate sound.
* Drinking from a bottle now emits the appropriate sound.

Explorer Map
* Updated structure icons on explorer maps sold by cartographers.

Goat Horns
* Now have a range of 256 blocks.

### Mobs

Cat
* Now plays a sound when begging for food.

Evoker
* No Longer Spawns in Peaceful Difficultly

Guardian and Elder Guardian
* Makes flopping sounds again when on land.

Iron Golem and Snow Golem
* Now have a crumbling-like particle effect when they are created.

Vindicator
* No Longer Spawns in Peaceful Difficulty.

Villager
* Cartographers no longer offer exploration maps as a trade item when not in the overworld.

Witch
* Now target players within a 16 block distance.

Wither
* The boss bar on the HUD is now same color as *Java Edition*.

Wither Skeleton
* Now have their own unique sounds.

Zombie Villager
* Curing time is now randomized between 3 and 5 minutes, to match *Java Edition*.

### Non-mob entities

Boat and Boat with Chest
* Falling from a great height while riding it no longer deals fall damage.

## Experimental

These additions and changes are accessible by enabling the "Villager Trade Rebalancing", "Beta APIs", "Molang Features", and "Experimental Cameras" experimental toggles.

### Changes

#### Gameplay

Trading
* Added seven new maps which cartographers can selling, depending on the biome they come from.
	+ Jungle and swamp villages do not generate naturally. Thus, players must breed villagers or cure zombie villagers in these biomes to access their trades.
	+ Village maps points to a village in specific biome. Jungle explorer map points to a jungle pyramid. Swamp explorer map points to a swamp hut.

* Changed trades of armorers, change summary:
	+ Buying diamond armor now also requires a small amount of diamonds.
	+ Most master-level armorers buy iron blocks and pay 4 emeralds for them.
	+ Chainmail armor is exclusively sold by jungle and swamp armorers.
	+ The savanna armorer sells cursed diamond armor at reduced prices.
	+ The taiga armorer can swap one piece of diamond armor for another.

#### World generation

Ancient City
* Increases the chance of generating enchanted books with Mending.

Desert Temple
* Increases the chance of generating enchanted books with Unbreaking (level I to III).

Jungle Temple
* Increases the chance of generating enchanted books with Unbreaking (level I to III).

Mineshaft
* Increases the chance of generating enchanted books with Efficiency (level I to V).

Pillager Outpost
* Increases the chance of generating enchanted books with Quick Charge (level I to III).

#### Technical

API
* Changed the names of the `CameraSetOptions` options to not include the word 'Script'.
* Added the `chat(message: string)` method.
* Changed `get` to return `ItemType | undefined`.
* Changed source on `ItemDefinitionTriggeredAfterEvent` to be optional.
* Added the following methods to `Player`:
	+ `above(steps?: number): Block | undefined`
	+ `below(steps?: number): Block | undefined`
	+ `north(steps?: number): Block | undefined`
	+ `east(steps?: number): Block | undefined`
	+ `south(steps?: number): Block | undefined`
	+ `west(steps?: number): Block | undefined`
	+ `offset(offset: Vector3): Block | undefined`
	+ `center(): Vector3`
	+ `bottomCenter(): Vector3`
	+ Made `getItemStack` function return `ItemStack` or `undefined`.
	+ `playMusic(trackId: string, musicOptions?: MusicOptions): void`
	+ `queueMusic(trackId: string, musicOptions?: MusicOptions): void`
	+ `stopMusic(): void`
* `BlockStates`
	+ Made get function return `BlockStateType` or `undefined`.
* Updated ExplosionAfterEvent and ExplosionBeforeEvent.
	+ `getUpdatedBlocks()` will now return `Block[]`.
	+ `setUpdatesBlocks(blocks: Block[])` now takes in a `Block[]`.
* Dynamic Properties
	+ Property registration is no longer required and `propertyRegistry` has been removed from the `worldInitialize` event.
	+ Removed limits on the count and size of properties that can set on an entity or the world.
	+ Default values have been removed. `getProperty` will now always return undefined for unset properties.
	+ String dynamic property values are now restricted to a length of `32767` *bytes*.
	+ Removed function `removeDynamicProperty`.
	+ Added function `getDynamicPropertyIds` - Returns an array of all dynamic property ids on an entity/world used by the behavior pack.
	+ Added function `getDynamicPropertyTotalByteCount` - Returns the total number of bytes used by all dynamic properties on an entity/world by the behavior pack.
	+ Added function `clearDynamicProperties` - Removes all dynamic properties added by this behavior pack from an entity/world.
	+ Dynamic property numbers are now stored with double precision (`64` *bits*)
* Adding `PlayerInteractWithBlock` and `PlayerInteractWithEntity` before & after events.
* Adding `PlayerDimensionChangeBeforeEvent` and `PlayerDimensionChangeAfterEvent`.
* Released `World.getMoonPhase`, `MoonPhase`, and `MoonPhaseCount` v`1.6.0`.
* Camera APIs moved from *beta* to `1.6.0`.
* Released `Entity.is*` API’s from *beta* to `1.6.0`:
	+ `isSleeping`.
	+ `isSneaking`.
	+ `isSprinting`.
	+ `isSwimming`.
	+ `isClimbing`.
	+ `isOnGround`.
	+ `isInWater`.
	+ `isFalling`.
* Released player level & XP APIs from *beta* to `1.6.0`:
	+ `addLevels`.
	+ `addExperience`.
	+ `level`.
	+ `getTotalXP`.
	+ `xpEarnedAtCurrentLevel`.
	+ `totalXpNeededForNextLevel`.
	+ `resetLevel`.
* Released `Player.is*` API’s from *beta* to `1.6.0`:
	+ `isEmoting`.
	+ `isGliding`.
	+ `isJumping`.
	+ `isFlying`.
* Updated all methods besides show on `ActionFormData`, `MessageFormData`, and `ModalFormData` to be callable in read-only mode.
* `BlockInventoryComponent`
	+ container member variable now correctly reflects it can be a `Container` or `undefined`.
* Fixed a versioning bug preventing `@minecraft/server-ui` module from working with `@minecraft/server` above version `1.2.0`.
* `WeatherType` moved to `1.6.0`:
	+ Moved function `setWeather` to `1.6.0`.
	+ Moved event/property `entityRemove` from *beta* to `1.6.0`.
	+ Moved event/property `entityRemove` from *beta* to `1.6.0`.
* Moved class `EntityRemovedAfterEvent` from *beta* to `1.6.0`.
* Moved class `EntityRemoveAfterEventSignal` from *beta* to `1.6.0`.
* Moved class `EntityRemovedBeforeEvent` from *beta* to `1.6.0`.
* Moved class `EntityRemoveBeforeEventSignal` from *beta* to `1.6.0`.
	+ Moved event/property `entityLoad` from *beta* to `1.6.0`.
* Moved class `EntityLoadAfterEvent` from *beta* to `1.6.0`.
* Moved class `EntityLoadAfterEventSignal` from *beta* to `1.6.0`.
	+ Moved event/property `entitySpawn` from *beta* to `1.6.0`.
* Moved enum `EntityInitializationCause` from *beta* to `1.6.0`.
* Moved class `EntitySpawnAfterEvent` from *beta* to `1.6.0`.
* Moved class `EntitySpawnAfterEventSignal` from *beta* to `1.6.0`.
	+ Moved event/property `playerBreakBlock` from *beta* to `1.6.0`.
	+ Moved event/property `playerBreakBlock` from *beta* to `1.6.0`.
* Moved class `PlayerBreakBlockAfterEvent` from *beta* to `1.6.0`.
* Moved class `PlayerBreakBlockAfterEventSignal` from *beta* to `1.6.0`.
* Moved class `PlayerBreakBlockBeforeEvent` from *beta* to `1.6.0`.
* Moved class `PlayerBreakBlockBeforeEventSignal` from *beta* to `1.6.0`.
	+ Moved event/property `playerPlaceBlock` from *beta* to `1.6.0`.
* Moved class `PlayerPlaceBlockAfterEvent` from *beta* to `1.6.0`.
* Moved class `PlayerPlaceBlockAfterEventSignal` from *beta* to `1.6.0`.
* Moved class `BlockEventSignalOptions` from *beta* to `1.6.0`.
	+ Move `isAir(): boolean` from *beta* to `1.6.0`.
	+ Move `isLiquid(): boolean` from *beta* to `1.6.0`.
	+ Moved `amount` from *beta* to `1.6.0`.
	+ Moved `keepOnDeath: boolean` from *beta* to `1.6.0`.
	+ Moved `lockMode: ItemLockMode` from *beta* to `1.6.0`.
	+ Moved `nameTag?: string` from *beta* to `1.6.0`.
	+ Moved `clone(): ItemStack` from *beta* to `1.6.0`.
	+ Moved `getTags(): string[]` from *beta* to `1.6.0`.
	+ Moved `hasTag(tag: string): boolean` from *beta* to `1.6.0`.
	+ Moved `setCanDestroy(blockIdentifiers?: string[]): void` from *beta* to `1.6.0`.
	+ Moved `getCanDestroy(): string[]` from *beta* to 1.6.0.
	+ Moved `setCanPlaceOn(blockIdentifiers?: string[]): void` from *beta* to `1.6.0`.
	+ Moved `getCanPlaceOn(): string[]` from *beta* to `1.6.0`.
	+ Moved function `getProperty` to `1.6.0`.
	+ Moved function `resetProperty` to `1.6.0`.
	+ Moved function `setProperty` to `1.6.0`.
* Added function `getWeather`.

JSON
* Added a content error when attempting to load a damage sensor with an invalid "cause" value.
* Allow single value parsing for `minecraft:icon` item component.
* The camel mob dash component can now be applied to rideable mobs other than horse, donkey, and mule using `minecraft:dash`.
* Trade items now have a `filters` property to determine if a trade should be considered.
* Trade items no longer support the `biome` property to check villager biome types, the `is_mark_variant` filter can be used in the `filters` property instead to check the villager biome type.
* Deprecated `minecraft:weapon` component starting in version 1.20.40.
* Deprecated `minecraft:on_use` component starting in version 1.20.40.
* Deprecated `minecraft:on_use_on` component starting in version 1.20.40.
* The `behavior.random_look_around_and_sit` now has the field `continue_sitting_on_reload`.
* `behavior.is_scenting` renamed to generic `behavior.timer_flag_1`.
* `behavior.is_rising` renamed to generic `behavior.timer_flag_2`.
* `behavior.is_feeling_happy` renamed to generic `behavior.timer_flag_3`.
* `behavior.timer_flag 1`: Fires an event when this behavior starts, then waits for a duration before stopping. When stopping due to that timeout or due to being interrupted by another behavior, fires another event. `query.timer_flag_1` will return `1.0` on both the client and server when this behavior is running, and `0.0` otherwise.
* `behavior.timer_flag 2`: Fires an event when this behavior starts, then waits for a duration before stopping. When stopping due to that timeout or due to being interrupted by another behavior, fires another event. `query.timer_flag_2` will return `1.0` on both the client and server when this behavior is running, and `0.0` otherwise.
* `behavior.timer_flag 3`: Fires an event when this behavior starts, then waits for a duration before stopping. When stopping due to that timeout or due to being interrupted by another behavior, fires another event. `query.timer_flag_3` will return `1.0` on both the client and server when this behavior is running, and `0.0` otherwise.

Molang
* Updated to version 1.20.40.
* Added a new `query.is_in_lava` query function to Molang, to know if a mob is currently in lava.

## Fixes

52 issues fixed
From released versions before 1.20.0
* MCPE-26929 – Guardians no longer make flopping sounds while on land.
* MCPE-38566 – D-Pad Touch controls not calibrated properly (up/down buttons).
* MCPE-41103 – Lava flowing down or fully spread out does not change to cobblestone when touched by water from the side.
* MCPE-43591 – Incorrect wither boss bar texture in Bedrock.
* MCPE-52904 – When you block a tipped arrow or shulker bullet with a shield, you still get the affect.
* MCPE-73307 – Elytra ceiling clip.
* MCPE-85954 – Villages in the nether or end are unstable.
* MCPE-99972 – Sheep don't drop wool after being previously sheared.
* MCPE-100598 – Buckets instantly pick up liquids after placing (MLG/bucket clutch doesn't work).
* MCPE-131980 – Rabbits rarely eat carrot crops.
* MCPE-152129 – Item name overlaps oxygen bar.
* MCPE-152130 – Item name overlaps mob health bar.
* MCPE-152131 – Item name overlaps Absorption health bar.
* MCPE-152753 – Boats no longer negate fall damage.
* MCPE-153254 – Goat Horn has a very short sound range with other players.
* MCPE-154385 – New UI for brewing stand doesn't fit the screen.
* MCPE-157918 – Missing sound for filling water bottles from source blocks and cauldrons.
* MCPE-160290 – Command `/damage` override type not working correctly.
* MCPE-164734 – Command candidates are not displayed if `@e[type=item]` is entered in `/execute`.
* MCPE-168369 – Purple border and tooltip text are broken when upgrading diamond gear to netherite.
* MCPE-168913 – Invalid data in `sound_definitions.json` can crash the game.
* MCPE-169067 – Editing sign in angle/side will edit back instead of the front.
* MCPE-173155 – Soul speed effect does not work when crawling on soul soil.

From 1.20.0 version
* MCPE-169577 – Diagonal patterns get inverted in shields.
* MCPE-169666 – Camels appear to slide when walking.
* MCPE-172369 – Camels indefinitely dash while in lava.
* MCPE-172674 – Camel is missing the dash button on smartphone touch controls.
* MCPE-172846 – Camel's legs won't stop moving when idle.
* MCPE-172917 – There is no chat message for when skipping the night is not possible with `playerssleepingpercentage` set above 100.
* MCPE-173028 – "Detected lost connection" and "Abandoned connection closed" error message is untranslated.
* MCPE-173189 – [ScriptAPI] Some characters are counted as 2 or 3 characters in the character count check of the `setLore()` method.

From 1.20.x versions
* MCPE-172377 – Zombie villagers don't have biome or rank overlays.
* MCPE-172785 – Player can pass through blocks by spamming jump and sneak.
* MCPE-173006 – Iron golems spawn in 2 block high space.
* MCPE-173362 – `/recipe` is still highlighted in blue in the chat box.
* MCPE-173799 – `minecraft:transformation` scale key without limit.
* MCPE-173898 – Foxes can't pick up equippable items (armor, mob heads, carved pumpkin, etc.).
* MCPE-173934 – Crash when enabling "Deferred Render" experimental feature.
* MCPE-174524 – Water splash sounds no longer plays after the addition of entering/exiting water sound.
* MCPE-174529 – Water from a waterlogged block cannot be removed with an empty bucket without aiming at the block in the water.

Others
* Fixed an issue where text to speech did not say how to open chat or emotes.
* Text-to-speech message for popup title/description is now played properly.
* Clicking off the game window will not unselect a friend.
* Fixed a bug where the tooltip for the v-sync setting was showing without being hovered.
* Fixed a bug where "PBR" was not included in HUD while in level using "Deferred Technical Preview".
* The seven new explorer maps from cartographers can now also point to structures in already explored chunks.
* Fixed a crash that could occur when running in the archold room in the spellrune marketplace map.
* Fixed an issue where particles were not consistently lit while in the "Deferred Technical Preview".
* Camels can no longer dash while in lava or water.
* Fixed an extremely rare bug (~0.000003% chance) that could cause item frames to not drop their item when hit or destroyed.
* Fixed a bug where closing the game while having the portfolio open resulted in a crash.
* Autocompleting text now moves the caret to end of the line.

## Notes

1. ↑ Divided into 3 groups, pulled independently.
2. ↑ The list of possible offers contains individual offers for each color, so multiple colors may be offered by the same villager as separate trades.