---
title: Level Particles
description: "Play 0x2F, server → client."
---

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

Spawns `amount` particles of type `particle` at the given position, spread by the offsets and given a velocity from `velocityOffset`. `longDistance` raises the visible range from 32 to 512 blocks and `alwaysShow` forces display regardless of particle settings. The client renders the particles.

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

## Fields

| Field | Type | Notes |
|---|---|---|
| `longDistance` | Boolean |  |
| `alwaysShow` | Boolean |  |
| `x` | Double |  |
| `y` | Double |  |
| `z` | Double |  |
| `offsetX` | Float |  |
| `offsetY` | Float |  |
| `offsetZ` | Float |  |
| `velocityOffset` | Float |  |
| `amount` | Int |  |
| `particle` | [Particle](/docs/particles) |  |

## Send it

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

// 20 flames spread around a point.
await client.sendPacket("LevelParticles", helpers.createParticlePacket("flame", { x: 0.5, y: 65, z: 0.5 }, {
  count: 20,
  offset: 0.5,
  speed: 0.1,
}));

// Particles with data take their options by name.
await client.sendPacket("LevelParticles", helpers.createParticlePacket(
  helpers.createParticle("dust", { color: "#ff8800", scale: 1.5 }),
  { x: 0.5, y: 66, z: 0.5 },
));
```

`particle` is a [Particle](/docs/particles): a registry name plus type-specific data. See [Particles](/docs/particles) for every payload.

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

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