---
title: Block Changed Ack
description: "Play 0x04, server → client."
---

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

Acknowledges block changes made by the client up to the given `sequenceId`. The server sends it after processing serverbound PlayerAction or UseItemOn packets that carried a sequence number. The client uses it to drop its client-side block predictions up to that sequence and accept the server's authoritative state.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `sequenceId` | VarInt |  |

## Send it

```ts
await client.sendPacket("BlockChangedAck", {
  sequenceId: /* VarInt */,
});
```

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

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