Privacy
Language: Dansk

Player rig

Download the first person player rig Punchy! animates, learn its bone names and pivots, and open it in Blockbench, Blender or Punchy! Studio to make clips.

This page has not been translated into Danish yet, so it is shown in English. Read in English

On this page

Every first person clip Punchy! plays moves the bones of one small rig: a camera, a body, two arms and two grips that hold the item. This page gives you that rig as a file, names every bone and says what each one does, so you can key a clip in the tool you like. It is for anyone who animates by hand in Blockbench or Blender. Punchy! Studio already has the rig built in, and the Punchy Blender add-on comes with its own copy in a Blender file.

Before you start

  • Punchy! 3.0 or newer for Minecraft 26.3, from Modrinth or CurseForge. The file below is the rig of Punchy! 3.0 for that version. It is also the rig of Punchy! for Minecraft 1.21.11 and 26.1 to 26.4. The jars for 1.21.5 and older carry a different rig file, so take it from your own jar there.
  • Blockbench, Blender with the Punchy Blender add-on, or Punchy! Studio, whichever you will animate in. Studio comes from Modrinth or CurseForge. The Blender tab below shows where to get the add-on, which makes first person clips and nothing else.
  • A clip file is only half of a working animation. A rule in a compat file plays it. Create an animation walks through both.

Download the rig

The rig is a Bedrock geometry file. It is Punchy Guys Studios’ own file, the same one the mod loads as punchy:geo/player.geo.json.

Punchy! player rig (player.geo.json)

player.geo.json, 4 KB

Download

You can also take it from your own copy of the mod. Open the Punchy! jar from your mods folder (its name starts with punchy-3.0) with a zip tool and copy assets/punchy/geo/player.geo.json out. Leave the jar as it is.

The file holds one model, geometry.player, on a 64 by 64 texture grid. All sizes and pivots are in pixels, where 16 pixels are one block. The model has no texture of its own, so it shows in plain colors in your tool. That does not matter for animating.

Open it in your tool

Tool

In Blockbench

  1. Download the file above, or copy it out of your jar.
  2. In Blockbench, choose File > Open Model and pick player.geo.json. It opens as a Bedrock model.
  3. Switch to the Animate tab.
  4. In the Outliner, open camera_animation, then camera, then body. The arms and the other bones are inside body.

Video coming soon

The rig in Blockbench.

Blockbench shows some numbers with the opposite sign from the file. It does this for every Bedrock model, not only this rig:

  • The x of a pivot is flipped. right_arm has its pivot at -11 in the file and shows 11 in Blockbench.
  • The x and y of a bone’s rotation are flipped, and z is kept. The rest rotation of right_arm is [-100.03983, -6.46188, -8.56324] in the file. Blockbench rounds what it shows to four decimals, so you see 100.0398, 6.4619 and -8.5632.

The values you key in the Animate tab are added to the bone’s rest pose, which is also how a clip with use_keyframes_v2 is read in game. When Blockbench exports an animation it flips the x and y of rotation keys and the x of position keys back, so the exported clip uses the same signs as the file. Work in Blockbench, export again after a change and do not copy numbers by hand. The key steps are in Create an animation.

In Punchy! Studio

Punchy! Studio loads the rig by itself. You do not need the download.

  1. Join a world, switch to first person and press F6. If the editor opens in the Third Person perspective, pick First Person with the switch between the menus and the workspace tabs. The keys below are those of the Punchy Studio keymap, the default: if a window asks which keys you know, press Keep Punchy Studio Keys (Pick a keymap explains the other three).
  2. Choose File > New Animation… or press Ctrl+N, name the clip and press Create.
  3. Look at the Outliner on the right. It lists the rig as Player Rig, with Camera, Right Arm and Left Arm, and a Right Grip and a Left Grip under the arms.
  4. Select a bone in the Outliner or click it in the rig viewport on the left, then use the move, rotate and scale tools (W, E and R).
Studio's Outliner lists the bones of the rig. The right arm is selected and keyed.

The rig viewport draws the rig with your skin and the item in your hand. Studio edits five bones: the camera, both arms and both grips. It reads the bone tree and the pivots from the same punchy:geo/player.geo.json that the game loads.

In Blender

The Punchy Blender add-on, made by one of the Punchy Guys Studios creators, turns an action in Blender into a Punchy! first person clip file. It makes first person clips only. Its rig is not the player.geo.json of this page: it is in PunchyBlender.blend, a Blender file in the add-on’s repository that also holds the add-on’s script. You do not need the download above.

