Privacy
Language: Dansk

Riding

Seat your player in a boat, a raft or a minecart, or on a mount: a seated pose, an idle and a moving loop, a riding camera and a lean, with the sit and nautilus clips as the example.

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

On this page

Riding is how your player looks while it sits on something: a boat, a raft, a minecart or a mount. This recipe seats your player in boats, rafts and minecarts with a seated pose, then adds what a ride can have on top: a gentle sway while you sit (in minecarts and on mounts, not in boats or rafts), a clip for when it moves, its own camera, and a lean into turns.

It is for pack makers who have a seated pose, or want to make one. The examples are the two riding rules of the example pack provided by Crafto, Fluid & Foolish, the Punchy! Moves animation pack used for the Punchy! Moves demos on this wiki: its sit pose for boats, rafts and minecarts, and its nautilus rule with a camera and a lean.

Before you start

  • Punchy! Moves installed. Getting started covers the install. Moves ships no clips of its own, so a riding pose lives in a resource pack.
  • A tool for the clips: Blockbench with the Punchy! Moves rig, or Punchy! Studio. If you have never made a clip, How to create custom animations goes through the rig and the keys first.
  • A boat and some water to test with, and a minecart with a few rails. Creative mode is the easiest place.
  • The example pack provided by Crafto, only if you want to see its riding rules in game before you make your own.

What a riding rule is made of

A riding rule has three parts, and only the first two are needed.

PartWhere it livesWhat it decides
The clipsAn animation file in assets/punchy_moves/animations/How the body sits, sways and moves.
The rulesitting_state, passenger_state or mount_state, under defaults.animations in a compat file in assets/punchy_moves/compat/Which vehicles the rule is for, and which clip plays as the pose, the idle and the moving loop.
Camera and leanThe same rule, as camera and dynamicsHow the view is framed while you ride, and how the rider leans.

The three names are the same rule. Use the one that reads best for your vehicle.

A rule has up to three clips. Moves adds them on top of each other and onto the body’s pose:

  • pose is held for as long as you ride. Use it for the seat itself: the legs, the arms and the body.
  • idle plays all the time you ride a minecart or a mount. Moves leaves it out in boats and rafts. It fades out as moving fades in. Without a moving clip it keeps playing at any speed.
  • moving fades in as the vehicle speeds up, so a mount can settle into a different loop when it runs.

A rule needs at least one of the three. Because they are added together, the usual way to build one is a pose that holds the seat and an idle that only sways around it. In a boat or a raft only the pose and the moving clip play, so the seat there is the pose. You can also leave the pose out and let the loops carry the whole pose, as the nautilus clips of the example pack provided by Crafto do.

A clip you use as a pose does not have to loop. A clip that does not loop holds its last pose while you ride. A loop is the safe choice for idle and moving.

The example pack’s seat for boats and minecarts

This is the example pack’s rule for boats, rafts and minecarts, with a shorter list of vehicles than the real one. All three ids use a wildcard, which a later section explains. In a boat or a raft the sit pose shows. In a minecart the slow sway of sit_idle plays as well.

{
  "format_version": 2,
  "defaults": {
    "animations": {
      "sitting_state": {
        "entities": ["minecraft:*_boat", "minecraft:*_raft", "minecraft:*minecart"],
        "pose": "sit",
        "idle": "sit_idle"
      }
    }
  }
}

sit is a pose with nothing animated in it. Every bone has one fixed value, so the clip is the same at every moment. This is a trimmed look at it, four bones out of the seven the real clip sets:

{
  "format_version": "1.8.0",
  "animations": {
    "sit": {
      "loop": true,
      "bones": {
        "root": { "position": [0, -10, 0] },
        "right_leg": { "rotation": [-90, 15, 0], "position": [-0.5, 0, 0] },
        "left_leg": { "rotation": [-90, -15, 0], "position": [0.5, 0, 0] },
        "right_arm": { "rotation": [0, 10, 5], "position": [0, -2, 0.25] }
      }
    }
  }
}

Both legs swing forward by 90 degrees, the thighs level with the seat, and the arms rest at the sides. sit_idle is a loop of 1.33 seconds that only moves a little around that. The root also bobs up and down by a pixel. This is the rotation of its root bone:

