Keys and emotes
Every Punchy! Moves key with its label and default, how the emote wheel works, and how a pack adds emotes with keys and faces of their own.
-
Punchy! Studio
This page has not been translated into French yet, so it is shown in English. Read in English
On this page
Punchy! Moves has a few keys: two for the camera, one for its settings, one for the emote wheel, and one more for each emote a pack adds. This page lists every key with its label and default, shows how the emote wheel works, and walks you through adding emotes to a pack, with keys and faces.
It is for players who want to change a key or play an emote, and for pack makers who want their clips on the wheel.
Before you start
- Punchy! Moves installed (Getting started has the steps). Moves ships no clips of its own, so emotes come from resource packs.
- To follow the pack example you need nothing else: the clips are in the example. The clips on this page that show a pack use the example pack provided by Crafto, Fluid & Foolish.
- For the Punchy! Studio steps, Punchy! Studio and a pack with a clip named
wave(see Punchy! Moves in Punchy! Studio).
Every key
Moves puts its keys under the category Punchy Moves in Minecraft’s key binds. On Minecraft 1.21.1 and 1.20.1 the category shows as key.categories.punchy_moves, and each emote row as Punchy Emote: followed by the emote’s name.
| Label in Controls | Default | What it does |
|---|---|---|
| Toggle Custom Camera | V | Turns the custom shoulder camera on or off. The text above the hotbar says “Punchy Camera: enabled” or “Punchy Camera: disabled”. Turning it on switches to the third-person back view. |
| Toggle Orbit Camera | B | Turns the camera around your character without turning the body. WASD keeps moving the character while the camera holds its angle. Press it again to give the control back. It needs the custom camera: with the camera off, the text above the hotbar says “Enable the custom camera first”. |
| Open Camera Settings | F7 | Opens Moves’ settings panel, titled Punchy Moves, on its Camera page, with the Features and Shortcuts pages beside it. |
| Open Emote Wheel | C | Opens the emote wheel. A pack can set another default with menu_key. |
| Emote: (the emote’s name) | The key the pack gives it, or none | Plays that emote at once. There is one entry per emote on the wheel. |
The camera itself is explained on Camera and features.
Video coming soon
Fixed keys
Two more keys do something in Moves but are not in the key binds list, so you cannot move them.
| Key | What it does |
|---|---|
| F | Minecraft’s swap-hands key. Moves listens for F itself, so the body plays the pack’s item switch the moment you press it. |
| G | Makes Moves read the active packs’ animation and compat files again, then plays the clip that a compat file sets for the alignment action, a full-body check for pack makers. The text above the hotbar says “Punchy: playing align_ingame”, or “Punchy: align_ingame was not found” when no compat file sets an alignment action. |
How the keys behave
- Moves’ keys work in a world with no screen open, and only the press counts. Holding a key does nothing more.
- Moves checks its keys before the game does, in this order: Toggle Custom Camera, Open Camera Settings, Toggle Orbit Camera, Open Emote Wheel, then each emote key, then F and G. When two things share a key, the first one in that order gets the press and the other never fires.
- A key you set in Controls always wins over a default from a pack.
Change a key
- Press Esc, then open Options, Controls and Key Binds.
- Scroll to the category Punchy Moves. It lists the four Moves keys and one row per emote, named Emote: Wave for an emote called Wave, in alphabetical order.
- Click the button next to the entry and press the key you want.
You can also press F7 and open Shortcuts. The page lists the four Moves keys and one row per emote, each with its current key, and scrolls when there are more than ten rows. Its Open Minecraft key binds button opens Minecraft’s Key Binds. Replay tutorial, the button in the left column on every page, shows the quick guide again, including its page “Emotes at your fingertips”.
Play an emote
- Stand still on the ground, in third person so you can see your player (F5 turns to it).
- Press C, the key labelled Open Emote Wheel.
- Click an emote. The wheel closes and your player plays it.
Or skip the wheel: press the emote’s own key, if the pack gave it one.