Open the rig

  1. Open the Punchy Blender page on GitHub and choose Code > Download ZIP.
  2. Unzip it into a folder you can write to. Keep PunchyBlender.blend, Scripts and images together.
  3. In Blender, choose File > Open and pick PunchyBlender.blend.
  4. Blender says that automatic execution of Python scripts in this file was disabled. Press Allow Execution.
  5. In the Outliner, click Arm_PlayerModel. This is the rig.
  6. Move the pointer over the 3D viewport and press N, then open the Punchy Exporer tab. The add-on spells it that way. Its Animation System panel has Import JSON and Export JSON.
  7. Switch the 3D viewport from Object Mode to Pose Mode and click a bone. Its name shows in the Properties editor.

Blender 5.2.0 also shows a note that the file was written by a newer Blender binary. That is normal. The Blender names on this page are from 5.2.

Opening PunchyBlender.blend, allowing its script, selecting Arm_PlayerModel and opening the Punchy Exporer tab, where the Animation System panel shows Import JSON and Export JSON.

Create an animation takes it from here: it keys a swing, adds the markers and exports the clip.

The bones in the Blender rig

Arm_PlayerModel uses the same bone names as the game rig, and Punchy! finds a bone by its name. It has eight of the nine bones Punchy! poses, plus one helper, and its tree is not the same as the game rig’s:

body
  camera
  right_arm
    item_right
      itemgrip_right
  left_arm
    item_left
      itemgrip_left
IK_ItemR
  • It has no camera_animation bone, and no bones for the marker boxes, torso, head or legs of the game’s geometry. The eight bones of the tree are the ones whose keys do something in game.
  • In Blender the camera bone hangs from body, beside the arms. In the game rig the body hangs from the camera. A key on camera does not move the arms in Blender’s viewport, but in game it moves both arms and your view, as The camera bone says.
  • IK_ItemR is a helper bone with no parent. Punchy! does not pose it, so a key on it moves nothing in game.
  • Only bones that move are written to the clip file, so a clip that keys right_arm alone has just that bone. The other bones are left out.

Rules for a Blender clip

  • Leave use_keyframes_v2 out. The add-on writes the older key layout, and Punchy! draws it as Blender shows it. With the token added, a turn about the arm’s Y or Z axis plays 9 to 11 degrees off. The advice on this page to put use_keyframes_v2 in every clip is for Blockbench and Studio clips.
  • Keep dual_handed out of a swing that keys one arm. It makes the clip control both arms, so the arm you did not key would sit at rest on screen.
  • A clip name with mace, trident or crossbow in it needs a marker. Punchy! reads the rotation keys of such a clip in a different order from the one Blender uses. Add a marker named T:"rotation_zyx;" to the clip to read its keys in the usual order.
  • Keep scale the same on every axis for camera, body, right_arm and left_arm. The add-on writes the scale of these bones with Y and Z swapped, and Punchy! swaps Y and Z again only on bones with item in their name. A scale that differs between axes on these four plays with Y and Z exchanged.

The bones

The rig is one tree. The camera bones sit at the top (camera_animation, then camera), the body hangs from camera, and the arms hang from the body. Moving a bone moves everything below it. Keep the bone names exactly as they are: Punchy! finds a bone by its name, so a renamed bone does nothing.

camera_animation
  camera
    body
      right_arm
        item_right
          itemgrip_right
            base_right
            top_right
      left_arm
        item_left
          itemgrip_left
            base_left
            top_left
      torso
      head
      right_leg
      left_leg

This table lists every bone with the numbers that are in the file. Pivots are [x, y, z] in pixels. A bone with no rest rotation sits straight.

BoneParentPivotRest rotationWhat it is for
camera_animationnone[0, 28, 0]noneThe top of the tree. A key on it moves neither the arms nor your view.
cameracamera_animation[0, 28, 0]noneThe view. Clips key this bone.
bodycamera[0, 12, 0]noneThe parent of both arms.
right_armbody[-11, 16.6, -7][-100.03983, -6.46188, -8.56324]Your right arm. A box of 4 by 12 by 4 pixels.
item_rightright_arm[-12, 8.5, -6]noneThe parent of the right grip. It has no box.
itemgrip_rightitem_right[-12, 8.5, -6]noneThe point of the right hand where the item is held. Two thin bars of 10 by 1 by 1 pixels, crossed, mark it.
base_rightitemgrip_right[-10.5, 8.1, -9.5]noneA one pixel marker box on the grip.
top_rightitemgrip_right[-10.5, 8.1, -15.5]noneA one pixel marker box on the grip, 6 pixels further along it.
left_armbody[11, 16.6, -7][-100.0398, 6.4619, 8.5632]Your left arm. The mirror of the right one.
item_leftleft_arm[12, 8.5, -6]noneThe parent of the left grip. It has no box.
itemgrip_leftitem_left[12, 8.5, -6]noneThe point of the left hand where the item is held.
base_leftitemgrip_left[10.5, 8.1, -9.5]noneA one pixel marker box on the grip.
top_leftitemgrip_left[10.5, 8.1, -15.5]noneA one pixel marker box on the grip.
torsobody[0, 24, 0]noneHolds the torso boxes. Punchy! does not pose it.
headbody[0, 24, 0]noneHolds the head boxes. Punchy! does not pose it.
right_legbody[-2, 12, 0]noneHolds the leg boxes. Punchy! does not pose it.
left_legbody[2, 12, 0]noneHolds the leg boxes. Punchy! does not pose it.