{
  "format_version": "1.8.0",
  "animations": {
    "sit_idle": {
      "loop": true,
      "animation_length": 1.3333,
      "bones": {
        "root": {
          "rotation": {
            "0.0": { "post": [0, 0, -3.5], "lerp_mode": "catmullrom" },
            "0.3333": { "post": [0, 0, 0], "lerp_mode": "catmullrom" },
            "0.6667": { "post": [0, 0, 3.5], "lerp_mode": "catmullrom" },
            "1.0": { "post": [0, 0, 0], "lerp_mode": "catmullrom" },
            "1.3333": { "post": [0, 0, -3.5], "lerp_mode": "catmullrom" }
          }
        }
      }
    }
  }
}

The root rocks about 3.5 degrees to each side, and the legs and arms drift a little. The last key repeats the first, so the loop closes without a jump. See Animation files for every key of a clip.

Video coming soon

Make your own seat

You will make a pose called my_seat and a sway called my_seat_sway, then write a rule that plays them in boats, rafts and minecarts. The pose shows in all three. The sway shows in the minecart, because Moves leaves it out in boats and rafts. Pick your tool.

Tool

In Blockbench

Make the clips

  1. Open the Punchy! Moves rig in Blockbench with its plugin loaded. The Blockbench rig has the files.
  2. In the Animations panel, press the + button (Add Animation). Set Name to my_seat, set Loop Mode to Loop and press Confirm. Then set Animation Length to 1 with the slider in the toolbar of the Animations panel (click it without dragging, type the number and press Enter).
  3. Select right_leg in the outliner. With the playhead at 0, add a rotation key with the + beside Rotation in the timeline. Rotate the leg forward with the rotate tool until the thigh is level, as if it rested on a bench.
  4. Select left_leg and do the same.
  5. Move the playhead to 1 s and key both legs again with the same rotation, so the clip holds the pose to its end.
  6. Add a second animation with +: set Name to my_seat_sway, set Loop Mode to Loop and Snapping to 20, so 0.6 s and 1.2 s are steps of the timeline, and press Confirm. Then set Animation Length to 1.2 in the same way.
  7. Select root. At 0, key a rotation that tilts it a few degrees to one side. At 0.6 s key a few degrees to the other side. At 1.2 s key the same rotation as at 0, so the loop closes.
  8. Press the play button under the viewport to check the sway.

Video coming soon

You do not copy numbers from the clips of the example pack provided by Crafto. Blockbench’s Bedrock export turns some axes round and Moves reads that export, so key on the rig and let the export write the file. Tilt the root only a few degrees: it adds to the pose, and a small sway is all a seat needs.

Export them into a pack

  1. Choose Animation > Export Animations.
  2. In Select Animations to Export, tick my_seat and my_seat_sway and press Confirm.
  3. Save the file as seat.animation.json. It goes into the pack folder in the next part.

If you would rather not export from Blockbench, save this as seat.animation.json instead. It is the same two clips written out by hand, and the game reads these numbers as they stand. A file exported from a tool may lay its keys out differently.

The complete clip file
{
  "format_version": "1.8.0",
  "animations": {
    "my_seat": {
      "animation_length": 1,
      "loop": true,
      "bones": {
        "right_leg": { "rotation": { "0.0": [-90, 0, 0], "1.0": [-90, 0, 0] } },
        "left_leg": { "rotation": { "0.0": [-90, 0, 0], "1.0": [-90, 0, 0] } }
      }
    },
    "my_seat_sway": {
      "animation_length": 1.2,
      "loop": true,
      "bones": {
        "root": { "rotation": { "0.0": [0, 0, -3], "0.6": [0, 0, 3], "1.2": [0, 0, -3] } }
      }
    }
  }
}

Write the pack

Make this folder in your resourcepacks folder:

Seat Pack/
  pack.mcmeta
  assets/
    punchy_moves/
      animations/
        seat.animation.json
      compat/
        seat.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": "A seat for Punchy Moves",
    "pack_format": 75,
    "min_format": 75,
    "max_format": 75
  }
}

compat/seat.json is the rule that puts the clips on boats, rafts and minecarts:

{
  "format_version": 2,
  "defaults": {
    "animations": {
      "sitting_state": {
        "entities": ["minecraft:*_boat", "minecraft:*_raft", "minecraft:*minecart"],
        "pose": "my_seat",
        "idle": "my_seat_sway"
      }
    }
  }
}

Video coming soon

  1. In the game, open Options, then Resource Packs, move Seat Pack to the right-hand list and press Done. You can do this with a world open: pressing Done reloads the game’s resources. After you edit the pack’s files later, press F3+T to reload.

In Punchy! Studio

