---
title: Disguised Chat
description: "Play 0x21, server → client."
---

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

Shows a chat message without a signature, formatted as a player chat message using the chat `type`, `name`, and optional `target`. The server uses it for messages such as /say and other unsigned player-style output. The client formats it in the chat using the given chat type but does not verify it.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `message` | NBT |  |
| `type` | ChatTypesHolder | also `chatType`, `subscriptionType` |
| `name` | NBT | also `senderName` |
| `target` | Optional | also `targetName` |

## Send it

```ts
await client.sendPacket("DisguisedChat", {
  message: /* NBT */,
  type: /* ChatTypesHolder */,
  name: /* NBT */,
  target: /* Optional */,
});
```

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

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