> 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/edcosmetics/modules/emotes.md).

# Emotes

Module `emotes`. An emote replaces the player with a 3D model wearing their skin, name tag, hat, wings and glow, and plays an animation (F5 to watch, or turn on the orbiting camera). Moving, sneaking, clicking or F stops it. Armour and held items are hidden meanwhile.

Shipped: Wave, Groove, Cheer, Clap, Facepalm, Dab, Salute, Shrug, Backflip, Pumpkin Head, Witch's Brew, Boo!, Twerk.

## Menu or wheel

`config.yml` → `menus.emotes`:

* `gui`: `/emotes` opens the emotes chest menu (`guis/emotes.yml`). Left-click plays an emote, right-click adds it to (or removes it from) the player's favourites, which come first.
* `hud` (default): the **emote wheel**, drawn by the resource pack. Moving the mouse moves a cursor on the wheel; the section under it grows and shows its name in the centre. Click plays it; push the cursor onto the arrows and click, or scroll, to change page. Push the cursor onto a section's star to make it a favourite. Sneak, walk, jump or take damage to close it. Players without the pack see the wheel floating in front of them; Bedrock players always get the chest menu.

`emotes/config.yml` → `wheel.open-with-swap-key: true` opens the menu / wheel with the swap-hands key (**F**); with `require-sneak: true` it needs **Shift+F** instead, so F keeps swapping hands.

## Commands and permissions

| Command                         | Permission                                        |                                                            |
| ------------------------------- | ------------------------------------------------- | ---------------------------------------------------------- |
| `/emotes`                       | `edcosmetics.emotes.use`                          | open the menu / wheel                                      |
| `/emotes <emote>`               | `edcosmetics.emotes.use` + the emote's permission | play an emote                                              |
| `/emotes list`                  |                                                   | list the emotes                                            |
| `/emotes play <emote> <player>` | `edcosmetics.emotes.admin`                        | play an emote on a player (no cooldown / permission check) |
| `/emotes reload`                | `edcosmetics.emotes.admin`                        | reload the emotes files                                    |

An emote needs `edcosmetics.emote.<id>` (`emotes/config.yml` → `permission-prefix`) unless `emotes.yml` gives it its own `permission` (`''` = everyone). Locked emotes show with a padlock (`wheel.show-locked`).

## emotes/config.yml

| Section  | Options                                                                                                                                                                                                                                              |
| -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `wheel`  | open key, `timeout-seconds`, `favourites`, `show-locked`, `texts` (every wheel text, see [Translating](/p/edcosmetics/reference/translating.md)), `name-scale`, `small-scale`, `sounds`                                                              |
| `emotes` | `cooldown-seconds`, `max-loop-seconds`, `camera` (+ `camera-distance`, `camera-height`), `stop-on-move`, `restore-view`, `glow`, `update-ticks`, `hide-equipment`, `nametag`, `nametag-self`, `back-items`, `disabled-worlds`, `packet-floor-worlds` |

* `nametag` is drawn above the model while the player is hidden (PlaceholderAPI, `&` and `&#RRGGBB`; a placeholder nobody answers is left out). TAB's `%tab_...%` placeholders need `register-tab-expansion: true` in TAB's config.
* `packet-floor-worlds`: worlds whose floor is drawn with packets (the server can't see the player standing there): no on-ground check.
* `back-items`: `shader` (wings rebuilt on the model's torso every frame, glued in every pose), `stand` (an armour stand wears them, trails slightly) or `off`.

## emotes.yml

Each emote is a set of keyframe tracks per body part (`head`, `body`, `right_arm`, `left_arm`, `right_leg`, `left_leg`, `root`), each `[time, rx, ry, rz]` in seconds and degrees, smoothly interpolated. The file's header explains the angles. Other keys: `name`, `order` (6 per wheel page), `length`, `loop`, `max-loop-seconds`, `icon-time`, `sound`, `permission`, `root-position`.

**Props**: items held in a hand, worn on the head or standing in front of the player (`bone: root`), each an item display moving with the model (`item`, `item-model`, `offset`, `rotation`, `size`, `scale` keys to pop in and out). **Particles** puff from a point of the model between two times. Pumpkin Head and Witch's Brew are examples.

The wheel's icons are drawn with the pack, so a new emote shows on the wheel with a generic icon; the chest menu shows any emote.