Studio keeps the clips, the compat file and the pack together, and tells you as you type whether the game reads the compat file.

Make the clips

  1. Join a world and press F6. Pick Third Person with the switch between the menus and the workspace tabs.
  2. Choose File > Packs (Ctrl+O). In the Punchy Moves Packs menu, choose New Pack, type Seat Pack as the Pack name and press Create.
  3. Choose File > New Clip (Ctrl+N). Type my_seat as the Name, set the Length to 1, tick Loop and press Create.
  4. In the outliner, select Right Leg. Press E for rotation. With the playhead at 0, type -90 in the rotation’s X field. Typing a value keys it at the playhead.
  5. Select Left Leg and type -90 in the same field.
  6. Go back to 0 with Shift+Left, choose Edit > Copy Pose (Ctrl+C), jump to the end with Shift+Right and choose Edit > Paste Pose (Ctrl+V), so the clip holds the pose for its whole second.
  7. Choose File > New Clip again. Type my_seat_sway as the Name, set the Length to 1.2, tick Loop and press Create.
  8. Select Root and press E. At 0 type -3 in the rotation’s Z field. Move the playhead to 0.6 s and type 3. At 1.2 s type -3 again, so the loop closes.
  9. Press Space to play the sway and again to stop.

Video coming soon

How to create custom animations covers easing and the Game view. The Game view plays a clip on its own, so it shows the pose but not a vehicle: you check the ride in the game, as below.

Write the rule

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

  2. Choose File > Raw JSON and replace the text with this:

    {
      "format_version": 2,
      "defaults": {
        "animations": {
          "sitting_state": {
            "entities": ["minecraft:*_boat", "minecraft:*_raft", "minecraft:*minecart"],
            "pose": "my_seat",
            "idle": "my_seat_sway"
          }
        }
      }
    }

    Video coming soon

  3. Wait for the line under the text to say Punchy reads this. and press Apply.

Export the pack

  1. Press Ctrl+E. In Export Punchy Moves Pack, keep the Pack name, keep Turn the pack on and reload ticked and press Export.
  2. Close the editor with F6.

Ride it

  1. In a creative world, place a boat on water.
  2. Right-click the boat to get in.
  3. Press F5 to look at your player in third person.

Your legs stretch forward. Get out, and the pose fades away. A raft does the same, and so does a boat of any wood. The sway does not play in a boat or a raft.

To see the sway, lay a few rails, place a minecart on them and get in. Your body now rocks slowly from side to side. Moves also puts your hands on the minecart’s rim and tucks your legs under it, so the legs follow the minecart, not your pose.

Video coming soon

Which vehicle gets which rule

The entities list names the vehicles. Each entry is an entity id with its namespace, such as minecraft:pig.

  • One * is a wildcard. minecraft:*_boat matches every wooden boat and chest boat, and minecraft:*minecart matches every kind of minecart. A second * in the same id is matched as a plain character, so use only one.
  • entities can be one text instead of a list.

A file can hold many rules. sitting_state and passenger_state can be a list of rules, where each element is its own rule:

{
  "format_version": 2,
  "defaults": {
    "animations": {
      "sitting_state": [
        {
          "entities": ["minecraft:*_boat", "minecraft:*_raft", "minecraft:*minecart"],
          "pose": "my_seat",
          "idle": "my_seat_sway"
        },
        {
          "entities": ["minecraft:pig"],
          "pose": "my_saddle",
          "idle": "my_saddle_idle",
          "moving": "my_saddle_trot"
        }
      ]
    }
  }
}

The clips my_saddle, my_saddle_idle and my_saddle_trot are placeholders for clips of your own. Make them the way you made my_seat, or put in the names of clips you have.

When two rules match one vehicle, the last one wins. Moves reads the compat files in the order of their paths and checks the rules from the last one back, so put a broad rule first and a narrower one after it.

A vehicle that no rule matches keeps the seat the game draws. Moves seats your body only when a rule matches. The oars in a boat and the item actions in a boat, below, work with or without a rule.

Make the ride move

A mount can look different when it runs. Add a moving clip and Moves fades it in with the vehicle’s speed. The nautilus rule of the example pack provided by Crafto shows the whole set: two clips, a camera and a lean. Its clips idle_nautilus and sprint_nautilus come with that pack, so the rule works as it stands only with the pack on. With your own clips, put your names in.

