Create new villager professions and change existing ones, including textures, workstations, day plans, behaviours and village buildings, from simple JSON files or directly in the in-game editor GUI, no coding required.
No Java, no fork, no resource pack. One file per profession.
Versions: 1.20.1, 1.21.1, 1.21.8
Loader: Fabric, NeoForge (1.21.1, 1.21.8), Forge (1.20.1)
Support my work on
overrides. For example, put the farmer on the night shift
in four lines."schedule": "night" or your own switch-over times for work, idle, meet and rest.farm work: harvest, replant and use bone meal like the farmer.flees_from: extra mobs to run from.attacks: guards that fight zombies and skeletons.health: more health for the profession.villages: keep a job in desert or snowy villages only..nbt house appears in generated villages. Or give only a
workstation, and the mod builds a stall in each village style: oak, sandstone, acacia or spruce./ddv edit opens a GUI with every field. Save writes the file and reloads it./ddv reload applies textures, hats, gifts, workstations, behaviour and day
plans without a restart. New day plans reach villagers that already stand in the world.config/datadrivenvillagers/professions/.example_baker.json (or open /ddv edit), then restart./give @s minecraft:structure_block and place it next to an unemployed
villager. The villager becomes a baker. The example uses a structure block so it takes no block
away from a normal world.{
"workstation": "minecraft:structure_block",
"display_name": "Baker",
"texture": "example_baker.png",
"hat": "none",
"work_sound": "minecraft:entity.villager.work_farmer",
"gatherable_items": ["minecraft:wheat", "minecraft:bread"],
"secondary_job_sites": ["minecraft:cake"]
}
The file name is the id: baker.json becomes datadrivenvillagers:baker. Put baker.png next to
the json and the texture loads at runtime.
Why a config folder and not a datapack? Professions and job sites are registries that Minecraft freezes before any datapack loads. Everything that can be a datapack still is one: trades, gifts, tags and translations.
On a server, every player needs the mod and the same profession files, because the game
refuses a client that does not know a registered profession. /ddv export <name> packs one
profession into a zip that you can give to your players.
| Command | Does |
|---|---|
/ddv edit [<name>] |
Opens the editor GUI on a profession, or on a new one. |
/ddv why <name> |
Checks the complete chain for one profession and shows where it breaks. |
/ddv why villager |
The same for the villager in front of you: job, station, bed, plan, why it does not work or sleep. |
/ddv blocks [text] |
Shows which blocks are still free to be a workstation. |
/ddv reload |
Reads the config folder again without a restart. |
/ddv scaffold <name> |
Writes the trade file, gift loot table, language file and a village stall, ready to edit. |
/ddv export <name> |
Packs a profession with its files into one zip that you can share. |
/ddv doctor |
Writes every report into doctor.txt, to paste into a bug report. |
/ddv list / /ddv errors |
All loaded professions / every rejected file and why. |
/ddv help |
Shows this table in the chat. |
list, errors, why, blocks and help need permission level 2. edit, reload, scaffold,
export and doctor write files and need level 3. In a singleplayer or LAN world, only the host can
use them.
Trades come from VillagersTradingPlus.
Put a trade file into a datapack at data/<namespace>/default_villager_trades/baker.json with
"profession": "datadrivenvillagers:baker". Or press Create default trades in /ddv edit, and
the mod writes a starting file into the world's datapacks for you. The full trade format is on the
VillagersTradingPlus page.
/ddv blocks shows what is still free."allow_natural_block": true to use one anyway. Air, fluids and blocks without collision are never
allowed./ddv errors and /ddv why
tell you what is wrong.