The wheel
- Four emotes sit around a centre button, one page at a time. Each tile shows the emote’s name and, in a small box, its key, or the game’s own text for an unbound key when it has none.
- The < and > buttons turn the pages, and they wrap round from the last page to the first. The counter under the wheel reads like “2 / 2” and shows only when there is more than one page.
- The X in the middle closes the wheel. So does the wheel key, or Esc.
- With no emotes at all, the wheel says “No emotes in the active pack”.
- The wheel lists the emotes of the active packs, in the path order of the compat files. When two packs have a compat file at the same path, only the higher pack’s file is read. An emote whose clip no pack defines is left out.
When an emote plays
- Only while you stand still and on the ground. If you press an emote key while moving, the request is dropped, not kept for later. Moving while an emote plays ends it.
- The emote plays its clip once and fades out.
- Emotes are not sent to other players. Only you see your own emotes, and only your own avatar gets an emote face.
Video coming soon
Add emotes to a pack
An emote is a clip plus one entry in a compat file. You write the clip in an animation file, list the emote in the emotes object of a compat file, and the wheel and the key binds pick it up.
The files
Make a folder my_emotes with this layout. It goes in your resourcepacks folder.
my_emotes/
pack.mcmeta
assets/punchy_moves/animations/my_emotes.json
assets/punchy_moves/compat/my_emotes.json
pack.mcmeta, with the resource format of Minecraft 1.21.11. On another version, put that version’s number from the table on Resource packs in place of the 75s:
{
"pack": {
"description": "Three emotes for Punchy Moves",
"pack_format": 75,
"min_format": 75,
"max_format": 75
}
}
animations/my_emotes.json holds three short clips: an arm wave, a head turn from side to side, and a nod. See Animation files for every key.
{
"format_version": "1.8.0",
"animations": {
"wave": {
"animation_length": 1.2,
"bones": {
"right_arm": {
"rotation": {
"0.0": [0, 0, 0],
"0.3": { "post": [0, 0, 140], "lerp_mode": "catmullrom", "easing": "easeOutBack" },
"0.6": { "post": [0, 0, 110], "lerp_mode": "catmullrom" },
"0.9": { "post": [0, 0, 140], "lerp_mode": "catmullrom" },
"1.2": [0, 0, 0]
}
},
"head": { "rotation": [0, 0, 8] }
}
},
"look_around": {
"animation_length": 2.0,
"bones": {
"head": {
"rotation": {
"0.0": [0, 0, 0],
"0.5": [0, -35, 0],
"1.0": [0, 35, 0],
"1.5": [0, -15, 0],
"2.0": [0, 0, 0]
}
}
}
},
"nod": {
"animation_length": 1.0,
"bones": {
"head": {
"rotation": {
"0.0": [0, 0, 0],
"0.25": [18, 0, 0],
"0.5": [0, 0, 0],
"0.75": [18, 0, 0],
"1.0": [0, 0, 0]
}
}
}
}
}
}
compat/my_emotes.json puts the clips on the wheel:
{
"format_version": 2,
"emotes": {
"menu_key": "C",
"entries": [
{ "id": "wave", "display_name": "Wave", "animation": "wave", "keybind": "H", "face": "happy" },
{ "id": "look_around", "display_name": "Look around", "animation": "look_around", "keybind": "J", "face": "curious" },
{ "id": "nod", "display_name": "Nod", "animation": "nod", "face": "cheery" }
]
}
}
Wave is on H, Look around on J, and Nod has no key, so it is only on the wheel until a player binds one.
The example pack provided by Crafto does the same with its own clips: its compat file lists four emotes, on H, J, K and L, and an entry there looks like this.
{ "id": "hello", "display_name": "Hello", "animation": "hello_nleg", "keybind": "H" }
Try it
- Put the
my_emotesfolder in yourresourcepacksfolder. - In the game, open Options, Resource Packs, move my_emotes to the right-hand list and press Done. Already in a world? Press F3+T to reload.
- Stand still. Press F5 once to turn to third person behind your player, or twice to see your player from the front.
- Press C and pick Wave. Your player waves, with the happy face.
- Press J. Your player looks left and right, with the curious face.
- Open Options, Controls, Key Binds, and find Emote: Nod under Punchy Moves. Give it a key and press it.
In Punchy! Studio
Studio writes the same compat file and tells you as you type whether the game reads it.
-
Press F6 in a world, pick Third Person with the switch between the menus and the workspace tabs, and open your pack with File > Packs (Ctrl+O). It needs a clip named
wave, like the one Your first pack makes. -
Open the Bindings tab (Ctrl+B) and select the pack’s compat file in the outliner.
-
Choose File > Raw JSON and replace the text with the compat file above, or a smaller one with only the
waveentry.
File > Raw JSON opens the compat file as text. Format lays it out and the line under it says the game reads it. -
Wait for the line under the text to say Punchy reads this. and press Apply. Press Format first if you want the text laid out.
-
Press Ctrl+E. In Export Punchy Moves Pack, keep the Pack name, keep Turn the pack on and reload ticked and press Export.
-
Close the editor with F6, turn to the third person with F5, press C and pick Wave.
You can also select the Emotes object in the outliner and edit the same fields in the sheet. See Punchy! Moves in Punchy! Studio for the rest of the workspaces, and Emote recipe for a start-to-finish emote.
Emote fields
The emotes object sits at the root of a compat file in format 2. Files are read in path order and their emote lists add up across files and packs. When two packs have a file at the same path, only the higher pack’s copy is read.
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
menu_key | key name | C | The key that opens the emote wheel. The last file that sets one wins. Also read as keybind or key. The game creates this key once per session, so a different menu_key that appears after a reload does not move it. A key the player set always wins. | "G" |
entries | array | The emotes, in the order the wheel shows them. Also read as emotes. | [ { "animation": "wave" } ] |
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
animationRequired | string | The clip to play, spelled exactly as in the animation file (names are case-sensitive). Also read as clip or name. An entry without it, or with a clip no pack defines, is left out of the wheel and the key binds. | "wave" | |
id | string | the clip name | Tells emotes apart. It is made lower case, and every character other than a to z, 0 to 9, underscore, dot and hyphen becomes an underscore. Two entries with the same id share one key. | "look_ |
display_ | string | the id | The name on the wheel, in the key binds and on the Shortcuts page. Also read as label or title. | "Look around" |
keybind | key name | none | The emote's default key, written as in the table below. A missing key, "unknown" or a name the game does not know leaves the emote without a key. Also read as key. | "H" |
face | look name | happy | The look the face plays while the emote plays. Also read as expression. See Emote faces below. | "curious" |
Key names
Write a key without the key.keyboard. start, in any case: H and h are the same. The full name, such as key.keyboard.h, works too. These are the names the game knows.
| Group | Names |
|---|---|
| Letters and digits | a to z, 0 to 9 |
| Function keys | f1 to f25 |
| Keypad | keypad.0 to keypad.9, keypad.add, keypad., keypad., keypad., keypad., keypad.equal, keypad.enter, num.lock |
| Arrows | up, down, left, right |
| Punctuation | apostrophe, backslash, comma, equal, grave., left., minus, period, right., semicolon, slash |
| Editing and navigation | space, tab, enter, escape, backspace, delete, insert, home, end, page.up, page.down, caps.lock, scroll.lock, pause, print., menu, world.1, world.2 |
| Modifiers | left.shift, right.shift, left., right., left.alt, right.alt, left.win, right.win |
How the game makes the keys
- Moves creates an emote’s key the first time it sees the emote’s id, then keeps it for the whole session. Change
keybindlater, after a reload for example, and a key that already exists does not move. - The key’s name in the key binds is built from the display name, so give every emote its own display name.
- A reload (F3+T or a change of resource packs) reads the compat files again and lists the emotes again.
Emote faces
The face plays the emote’s face look for as long as the emote plays, on your own avatar. Leave face out and the face plays Happy.
The name must be written exactly as it is below: lower case, with underscores and no spaces. Anything else plays Happy, including a capital letter, a space, a typo and the name of a look your own pack draws.
Looks:
neutral, happy, joyful, excited, sparkly, love, proud, smug, relaxed, zen, wink, sly, sneaky, curious, focused, squint, determined, furious, menacing, strain, surprised, shocked, scared, nervous, worried, sad, crying, pain, wince, dizzy, knocked, sick, tired, sleepy, bored, cold, hot, blinded, wary, shut
Other names an emote can use:
cross, calm, flutter, narrow, wink_left, wink_right, startled, glum, uneasy, cheery, intent, aghast, hurting, drowsy, laugh, angry, glance_left, glance_right
- Own looks and moving faces. The
faceof an entry names one of the looks above. For a look your pack draws, or a face that changes during the emote, put the face in the clip instead. A clip can hold one look for its whole length with"face": "sleepy", or key the face channels in Punchy! Studio’s Animation workspace, or key a look into the clip with Key in Clip in the Face workspace. A face keyed in the clip shows over the emote’s look. See Faces in packs and clips. - Stronger reactions. The emote look is one of the face’s reactions. A stronger one, such as the hurt look after a hit, shows over it while it lasts. See Face reactions.
- Turning it off. In Punchy’s new menu, the Face tab of the Punchy Moves group has an Emotes switch (on by default). Turn it off and emotes no longer set a look.
Things that go wrong
Things that drop a whole file
The game drops the whole compat file, and the pack’s emotes with it, when:
format_versionis missing, or is anything other than2or"2". Writing2.0or3drops it too.- The root has a key the format does not take. The root takes
$schema,format_version,defaults,item_groups,items,empty_hand,variables,camerasandemotes, and no others. A misspelledemotedrops the file. - The JSON is broken, such as a missing comma. Moves reads JSON more leniently than most tools (comments load), but keep the file plain JSON.
The game logs the reason, starting with Could not load animation compat, and shows nothing on screen. Studio’s Verdict tells you as you type.
Why my emote is not on the wheel or does not play
| What you see | Why |
|---|---|
| The emote is not on the wheel | Its animation is not spelled exactly like the clip’s name, or no active pack has that clip. Clip names are case-sensitive. The game writes nothing to the log for a skipped emote, so check the spelling against the animation file. |
| The wheel says “No emotes in the active pack” | No active pack has a compat file with emotes, or its file was dropped. Turn the pack on and press F3+T. |
| The wheel opens but nothing plays | You were moving, in the air, or in the middle of another action. Stand still on the ground and try again. |
| The key does nothing | The keybind is a name the game does not know, so the emote has no key. Or the key belongs to something that comes first: V, F7, B, the wheel key, or an emote above it in the list. Punchy! Studio opens with F6 by default. Moves reads emote keys first, so an emote on F6 takes the press and Punchy! Studio does not open. Give the emote another key. |
I changed keybind and the key stayed | The key already exists and keeps its old value. Set it in Controls. |
| A second emote never plays from its key | The two entries have the same id, so they share one key and the first gets the press. Give each its own id. |
| Two Controls rows have the same name | Two emotes have the same display name. Give each its own. |
| The face is always Happy | The face name is not exactly one of the names above. |
| Only I see the emote | That is right. Emotes are never sent to other players. |
| F or G stopped doing its usual job | An emote uses that key. Moves plays the emote and skips the fixed action for that press. |
Related pages
- Camera and features for V, B, F7 and the Features switches.
- Compat files for every other thing a compat file can say.
- Animation files and Make an animation for the clips.
- Emote recipe for an emote made from nothing.
- Faces, Faces in packs and clips and Face reactions for looks.
- Punchy! Moves in Punchy! Studio and Game view for watching a clip on your player while you edit.
- Troubleshooting and the FAQ.
Last checked against the mod on 30 October 2026.