> For the complete documentation index, see [llms.txt](https://edseries-plugins.gitbook.io/p/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://edseries-plugins.gitbook.io/p/edpets/core/display-modes.md).

# Display Modes & Entities

Pets are **packet-only** and **owner-only**: no real entities exist, and only the owner is a packet watcher. One global async task moves every pet on the server (interval = `display.tick-interval`), skipping redundant packets and — with `bobbing: false` — skipping idle players entirely on static formations.

## Entity types (per pet: `display.entity`)

| Type                          | Pros                                                                                                                                                                                                                       | Cons                                                                            |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------- |
| `armor-stand` *(default)*     | Held item + real **arm swing animations**, small/normal size                                                                                                                                                               | movement steps at the mover rate                                                |
| `item-display`                | **Client-side interpolated movement** (perfectly smooth even at high `tick-interval`), scalable (**defaults to 2×**), an **always-visible tool** riding the pet that chops via transformation interpolation while grinding | tool position/angles are global (`animations.yml → settings.item-display-tool`) |
| model (`display.model: <id>`) | Full **Blockbench models with animations** (see [Model Pets](/p/edpets/developers/models.md))                                                                                                                              | needs a model in `models/`                                                      |

Every swing (all three types) also plays **owner-only packet particles** — configure them in `animations.yml → settings.swing-particles` (`type: NONE` disables).

Names always float **above** the pet — a text display rides the pet (translated up by `display.name-height`), so it follows for free with zero extra packets.

## Formations

Players pick their formation in the **Display Modes** GUI (`guis/display-modes.yml`); the default is `display.default-mode`.

| Mode              | Description                                                                                  |
| ----------------- | -------------------------------------------------------------------------------------------- |
| `CIRCLE`          | Rotating circle around the player                                                            |
| `CIRCLE_STATIC`   | Static, evenly spread circle                                                                 |
| `HYPIXEL`         | Pet floats in place and glides after you once you walk away (snaps past `teleport-distance`) |
| `CENTERED`        | First pet floats above you, the rest circle                                                  |
| `FRONT`           | Hovering in front, near the ground                                                           |
| `VERTICAL_STACK`  | Stacked vertically above you                                                                 |
| `PARROT`          | On your shoulders, alternating sides                                                         |
| `SPIRAL`          | Spiral that rises and falls                                                                  |
| `ROW_3` / `ROW_5` | Rows behind you, stacking upward per full row                                                |
| `BEHIND`          | Line close to the ground behind you                                                          |
| `V_FORMATION`     | V shape behind you                                                                           |
| `LINE`            | Single file behind you                                                                       |
| `CIRCLE_RINGS`    | Rings of three, stacking vertically                                                          |

## Performance notes

* Each moving pet costs **one \~50-byte packet to exactly one player** per mover tick — 500 displayed pets is trivial load, entirely off the main thread.
* Teleports and warps are handled: jumps beyond \~6.5 blocks switch from relative move packets to absolute teleport packets automatically.
* Raise `tick-interval` to 3–4 with `entity: item-display` pets for the same smoothness at even fewer packets.
