---
title: Player Abilities (clientbound)
description: "Play 0x40, server → client."
---

`play` · `0x40` · **clientbound** (server → client)

Sets the player's abilities: a `flags` bitfield (invulnerable, flying, allow flying, creative mode / instant break) plus `flyingSpeed` and the `walkingSpeed` field of view modifier. The server sends it after login, on game mode change, and when flight is toggled. The client applies the abilities to the local player.

Sent by the server, read by the client. Listen for it with `client.on("PlayerAbilities", (data) => …)` on the receiving side.

## Fields

| Field | Type | Notes |
|---|---|---|
| `flags` | Number |  |
| `flyingSpeed` | Number |  |
| `walkingSpeed` | Number |  |

## Send it

```ts
import { helpers } from "mc-protocol";

await client.sendPacket("PlayerAbilities", {
  flags: helpers.playerAbilityFlags({ allowFlying: true, flying: true }),
  flyingSpeed: 0.05,
  walkingSpeed: 0.1,
});
```

`flags` is one byte: invulnerable `0x01`, flying `0x02`, allowFlying `0x04`, creativeMode `0x08`. Read a client's reply with `helpers.unpackFlags(helpers.PLAYER_ABILITY_FLAGS, data.flags)`. See [Packet flags](/docs/flags#player_ability_flags).

Field aliases listed under Notes are accepted as alternative keys when writing.

Source: [`src/Core/Versions/776/Packets/play/clientbound/PlayerAbilities.ts`](https://github.com/GDLev/mc-protocol/blob/master/src/Core/Versions/776/Packets/play/clientbound/PlayerAbilities.ts)
