Bedrock Edition beta 1.20.40.22

**Beta 1.20.40.22** (Android) or **Preview 1.20.40.22** (Windows, iOS, iPadOS, Xbox) is the third beta/*Preview* version for Bedrock Edition 1.20.40, released on September 20, 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.

## Changes

### Gameplay

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

### Items

Goat Horns
* Now have a range of 256 blocks.

### Mobs

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

Witch
* Now target players within a 16 block distance.

### Technical

Bedrock Editor
* Released the version `0.4.5`.

## Experimental

These additions and changes are accessible by enabling the "Beta APIs", "Molang Features", "Experimental Cameras", and "Render Dragon Features for Creators" experimental toggles.

### Changes

#### Technical

API
* 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
* 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
* Added a new `query.is_in_lava` query function to Molang, to know if a mob is currently in lava.

Render Dragon Features for Creators
* Disabled the "Deferred Technical Preview" on some Android devices that don’t support the current requirements for compute shaders (`GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS >= 256`).

## Fixes

14 issues fixed
From released versions before 1.20.0
* MCPE-41103 – Lava flowing down or fully spread out does not change to cobblestone when touched by water from the side.
* MCPE-153254 – Goat Horn has a very short sound range with other players.
* 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.

From the version 1.20.0
* MCPE-169666 – Camels appear to slide when walking.
* MCPE-172369 – Camels indefinitely dash while in lava.
* 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 the previous development versions
* MCPE-173934 – Crash when enabling "Deferred Render" experimental feature.

Others
* 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.

## References

1. ↑ "Minecraft - Beta & *Preview* 1.20.40.22" – Minecraft Feedback, September 20, 2023.