How custom mob variants work
Java Edition stores each visual variant in a data-driven registry. The datapack entry decides which texture asset and model Minecraft should use, while the matching PNG lives in a resource pack. Both packs must be enabled for the custom appearance to render.
Wolf definitions are special: they require wild, tame and angry assets instead of one asset_id. From 26.1 onward, cats, cows, pigs, chickens and wolves can also point to dedicated baby textures. The builder changes the JSON and file list automatically when you switch versions.
Spawn rules are evaluated by priority. Use biome or structure IDs with the minecraft: namespace, tags beginning with #, or a moon-brightness range. Add a priority-0 fallback if you want the custom variant to remain selectable outside the specific rule.
How to build and install a custom mob variant
- Choose the exact Minecraft version first. This controls the generated data-pack and resource-pack formats and hides mobs or biomes that do not exist in older releases.
- Pick a mob, enter a lowercase namespace and unique variant ID, then choose its model when that registry supports temperature-based forms.
- Add one or more spawn conditions. Use specific rules with higher priorities and add a condition-free priority-0 fallback when the variant should remain available elsewhere.
- Upload every required PNG, add the variant to the pack and repeat for any additional mobs. The texture-path panel shows the exact filenames written into the resource pack.
- Download the bundle, place the datapack ZIP in world/datapacks, enable the resource-pack ZIP, run /reload and test the mob in a location matching its spawn rule.
Mob variant JSON shapes
Each registry uses a slightly different JSON shape. The builder chooses the correct asset fields and model keys for the selected mob and Minecraft version.
| Mob | Required texture assets | Model key | Baby assets |
|---|---|---|---|
| assets {wild, tame, angry} | No | Yes (26.1+) | |
| single asset_id | No | Yes (26.1+) | |
| single asset_id | normal / cold / warm | Yes (26.1+) | |
| single asset_id | normal / cold / warm | Yes (26.1+) | |
| single asset_id | normal / cold / warm | Yes (26.1+) | |
| single asset_id | No | No | |
| single asset_id | normal / warm | No |
model The model key applies to temperature-based farm animals and Zombie Nautilus variants. Wolf is the special case because one variant references separate wild, tamed and angry textures.
Spawn conditions and priority
Biome and biome tags
Choose one biome for a precise rule or a biome tag when the same variant should appear across a group of related biomes.
minecraft:forest | #minecraft:is_forestStructure conditions
Restrict a variant to a structure or structure tag. This is useful for themed mobs around villages, monuments, trial chambers and other generated locations.
#minecraft:cats_spawn_as_blackPriority and fallback behavior
Minecraft evaluates matching entries by priority. Give specific rules a higher number and keep one condition-free entry at priority 0 as the fallback.
priority: 1 | fallback: 0Custom mob variant FAQ
Does this work on Bedrock Edition?
No. These registry folders and JSON formats are for Java Edition datapacks and resource packs.
Why are Wolf variants different?
A wolf changes texture when wild, tamed or angry, so its registry entry uses three adult assets and, in 26.1+, three baby assets.
Do I need both generated ZIP files?
Yes. The datapack registers the variant and spawn conditions; the resource pack supplies the PNG textures referenced by the JSON.
Can I add several variants?
Yes. Add multiple entries, including variants for different mobs, then download one bundle containing both complete packs.
Which Minecraft versions support custom mob variants?
Java Edition 1.21.5 introduced data-driven variants for the original supported mobs. Later releases added baby assets and Zombie Nautilus. Choose the target version so the generated pack formats and available options stay compatible.
Why does my mob show a purple-and-black texture?
Minecraft found the variant JSON but could not load the referenced texture. Check the PNG dimensions, filename, namespace and the exact assets/<namespace>/textures/entity path shown by the builder.
How does priority choose a variant?
Minecraft gathers the variants whose conditions match and selects from the highest-priority entries. A condition-free entry at priority 0 is the safe fallback when no biome or structure rule matches.