Each variant becomes a new file under your namespace, so the vanilla variants all stay in the game alongside yours. Mob variants are data-driven from Java Edition 1.21.5 onward, which is what makes adding new ones possible.
Wolves carry three textures per variant: wild, tame (collar shown) and angry. The biome the wolf spawns in picks the visual variant.
Variant files go in data/mypack/wolf_variant/. Lowercase letters, numbers, _ . - only.
A single biome, e.g. plains. Higher priority wins when two conditions match; the default (priority 0, no condition) is the fallback.
{
"assets": {
"angry": "mypack:entity/wolf/wolf_my_variant_angry",
"tame": "mypack:entity/wolf/wolf_my_variant_tame",
"wild": "mypack:entity/wolf/wolf_my_variant"
},
"baby_assets": {
"angry": "mypack:entity/wolf/wolf_my_variant_angry_baby",
"tame": "mypack:entity/wolf/wolf_my_variant_tame_baby",
"wild": "mypack:entity/wolf/wolf_my_variant_baby"
},
"spawn_conditions": [
{
"priority": 1
}
]
}Put these PNG files in a resource pack (it needs its own pack.mcmeta). The texture name without the suffix must match the asset_id above.
assets/mypack/textures/entity/wolf/wolf_my_variant.pngassets/mypack/textures/entity/wolf/wolf_my_variant_baby.pngassets/mypack/textures/entity/wolf/wolf_my_variant_tame.pngassets/mypack/textures/entity/wolf/wolf_my_variant_tame_baby.pngassets/mypack/textures/entity/wolf/wolf_my_variant_angry.pngassets/mypack/textures/entity/wolf/wolf_my_variant_angry_baby.pngA custom mob variant is a small JSON file in a datapack that adds a new look for a mob (a new wolf coat, a new cat pattern, a recolored frog) without removing any vanilla variant. This builder writes the file in the exact shape Minecraft expects, drops it in the right datapack path, and tells you which textures your resource pack needs.
Mob variants became a data-driven dynamic registry in Java Edition 1.21.5. Before that, the wolf, cat and other variant lists were hardcoded. Now each variant is its own JSON file under data/<namespace>/<mob>_variant/, which means a datapack can register entirely new variants the same way it adds recipes or loot tables. This page targets Minecraft 26.2, where the system is mature, and lets you pick any supported version from the selector so the generated pack format matches your client.
The variant file does two things: it names the texture asset to use and it lists the spawn conditions that decide when the variant appears. The texture itself lives in a resource pack, so a complete custom variant is a datapack plus a resource pack working together.
1. Pick a mob at the top of the tool. Wolves use three textures (wild, tame, angry); cats, cows, pigs, chickens and frogs use one.
2. Set a namespace (your pack id, like mypack) and give the variant a unique id, like galaxy.
3. Add spawn conditions. Choose a biome, a biome tag, a structure tag, or leave it as the default fallback. Set a priority so the right variant wins when several match.
4. Add the variant to the pack, repeat for as many variants as you want, then download. The zip is a ready datapack tree plus a HOW-TO that lists every texture path.
5. Drop the datapack in saves/<world>/datapacks/, run /reload, add the matching textures in a resource pack, and your variant is live.
Each mob type has a slightly different JSON shape. The builder uses the exact shape for whichever mob you pick, matched against the vanilla files:
| Mob | Textures | Model key | Baby texture |
|---|---|---|---|
| assets {wild, tame, angry} | no | yes | |
| single asset_id | no | yes | |
| single asset_id | cold / warm | yes | |
| single asset_id | cold / warm | yes | |
| single asset_id | cold / warm | yes | |
| single asset_id | no | no |
The model key only applies to the temperature-based farm animals (cow, pig, chicken). A cold pig and a warm pig use a different mesh, so the model field tells the game which one to render. The wolf is the only mob with three textures per variant, one for each state.
Most variants spawn by biome. Point a condition at a single biome like minecraft:forest or at a biome tag like #minecraft:spawns_cold_variant_farm_animals. Tags are how vanilla groups all the cold or warm biomes together, so a tag is usually the better choice for temperature-based variants.
The all-black cat is the classic example: it uses a structure condition tied to #minecraft:cats_spawn_as_black (witch huts). You can use the same pattern to make a variant that only appears near a structure.
When a mob spawns, the game collects every variant whose condition matches and picks the one with the highest priority. A variant with priority 0 and no condition is the fallback. Give your biome-specific variants priority 1 so they beat the fallback in their biome.
Since Java Edition 1.21.5 a wolf variant is a JSON file in your datapack at data/<namespace>/wolf_variant/<name>.json. It lists three textures (wild, tame, angry), an optional baby set, and the biome it spawns in. This tool writes that file for you and tells you the exact texture paths to add in a resource pack.
Java Edition 1.21.5 is the first version where mob variants (cat, cow, pig, chicken, frog and wolf) are a data-driven dynamic registry, so a datapack can add new ones. The zombie nautilus variant was added in the 26.x snapshots. Bedrock Edition does not use this JSON variant system.
Yes. The datapack registers the new variant and points at a texture id in your namespace, but it does not contain the image. You add the PNG textures in a resource pack at assets/<namespace>/textures/entity/<mob>/. The tool lists every texture path your variant needs and the download includes a HOW-TO file.
Each variant has a spawn_conditions list. An entry can match a biome, a biome tag, a structure tag or moon brightness. When two variants both match, the one with the higher priority wins. The default variant uses priority 0 with no condition, so it is the fallback when nothing else matches.
Yes. Every variant you build here is a brand-new file under your own namespace, so all the vanilla variants stay in the game. You are not overriding minecraft:pale or minecraft:tabby, you are adding yourpack:galaxy alongside them.
That is the missing-texture placeholder. It means the datapack loaded the variant but the resource pack texture is missing or the file name does not match the asset_id. Confirm the resource pack is enabled and that the PNG names line up with the paths the tool shows.
Browse more Minecraft tools: