Soulbound Dolls
Soulbound Dolls is a NeoForge 1.21.1 mod that turns known players into small, placeable player-skin dolls. It records player profiles on the server, lets operators issue bound dolls, and renders bound items and placed entities with player skins when texture data is available.
Highlights
- Player-bound doll items with UUID-backed profile data.
- Placeable
Player Dollentities with sitting, standing, and cute idle poses. - Dynamic player-skin rendering for bound doll items and placed dolls.
- Server-side known-player registry saved with the world.
- Operator commands (permission-based, delegatable) for listing profiles, giving dolls, and refreshing skins.
- Per-player skin texture caching on the client and a configurable online-refresh TTL on the server.
- Configurable auto-give, online skin refresh, pat particles, and pickup permissions.
- English and Simplified Chinese user documentation.
Compatibility
| Component | Version |
|---|---|
| Minecraft | 1.21.1 |
| NeoForge | 21.1.18+ |
| Java | 21 |
| Mod loader | NeoForge only |
Install
- Install a Minecraft
1.21.1NeoForge client or server. - Download the built
soulbound-dolls-neoforge-1.21.1-*.jarfrom a trusted release source. - Put the jar in the instance
modsdirectory. - Start the game or dedicated server.
Publishing to Modrinth and CurseForge is scaffolded but not active until project IDs and tokens are configured by the maintainer.
Player Flow
- A player joins a world or server.
- The server records their UUID, name, and available skin texture data.
- If
autoGiveOwnDollis enabled, the player receives their own bound doll once. - A blank
Player Dollcan also be crafted and binds to the placing player on first placement. - Placed dolls can be patted, shaken, pose-cycled, copied in creative mode, worn as head-slot dolls, and picked up with permission checks.
Interactions
Dolls mostly use vanilla mouse and sneak interactions. Keybindings are used for teleporting to a bound player and cycling the pose of a worn doll.
| Action | Input | Effect |
|---|---|---|
| Place a doll | Right-click a block face while holding a doll | Spawns a Player Doll entity bound to the doll's profile. |
| Cycle pose | Right-click a placed doll while holding any item | Cycles Sitting → Standing → Cute idle. |
| Wear a doll | Right-click air while holding a doll and with an empty head slot | Equips exactly one doll in the head slot. |
| Cycle worn pose | Press B while wearing a doll | Cycles the worn doll Sitting → Standing → Cute idle. |
| Pat | Right-click a placed doll with an empty hand | Plays a chime and emits heart particles (if allowPatParticles). |
| Shake | Sneak + attack (left-click) a placed doll | Plays a shake animation and sound. |
| Pick up | Sneak + right-click a placed doll | Returns the doll to your inventory, subject to allowPickupByAnyone. |
Note: the default worn-doll pose key is B and can be changed in Minecraft's key bindings menu.
Commands
There is no config toggle for commands; access is permission-based:
- Operators (single-player worlds with cheats on, or server operators at permission level 2) can always use the commands.
- An operator can delegate access to specific players with
/sbdoll permission grant <player>— without granting full operator status. Userevoketo take it back andlistto see who has it. - Granted players can use
list,give, andrefresh, but notpermission(no escalation).
/sbdoll list
/sbdoll give <target> <prototype...>
/sbdoll giveall <target>
/sbdoll refresh <prototype>
/sbdoll permission grant <player> (operators only)
/sbdoll permission revoke <player> (operators only)
/sbdoll permission list (operators only)
<prototype> can be a player name or UUID. give accepts multiple space-separated names for batch
handouts; giveall hands out a doll for every known player. give resolves any player that has
logged into this server (via the native usercache.json profile cache), not only players already
in the doll registry — so you can hand out a doll for anyone who has joined before, even on
offline-mode servers. list shows every known player and marks whether a skin has been captured (✔)
or is still the default (✘).
Config
The common config is generated at:
config/soulbound_dolls-common.toml
| Option | Default | Purpose |
|---|---|---|
autoGiveOwnDoll |
true |
Give players their own bound doll on login if missing. |
enableOnlineSkinRefresh |
true |
Refresh known player skins from Mojang services. |
allowPatParticles |
true |
Emit heart particles when dolls are patted. |
allowPickupByAnyone |
false |
Allow anyone to pick up placed dolls instead of only the creator. |
skinRefreshTtlMinutes |
60 |
Minimum minutes between online skin refreshes per player; cached skins are reused within this window. |
allowDollAsHelmet |
true |
Allow player dolls to be equipped in the head slot. |
enableEnderMaskProtection |
true |
Treat worn or compatible accessory-slot dolls as Enderman masks. |