{
  "format_version": 2,
  "defaults": {
    "animations": {
      "passenger_state": {
        "entities": ["minecraft:nautilus", "minecraft:zombie_nautilus"],
        "idle": "idle_nautilus",
        "moving": "sprint_nautilus",
        "speed_threshold": 0.12,
        "camera": { "horizontal": 0.88, "vertical": -0.65, "depth": 3.91, "fov": 68, "response": 3.5 },
        "dynamics": {
          "rider_vertical_offset": 10,
          "bank_degrees": 28,
          "bank_sensitivity": 1.5,
          "vertical_tilt_degrees": 22,
          "vertical_sensitivity": 4,
          "response": 6
        }
      }
    }
  }
}

The rule has no pose. Its two loops carry the whole pose: the root is turned between 90 and 105 degrees on X, so the body lies forward, and the legs swing. idle_nautilus is 1.77 seconds and sprint_nautilus is 1.29 seconds, so the sprint loop is quicker.

speed_threshold is the speed at which the moving clip takes over, in blocks per tick (a tick is a twentieth of a second). Moves measures the speed of the vehicle, not of the player. The moving clip starts to fade in at 65 percent of the threshold and is fully in at the threshold, so a little below it you already see a blend. The default is 0.12. Raise it if the moving loop starts too early, and lower it if it never shows. The least it takes is 0.001.

Video coming soon

Frame the ride with a camera

A rule can carry its own camera. While the rule matches, the shoulder camera moves to the rule’s framing, and when you get off it blends back to the framing of your sliders.

  • The camera needs horizontal, vertical, depth and fov. A rule with only some of them has no riding camera at all.
  • response is how quickly the view blends in and out. It is optional and is 4 when left out. Higher is quicker. It cannot go below 0.1.
  • The numbers mean the same as the sliders on the Camera page: horizontal is the sideways offset, with positive to the character’s right, vertical is the height from eye level, depth is the distance behind the character in blocks and fov is the angle in degrees. The nautilus camera of the example pack provided by Crafto sits a little to the right and below eye level, 3.91 blocks back.
  • The riding camera belongs to the shoulder camera, so you see it while Custom Camera is on. There is no switch of its own on the Features page.
  • When more than one pack camera applies, they blend in a fixed order. Camera and features has it, with the other cameras.

Framing is easiest to judge on the real view: change a number, press F3+T to reload and look again.

Lean into turns

dynamics makes the rider lean with the vehicle. It is made of numbers. The height and the two angle limits start at 0, so a rule without dynamics keeps the rider upright and level.

  • Banking. When the vehicle turns, the rider banks sideways, up to bank_degrees. bank_sensitivity is how much a turn counts: higher reaches the limit with a gentler turn. Banking only shows while the vehicle moves, and it fades in over nearly the same speeds as the moving clip.
  • Tilting. When the vehicle goes up or down, the rider tilts, up to vertical_tilt_degrees. vertical_sensitivity is how much the climb or the fall counts.
  • Following. response is how quickly the lean catches up. Higher follows quicker.
  • Height. rider_vertical_offset moves the whole rider by that many pixels, the unit of a bone’s position. A positive value lowers the rider and a negative value lifts it. The example pack provided by Crafto lowers its nautilus rider by 10.

The whole rider leans, and on a nautilus the mount leans with you. Until bank_degrees is above 0 the rider does not bank, and until vertical_tilt_degrees is above 0 it does not tilt. The two sensitivities and response only shape those leans.

What a boat or a minecart adds

Moves also places your hands and legs on what the game draws, over your clips:

  • Boat or raft. Whoever steers one of the game’s boats or rafts holds its oars, with or without a riding rule. The hands follow the oars and the body leans into each stroke, so the arms of your pose do not show while you hold them. An arm that swings or uses an item lets go of its oar for that action.
  • Minecart. When a rule matches the minecart, your hands hold the rim and your legs tuck up under it, so the arms and legs of your pose do not show there.

In a boat, a passenger who does not steer keeps the arms of the pose.

The root of a pose in boats and minecarts

In a boat, a raft or a minecart, Moves takes the height of your pose clip’s root bone at time 0 back out, and keeps everything else. The sit clip of the example pack provided by Crafto lowers the root by 10 pixels, and in a boat or a minecart that drop is cancelled, and the rest of the pose still applies.

This is only for the root bone of the pose clip, and only for boats, rafts and minecarts. A clip for another mount, and any idle or moving clip, moves as keyed. To raise or lower the rider on any vehicle, use rider_vertical_offset.

Using items in a boat

