Privacy
Language: Español (España)

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.

This page has not been translated into European Spanish 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 ControlsDefaultWhat it does
Toggle Custom CameraVTurns 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 CameraBTurns 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 SettingsF7Opens Moves’ settings panel, titled Punchy Moves, on its Camera page, with the Features and Shortcuts pages beside it.
Open Emote WheelCOpens the emote wheel. A pack can set another default with menu_key.
Emote: (the emote’s name)The key the pack gives it, or nonePlays 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.

KeyWhat it does
FMinecraft’s swap-hands key. Moves listens for F itself, so the body plays the pack’s item switch the moment you press it.
GMakes 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

  1. Press Esc, then open Options, Controls and Key Binds.
  2. 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.
  3. 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

  1. Stand still on the ground, in third person so you can see your player (F5 turns to it).
  2. Press C, the key labelled Open Emote Wheel.
  3. 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.

C opens the wheel. The emotes of the example pack provided by Crafto fill the first page, and the > button turns to the page with Wave.

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

  1. Put the my_emotes folder in your resourcepacks folder.
  2. 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.
  3. Stand still. Press F5 once to turn to third person behind your player, or twice to see your player from the front.
  4. Press C and pick Wave. Your player waves, with the happy face.
  5. Press J. Your player looks left and right, with the curious face.
  6. 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.

  1. 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.

  2. Open the Bindings tab (Ctrl+B) and select the pack’s compat file in the outliner.

  3. Choose File > Raw JSON and replace the text with the compat file above, or a smaller one with only the wave entry.

    File > Raw JSON opens the compat file as text. Format lays it out and the line under it says the game reads it.
  4. 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.

  5. Press Ctrl+E. In Export Punchy Moves Pack, keep the Pack name, keep Turn the pack on and reload ticked and press Export.

  6. 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.

The emotes object
KeyTypeDefaultWhat it doesExample
menu_keykey nameCThe 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"
entriesarrayThe emotes, in the order the wheel shows them. Also read as emotes.[ { "animation": "wave" } ]
One emote entry
KeyTypeDefaultWhat it doesExample
animationRequiredstringThe 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"
idstringthe clip nameTells 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_around"
display_namestringthe idThe name on the wheel, in the key binds and on the Shortcuts page. Also read as label or title."Look around"
keybindkey namenoneThe 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"
facelook namehappyThe 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.

GroupNames
Letters and digitsa to z, 0 to 9
Function keysf1 to f25
Keypadkeypad.0 to keypad.9, keypad.add, keypad.subtract, keypad.multiply, keypad.divide, keypad.decimal, keypad.equal, keypad.enter, num.lock
Arrowsup, down, left, right
Punctuationapostrophe, backslash, comma, equal, grave.accent, left.bracket, minus, period, right.bracket, semicolon, slash
Editing and navigationspace, tab, enter, escape, backspace, delete, insert, home, end, page.up, page.down, caps.lock, scroll.lock, pause, print.screen, menu, world.1, world.2
Modifiersleft.shift, right.shift, left.control, right.control, 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 keybind later, 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 face of 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_version is missing, or is anything other than 2 or "2". Writing 2.0 or 3 drops 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, cameras and emotes, and no others. A misspelled emote drops 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 seeWhy
The emote is not on the wheelIts 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 playsYou were moving, in the air, or in the middle of another action. Stand still on the ground and try again.
The key does nothingThe 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 stayedThe key already exists and keeps its old value. Set it in Controls.
A second emote never plays from its keyThe 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 nameTwo emotes have the same display name. Give each its own.
The face is always HappyThe face name is not exactly one of the names above.
Only I see the emoteThat is right. Emotes are never sent to other players.
F or G stopped doing its usual jobAn emote uses that key. Moves plays the emote and skips the fixed action for that press.

Last checked against the mod on 30 October 2026.