Skip to content

    Press / to search from anywhere.

    ModsBody Language

    Emote file reference

    Everything a Body Language emote file can contain, body parts, angles, easing, sounds and particles.

    An emote is a JSON file at assets/<namespace>/emotes/<name>.json in a resource pack. Its id is <namespace>:<name>, and its name in the list comes from the language key emote.<namespace>.<name>. If the file is in a subfolder, the slash becomes a dot in the key. For a walkthrough, see Making your own emotes.

    The file

    Field Needed? What it is
    length Yes How long the emote is, in ticks (20 a second). 1 to 1200 (one minute).
    keyframes Yes The list of keyframes (below). At least one must move something.
    loop No true repeats the emote until the player moves. Default false: it plays once, then ends.
    order No Where it comes in the emote list, lowest first. Default 1000, so pack emotes come after the built-in ones.
    hidden No true keeps it off the wheel and the list. The built-in Hug and High-five use this.
    events No Sounds and particles at set times (below).

    Keyframes

    Each keyframe has a time t (0 to length, in ticks, decimals allowed) and any of these parts, each as three numbers [x, y, z]:

    Part What moves
    head The head (angles)
    body The body (angles)
    right_arm, left_arm The arms, from the shoulder (angles)
    right_leg, left_leg The legs, from the hip (angles)
    torso The whole upper body bends at the hips: body, head and arms together (angles)
    root_rotation Turns the whole player round the hips (angles)
    root_offset Moves the whole player, in pixels (16 to a block)

    A part only moves if a keyframe mentions it; parts that aren’t in any keyframe are left as the game has them (so a waving player’s legs still look normal). Keyframes don’t have to mention every part, and they can come in any order.

    Before its first keyframe, a part holds that keyframe’s pose; after its last, it holds the last one. In a looping emote it moves from the last keyframe round to the first again.

    Angles

    Angles are in degrees, the same way round as Minecraft’s player model:

    • Arms and legs, X: negative swings forward. -90 points an arm straight ahead, -180 straight up. Positive swings back.
    • Arms, Z: swings a lowered arm out to its own side: positive for the right arm, negative for the left. Once an arm is raised past level it works the other way round, so arms up in a V are [-166, 0, -30] for the right arm and [-166, 0, 30] for the left.
    • Head, X: positive looks down, negative looks up. Y turns it left and right.
    • Torso, X: positive bows forward.
    • Root offset: [x, y, z] in pixels, and positive Y is down. Sitting on the ground is about [0, 11, 0].

    The “right” arm and leg are the player’s own right, which is on your left when they face you.

    Easing

    ease on a keyframe sets how the motion arrives at it from the keyframe before:

    ease Motion
    in_out Starts slow, speeds up, slows down (the default)
    in Starts slow and speeds up
    out Starts fast and slows down. Good for snappy moves
    linear Steady speed
    step Holds still, then jumps to the new pose at the keyframe’s time

    Events

    events play a sound and/or particles at a set time:

    "events": [
      { "t": 9, "sound": "tgemotes:clap", "particle": "minecraft:crit", "count": 4, "at": [0, 1.35, 0.4] }
    ]
    Field What it is
    t When, in ticks (0 to length). In a looping emote it plays each time round.
    sound A sound id, such as minecraft:entity.player.levelup or one from your pack’s sounds.json. Optional.
    particle A particle id, such as minecraft:heart or minecraft:note. Only particles that need no extra settings work. Optional.
    count How many particles, 0 to 50. Default 1.
    at Where, in blocks from the player’s feet: [to their right, up, forwards]. Default [0, 1, 0].

    Only the player’s own game and nearby players with the mod and the same pack play them.

    Mistakes

    A file with a mistake is skipped and the game log says why, in a line like:

    Skipping emote mypack:raise_the_roof: keyframe time 25 is outside 0 to 20

    The usual ones: a missing length or keyframes, a keyframe or event time outside 0 to length, a misspelt part name (“unknown body part”), a part without exactly three numbers, or an unknown ease. Fix the file and press F3 + T to reload.