While you sit in a boat or a raft, with or without a riding rule, you can still swing, mine and use the item in your hand. The clips your pack gives the held item for those actions play on the body, head and arms, and the legs stay in the seat. This is for boats and rafts only. Compat files has the item actions, and retrigger_progress on an attack also counts while you ride.

The keys of a riding rule

Keys of a riding rule
KeyTypeDefaultWhat it doesExample
entitiesRequiredtext or listThe entity ids the rule is for, with their namespace, such as minecraft:oak_boat. Ids are lower cased and one * wildcard is allowed. A rule with no entities is skipped without a warning.["minecraft:*_boat"]
poseclipThe seated pose, held for as long as you ride. It is added to the neutral pose."my_seat"
idleclipThe loop while you ride a minecart or a mount. Moves does not play it in boats and rafts. It fades out as moving fades in, and without a moving clip it plays at any speed."my_seat_sway"
movingclipThe loop that fades in as the vehicle speeds up."my_ride_fast"
speed_thresholdnumber0.12The speed of the vehicle, in blocks per tick, at which moving is fully in. It starts to fade in at 65 percent of it. At least 0.001.0.2
cameracamera blockThe camera while you ride. It needs horizontal, vertical, depth and fov. response is optional and is 4 when left out.{ "horizontal": 0.88, "vertical": -0.65, "depth": 3.91, "fov": 68 }
dynamicsobjectHow the rider leans and where it sits. Its keys are in the next table.

A rule needs entities and at least one of pose, idle and moving. Otherwise it is skipped.

Keys of dynamics
KeyTypeDefaultWhat it does
rider_vertical_offsetnumber0Moves the whole rider, in pixels, like a bone's position. Positive values lower the rider, negative values lift it.
bank_degreesnumber0The largest bank angle when the vehicle turns, in degrees. Not below 0. At 0 the rider does not bank.
bank_sensitivitynumber1How strongly turning banks the rider. Not below 0.
vertical_tilt_degreesnumber0The largest tilt when the vehicle goes up or down, in degrees. Not below 0. At 0 the rider does not tilt.
vertical_sensitivitynumber4How strongly vertical speed tilts the rider. Not below 0.
responsenumber5How quickly the lean follows. At least 0.1.

Compat files lists the same keys in the full reference.

Things that go wrong

Things that drop a whole file

The game drops the whole compat file, and every rule in it, when:

  • format_version is anything other than 2 or "2", or it is missing from a file that has defaults, item_groups, items, empty_hand, cameras or emotes.
  • 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.
  • mount_state is a list. Only sitting_state and passenger_state can be a list of rules, and biome is the only other action that can. A list on any other action drops the file.
  • The JSON is broken, such as a missing comma. Moves reads JSON more leniently than most tools (comments may load), but keep the file plain JSON.

The game writes a line starting with Could not load animation compat to its log and shows nothing on screen. In Studio, the line under the Raw JSON text tells you as you type.

Why my rule does not play

What you seeWhy
Nothing changes in the boatThe rule has no entities, or none of pose, idle and moving. Moves skips it and writes nothing to the log.
Writing "sitting_state": "my_seat" does nothingA clip name alone has no entities. Use an object with entities and pose.
The rule works for one boat and not anotherThe id does not match. Check the namespace and the wildcard (the game lower cases ids itself): minecraft:*_boat matches minecraft:oak_boat, and minecraft:oak_boat matches only that exact id.
Part of the ride plays and part does notA clip name that no animation file defines plays nothing, and nothing says so. Names are case-sensitive.
The pose shows in a boat but the sway does notMoves leaves idle out in boats and rafts. Put the seat in pose, and test the sway in a minecart or on a mount.
The rider sits too deep or too highIn boats and minecarts the height of your pose’s root at time 0 is cancelled. Use rider_vertical_offset to move the rider.
The rider sways twice as much as the clippose and idle are added together. Put the seat in pose and only movement in idle.
The moving loop never showsThe vehicle does not reach the threshold. Lower speed_threshold.
The moving loop shows too earlyRaise speed_threshold.
The rider stays upright in turnsdynamics is missing, or bank_degrees and vertical_tilt_degrees are 0.
The camera does not moveThe camera block is missing one of horizontal, vertical, depth and fov, or the custom camera is off.
I am on a horse or a pig and nothing changesNo rule matches that id. A vehicle with no rule keeps the game’s seat.
A rule inside an item group does nothingRiding rules are read from defaults.animations only.

Last checked against the mod on 30 October 2026.