Mannequins
A mannequin (minecraft:mannequin, added in Java Edition 1.21.9) is an entity drawn with the player model. It wears any player's skin, holds a pose like crouching or sleeping and never walks around on its own, which makes it the usual base for NPCs, shopkeepers and player statues in a datapack. Mannequins only spawn through commands such as summon.
Only the entities you summon: eachsummon creates one minecraft:mannequin. No objective, storage, forceloaded chunk, tick or load function.
Summon a Mannequin with a Player Skin
Put the player's name in profile: the game looks up that player's current skin and puts it on the mannequin.
With Kore, playerProfile(name) sets the same field, written in its object form:
Without a profile, a mannequin wears the default slim Alex skin.
Type a player name below, pick a pose and the layers to hide, and copy the summon command or the Kotlin that writes it.
Profiles
profile is the same value as the minecraft:profile component of player heads. It takes four forms:
| Form | SNBT | Kore | Skin shown |
|---|---|---|---|
| Name | profile:"Ayfri" or profile:{name:"Ayfri"} |
playerProfile("Ayfri") |
The current skin of that player, looked up by name |
| UUID | profile:{id:[I;-2040022415,-1202044924,-1353431686,-1758138665]} |
playerProfile(id = uuid("8667ba71-b85a-4004-af54-457a9734eed7")) |
The current skin of that player, kept after a name change |
| Properties | profile:{properties:[{name:"textures",value:"<base64>"}]} |
playerProfile { property("textures", "<base64>") } |
The skin encoded in value, with no lookup |
| Texture | profile:{model:"slim",texture:"minecraft:entity/player/slim/alex"} |
textureProfile(Textures.Entity.Player.Slim.ALEX) { model = MannequinModel.SLIM } |
A texture shipped by the game or a resource pack |
Player Profile
A player profile uses a player's name or UUID to fetch their skin and properties. A UUID keeps pointing at the same player after they rename their account.
property(name, value, signature) adds a signed textures property, the form skin sites export, so the skin no longer depends on the player:
Texture Profile
A texture profile points at a texture ID instead of a player. model picks the arm width, WIDE (4 pixels, Steve) or SLIM (3 pixels, Alex).
The game's skins are ALEX, ARI, EFE, KAI, MAKENA, NOOR, STEVE, SUNNY and ZURI, under Textures.Entity.Player.Slim and Textures.Entity.Player.Wide. A texture from a resource pack is given as a namespace:path string, a bare path stays in minecraft:
elytra takes an ElytraTextureArgument, like Textures.Entity.Equipment.Wings.ELYTRA, and cape a CapeTextureArgument:
A player profile also takes texture, cape, elytra and model overrides, applied on top of the looked-up skin:
Customization
Mannequins support additional fields for further customization:
The rows for CustomName, CustomNameVisible, Glowing, Invulnerable, NoGravity, Rotation, Silent and Tags are entity fields a mannequin shares with every entity, they come from the EntitySummonData base, which lists the others too (motion, fire, air...).
| Field | Kore | Default | Effect |
|---|---|---|---|
CustomName |
customName |
none | Name shown above the mannequin when it is looked at |
CustomNameVisible |
customNameVisible |
false |
Shows the name even when the player isn't looking at the mannequin |
description |
description |
NPC |
Text shown under the name, where a player's below_name score goes |
equipment |
equipment { } |
none | Items worn and held, see Equipment |
Glowing |
glowing |
false |
Draws the glowing outline around the mannequin |
hidden_layers |
hiddenLayers(...) |
none | Skin layers left out, see Hidden Layers |
hide_description |
hideDescription |
false |
Removes the description line |
immovable |
immovable |
false |
Keeps the mannequin from being moved |
Invulnerable |
invulnerable |
false |
Makes the mannequin immune to damage |
main_hand |
mainHand |
right |
Hand holding the main hand item |
NoGravity |
noGravity |
false |
Keeps the mannequin from falling |
pose |
pose |
standing |
Body pose, see Pose |
profile |
playerProfile(...), textureProfile() |
slim Alex | Skin, see Profiles |
Rotation |
rotation(yaw, pitch) |
0, 0 |
Facing, in degrees |
Silent |
silent |
false |
Mutes the sounds of the mannequin |
Tags |
tags |
none | Scoreboard tags, matched by tag= in selectors |
Pose
The pose field sets the mannequin's pose, a subset of the poses players take:
STANDINGCROUCHINGSWIMMINGFALL_FLYINGSLEEPING
Hidden Layers
The second layer of a skin (hat, jacket, sleeves, pants legs) and the cape can be hidden one by one with hiddenLayers, the same parts the Skin Customization screen of the game toggles.
Available layers:
CAPEHATJACKETLEFT_PANTS_LEGLEFT_SLEEVERIGHT_PANTS_LEGRIGHT_SLEEVE
Equipment
equipment { } puts items in the mannequin's equipment slots, set by EquipmentSlot (HEAD, CHEST, LEGS, FEET, MAINHAND, OFFHAND, BODY and SADDLE). Each slot takes an item stack, and slots left out stay empty.
Main Hand
mainHand sets which hand is the main hand of the mannequin, the one holding its main hand item.
A Shopkeeper NPC
Put together, the fields give a crouching shopkeeper named Bob that wears a player's skin, holds an emerald, shows a gold label under its name and can't be pushed away from its stall or hurt:
Mannequin doesn't cover every field a living entity has: attributes (such as minecraft:scale) and Health aren't part of it. They can be merged into toNbt() before the summon, the way Mannequin.summon adds UUID:
Clickable NPC
A mannequin only stands there. npc(name) { } pairs it with an interaction sized to its pose, so right and left clicks run Kotlin callbacks:
The mannequin and the interaction are summoned together, and clicked in a callback selects the mannequin. The hitbox sizes, the per-NPC scoreboard state and a shopkeeper opening a menu are in NPCs.
Summoning and OOP Handle
Use summon() inside a function to spawn the mannequin and receive a MannequinEntity handle. The handle uniquely identifies this instance by its UUID, giving access to all OOP entity commands.
The generated selector is @e[limit=1,nbt={UUID:[I;...]},type=minecraft:mannequin], uniquely targeting the spawned instance.
MannequinEntity lives in the oop module and extends Entity, so every entity-scoped extension applies to it - see Entities & Players for the full list.