The arms rest tilted forward by about 100 degrees. That is the pose the file is saved in, and it is what a rotation of [0, 0, 0] means in a clip with use_keyframes_v2 made for this rig.

The bones a clip can move

Punchy! poses nine of these bones, each by its exact name:

  • camera_animation, camera and body, which belong to neither hand.
  • right_arm, item_right and itemgrip_right, which belong to the right hand.
  • left_arm, item_left and itemgrip_left, which belong to the left hand.

A track under any other name, such as torso, head or base_right, moves nothing in game. Those bones are in the file, but Punchy! does not pose them.

In practice you key the camera, the two arms and the two grips. Studio edits those five, and the clips that come with Punchy! key the same ones. Names are exact: lower case, with underscores.

Left, right and one handed clips

Punchy! decides which hand a bone belongs to from its name. A name that starts with left_ or right_, or ends with _left or _right, belongs to that hand. camera_animation, camera and body belong to neither.

This matters when a clip plays from one hand. A clip started by the right hand moves only the right hand’s bones, plus the camera and the body. The left arm stays where it was. To make a clip move both arms, put the dual_handed token in its timeline.

The off hand has a few tokens of its own. With an empty off hand, dual_handed always holds. When the off hand holds an item, start_here_if_off_hand_item (also written start_if_offhand_item) and stop_if_offhand_item open and close a window in the clip, and dual_handed_if_has_off_item makes the clip dual handed when the off hand holds an item. hide_offhand_if_empty and show_offhand_if_empty hide and show the off hand arm while the real off hand is empty. Each one is explained under Hands and the off hand in the animation reference.

How a clip reads the rig

A clip is an animation file with a bones object. Each key under bones is a bone name from the table, and each bone holds up to three channels. Here is a complete clip you can copy. It moves the right arm and rolls the grip in the right hand, then returns both to the rest pose.

{
  "format_version": "1.8.0",
  "animations": {
    "rig_check": {
      "animation_length": 0.8,
      "bones": {
        "right_arm": {
          "rotation": {
            "0.0": [0, 0, 0],
            "0.3": [-30, 0, 8],
            "0.8": [0, 0, 0]
          }
        },
        "itemgrip_right": {
          "rotation": {
            "0.0": [0, 0, 0],
            "0.3": [0, 0, 40],
            "0.8": [0, 0, 0]
          }
        }
      },
      "timeline": {
        "0.0": "anim_speed_1;use_keyframes_v2;"
      }
    }
  }
}

The timeline line holds two tokens. use_keyframes_v2 makes Punchy! add the rotations to the rest pose, and anim_speed_1 plays the clip second for second, as you keyed it. The clip has no dual_handed, so it moves only the hand that starts the action, and it keys only right hand bones: test it with the right hand.

This clip is for Blockbench and Studio, where use_keyframes_v2 is the right layout. A clip exported from Blender leaves the token out, as the Blender tab above explains.

Save it as rig_check.animation.json in assets/minecraft/punchy/animations/ of a resource pack. To see it play, make a pack with these files:

Rig check pack/
  pack.mcmeta
  assets/minecraft/punchy/animations/rig_check.animation.json
  assets/minecraft/punchy/compat/rig_check.json

Copy the pack.mcmeta from The pack file and the rule from The rule on the Create an animation page. In the rule, change "var_1": "my_sword_swing" to "var_1": "rig_check". Switch the pack on as in Try it in game, then left-click with an iron sword in your right hand. The first swing plays rig_check.

