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.
-
Blockbench
-
Punchy! Studio
This page has not been translated into Vietnamese 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.
| Part | Where it lives | What it decides |
|---|---|---|
| The clips | An animation file in assets/ | How the body sits, sways and moves. |
| The rule | sitting_, passenger_ or mount_, under defaults. in a compat file in assets/ | Which vehicles the rule is for, and which clip plays as the pose, the idle and the moving loop. |
| Camera and lean | The same rule, as camera and dynamics | How 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:
poseis held for as long as you ride. Use it for the seat itself: the legs, the arms and the body.idleplays all the time you ride a minecart or a mount. Moves leaves it out in boats and rafts. It fades out asmovingfades in. Without amovingclip it keeps playing at any speed.movingfades 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.
In Blockbench
Make the clips
- Open the Punchy! Moves rig in Blockbench with its plugin loaded. The Blockbench rig has the files.
- 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). - Select
right_legin 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. - Select
left_legand do the same. - Move the playhead to 1 s and key both legs again with the same rotation, so the clip holds the pose to its end.
- 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. - 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. - 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
- Choose Animation > Export Animations.
- In Select Animations to Export, tick
my_seatandmy_seat_swayand press Confirm. - 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.jsonpack.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
- 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
- Join a world and press F6. Pick Third Person with the switch between the menus and the workspace tabs.
- Choose File > Packs (Ctrl+O). In the Punchy Moves Packs menu, choose New Pack, type
Seat Packas the Pack name and press Create. - Choose File > New Clip (Ctrl+N). Type
my_seatas the Name, set the Length to 1, tick Loop and press Create. - 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.
- Select Left Leg and type -90 in the same field.
- 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.
- Choose File > New Clip again. Type
my_seat_swayas the Name, set the Length to 1.2, tick Loop and press Create. - 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.
- 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
-
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 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
-
Wait for the line under the text to say Punchy reads this. and press Apply.
Export the pack
- 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.
Ride it
- In a creative world, place a boat on water.
- Right-click the boat to get in.
- 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:*_boatmatches every wooden boat and chest boat, andminecraft:*minecartmatches every kind of minecart. A second*in the same id is matched as a plain character, so use only one. entitiescan 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,depthandfov. A rule with only some of them has no riding camera at all. responseis 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:
horizontalis the sideways offset, with positive to the character’s right,verticalis the height from eye level,depthis the distance behind the character in blocks andfovis 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_sensitivityis 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_sensitivityis how much the climb or the fall counts. - Following.
responseis how quickly the lean catches up. Higher follows quicker. - Height.
rider_vertical_offsetmoves 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
posedo 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
posedo 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
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
entitiesRequired | text or list | The entity ids the rule is for, with their namespace, such as minecraft:. Ids are lower cased and one * wildcard is allowed. A rule with no entities is skipped without a warning. | ["minecraft: | |
pose | clip | The seated pose, held for as long as you ride. It is added to the neutral pose. | "my_seat" | |
idle | clip | The 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_ | |
moving | clip | The loop that fades in as the vehicle speeds up. | "my_ | |
speed_ | number | 0.12 | The 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 |
camera | camera block | The 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 } | |
dynamics | object | How 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.
| Key | Type | Default | What it does |
|---|---|---|---|
rider_ | number | 0 | Moves the whole rider, in pixels, like a bone's position. Positive values lower the rider, negative values lift it. |
bank_ | number | 0 | The largest bank angle when the vehicle turns, in degrees. Not below 0. At 0 the rider does not bank. |
bank_ | number | 1 | How strongly turning banks the rider. Not below 0. |
vertical_ | number | 0 | The largest tilt when the vehicle goes up or down, in degrees. Not below 0. At 0 the rider does not tilt. |
vertical_ | number | 4 | How strongly vertical speed tilts the rider. Not below 0. |
response | number | 5 | How 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_versionis anything other than2or"2", or it is missing from a file that hasdefaults,item_groups,items,empty_hand,camerasoremotes.- 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. mount_stateis a list. Onlysitting_stateandpassenger_statecan be a list of rules, andbiomeis 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 see | Why |
|---|---|
| Nothing changes in the boat | The rule has no entities, or none of pose, idle and moving. Moves skips it and writes nothing to the log. |
Writing "sitting_ does nothing | A clip name alone has no entities. Use an object with entities and pose. |
| The rule works for one boat and not another | The id does not match. Check the namespace and the wildcard (the game lower cases ids itself): minecraft: matches minecraft:, and minecraft: matches only that exact id. |
| Part of the ride plays and part does not | A 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 not | Moves 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 high | In boats and minecarts the height of your pose’s root at time 0 is cancelled. Use rider_ to move the rider. |
| The rider sways twice as much as the clip | pose and idle are added together. Put the seat in pose and only movement in idle. |
| The moving loop never shows | The vehicle does not reach the threshold. Lower speed_. |
| The moving loop shows too early | Raise speed_. |
| The rider stays upright in turns | dynamics is missing, or bank_ and vertical_ are 0. |
| The camera does not move | The 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 changes | No rule matches that id. A vehicle with no rule keeps the game’s seat. |
| A rule inside an item group does nothing | Riding rules are read from defaults. only. |
Related pages
- Compat files for every other action a compat file can hold, riding included.
- Camera and features for the shoulder camera and how the pack cameras blend.
- Animation files and How to create custom animations for the clips.
- Face reactions for the looks your face wears while you ride.
- Walk cycle, Emote, Item sequence and Swimming for the other recipes.
- Troubleshooting and the FAQ.
Last checked against the mod on 30 October 2026.