What a clip does with the rig
KeyTypeDefaultWhat it doesExample
bonesobjectOne entry per bone, named as in the table above. An entry that is not an object drops the whole clip.
rotationarray or objectno rotationDegrees on X, Y and Z. An object keyed by time in seconds gives a key at each time. An array is one constant key at time 0. In a clip with use_keyframes_v2 the values are added to the bone's rest rotation, so [0, 0, 0] is the pose the file is saved in. The rotation order tokens (rotation_xyz, rot_xyz, rotation_zyx and rot_zyx) change only how a clip without use_keyframes_v2 is read.{ "0.0": [0, 0, 0], "0.3": [-30, 0, 8] }
positionarray or objectno positionA move of the bone, in pixels of the rig. Keyed by time like rotation. In a clip with use_keyframes_v2 the three values are added to the bone's own position and are read the same way on every bone, grip bones included. Only the older layout gives itemgrip bones their own axes. Check the direction in Punchy! Studio's rig viewport or with Play in Game before you rely on it.
scalearray or object1 on every axisA size change that multiplies the bone's own size. On a bone whose name contains item (item_right, item_left, itemgrip_right and itemgrip_left), Punchy! swaps the Y and Z values of a key, in either layout, so [1, 2, 3] acts as [1, 3, 2].[1, 1, 1.5]
use_keyframes_v2timeline tokenMakes Punchy! add your rotations to the rig's rest pose. This is how Blockbench and Studio show them. Put it in the first timeline entry of every clip you make in Blockbench or Studio. A clip exported from Blender leaves it out, as the Blender tab explains. V2 and legacy clips explains the two layouts.
dual_handedtimeline tokenMakes the clip control both arms. Leave it out for a clip that moves only the arm that triggers it.
anim_speed_<n>timeline tokenFixes the playback speed of the clip from its time onward, between 0.5 and 5.5. While it is set, the player's Animation Speed setting is ignored for the clip. Without it most clips play faster than you keyed them, so write anim_speed_1 to play a clip second for second.anim_speed_1
disable_pendulumtimeline tokenTurns off pendulum physics on the arm and the held item while the token is active. disable_pendulum_physics is another spelling. See item physics.

A key can also be written as an object instead of an array, for example { "post": [-40, 0, 0], "lerp_mode": "catmullrom" }. post (or vector) holds the value, lerp_mode or easing picks how the channel blends to the next key, and in a clip with use_keyframes_v2 a rotation key can carry a separate pre value. A plain array key has no mode of its own, so it counts as linear, but a segment still uses catmullrom when the key at its other end asks for it. In a clip with use_keyframes_v2 the same holds for the rotation modes spherical_linear and spherical_squad. Ways to write a key and Interpolation modes list every form and mode. How the player’s own arm tuning behaves during a clip is described under Arm tuning and physics.

The camera bone

Keys on camera move both arms, because the body hangs from the camera, and they also move your view, which gives a camera shake. This works in both layouts, and rotation and position keys both count. Your view follows only while Enable Camera Animations is on, on the General tab of the Punchy menu. On Minecraft 1.21.11 even a shake of half a degree shows. On the other versions a turn reaches your view only when it is bigger than about 1.6 degrees or the bone also moves, so key a gentle shake a little stronger there.

Keys on camera_animation do not do this. The arms and the view follow camera and body only, so key camera for a camera move.

Things that go wrong

  • Nothing moves. The bone name is wrong or belongs to a bone Punchy! does not pose. Compare it with the nine names above, letter by letter.
  • The whole clip is dropped. A bones entry that is not an object, a rotation key whose time is not a number, a vector that does not have three values or a Molang value that does not compile drops the clip. The rest of the pack still loads.
  • The arm jumps or points the wrong way. A clip made in Blockbench or Studio has no use_keyframes_v2, so Punchy! reads the keys in the older layout and does not add them to the rest pose. Add the token to the timeline.
  • A clip exported from Blender turns the wrong way. Its timeline has use_keyframes_v2. The add-on writes the older layout, so take the token out and export again.
  • Only one arm moves. That is how a one handed clip works. Add dual_handed when both arms should follow the clip.
  • The clip plays too fast. Without an anim_speed_<n> token, most clips follow the player’s Animation Speed setting. Add anim_speed_1 to the first timeline entry.
  • The item still swings while the clip plays. Pendulum physics move the arm and the held item. Add disable_pendulum to the timeline to turn them off while the token is active.
  • The numbers in Blockbench do not match the file. Blockbench flips the sign of x for pivots and of x and y for rotations, as described in the Blockbench tab. Read the exported clip, not the numbers Blockbench shows for the bone, to see what Punchy! gets.
  • I moved a pivot in my tool and nothing changed in game. A clip file holds no pivots. Punchy! reads the rig from punchy:geo/player.geo.json through the game’s resource manager, so only a resource pack that ships assets/punchy/geo/player.geo.json changes the rig in game. Keep the pivots and names of the rig you animate on, or a clip would not look the same in game as it does in your tool.
  • My clip is fine in my tool but does not play. A clip needs a rule. See compat rules and types and triggers.

Last checked against the mod on 29 October 2026.