About VillagersTradingPlus
From ModrinthAdd, replace or delete the trades of any villager, change the currency, gate trades behind conditions and reprice them, all from a datapack.
VillagerTradingPlus allows you to fully customize villager trading for your world.
Add, replace or delete the trades of any villager, change the currency, gate trades behind conditions and reprice them, all from a datapack.
Versions: 1.20.1, 1.21.1, 1.21.8
Loader: Fabric, Neoforge, Forge
Support my work on
***
What this is
VillagerTradingPlus is a library. On its own it adds no villagers, blocks or items: it replaces the machinery behind villager trading so that mods and datapacks can define trades in JSON.
Install it if a mod asks for it, or if you want to rewrite villager trading in your own pack. VillagersPlus is the reference mod built on top of it.
What you can do with it
- Add, delete or overwrite trades for every villager profession, the vanilla ones included.
- Change the currency from emeralds to any item you like.
- Set the amount, max usages, villager experience and price behaviour of each trade.
- Gate trades behind conditions: biome, dimension, weather, time of day, moon phase, gamerule,
job site block or a config flag.
- Fourteen trade types, from a plain item sale to weighted pools, structure maps and enchanted
books drawn from a weighted list you define.
- Merge multiple datapacks that modify the same villager, instead of letting the last one win.
- Customize the wandering trader the same way, with its own common and rare tiers.
***
Configuration
config/villagertradingplus/villagertradingplus-1.0-config.json5
These apply to every trade the library builds, no matter which mod or datapack defined it.
Trades
| Option | Default | What it does | | --- | --- | --- | | trade_offers_per_level | 2 | Max new trades a villager gains per level. | | trade_offers_wandering_trader | 5 | Max trades the wandering trader offers. | | trade_price_multiplier_scale | 1.0 | Scales how strongly prices swing from demand and reputation. 0.0 freezes both. Does not change a trade's starting price. | | trade_cost_scale | 1.0 | Multiplies the base cost of every trade (first input slot only). 2.0 doubles all prices. Result is clamped to 1 .. one stack. | | enable_conditional_trades | true | Whether condition-gated trades are actually checked. false makes every trade always appear. | | enable_time_of_day_pricing | false | Randomly nudges a trade's cost based on the in-game time it is unlocked. The price is locked in at unlock and does not keep changing. | | time_of_day_price_variance | 0.15 | How far that nudge can go, as a fraction of the cost. Only used when the option above is on. |
Trading screen controls
All three are off by default. When on, any player can use them, so they are meant for creative building and testing rather than survival servers.
| Option | Default | What it does | | --- | --- | --- | | allow_trade_reroll | false | Buttons to re-roll a villager's or wandering trader's trades, all at once or one level at a time. | | allow_set_villager_level | false | A control to set a villager's level (1-5) and regenerate its trades. Wandering traders have no levels and ignore it. | | allow_view_all_trades | false | A button that opens a read-only catalog panel listing every trade a villager could roll at a chosen level, with weights, chances and conditions. |
***
Making a datapack
Trade files go into a datapack under your own namespace. Three folders are read:
| Folder | What it does | | --- | --- | | data/<namespace>/default_villager_trades/<profession>.json | Replaces a profession's trades outright. | | data/<namespace>/villager_trades/<profession>.json | Adds to a profession's trades. | | data/<namespace>/wandering_trader_trades/<any name>.json | Wandering trader trades. |
A profession file names the profession and holds five tier arrays:
{
"profession": "minecraft:butcher",
"trades": {
"novice": [],
"apprentice": [],
"journeyman": [],
"expert": [],
"master": []
}
}
Every snippet below is a single trade object that goes inside one of those five arrays.
_Notice: the vanilla trades aren't in JSON form yet, so replacing those means writing out the tiers you want to keep._
***
Fields every trade type accepts
These are left out of the examples below to keep them short:
| Field | Meaning | | --- | --- | | max_uses | How often the trade can be used before it locks. | | villager_experience | Experience the villager gains per use. | | price_multiplier | How strongly reputation and Hero of the Village move this trade's price. | | demand | Seeds vanilla's demand pricing: the cost climbs with use and decays over time. | | conditions / logic | See Conditions further down. |
Trade types are namespaced villagertradingplus:. The old villagersplus: namespace is still accepted for datapacks written before the split, but it logs a deprecation warning on load, so write new files against the new one.
***
Trade types
sell_item
The villager sells an item for a price.
{
"type": "villagertradingplus:sell_item",
"sell": { "item": "minecraft:oxeye_daisy", "count": 1 },
"priceIn": { "item": "minecraft:emerald", "count": 2 }
}
buy_item
The villager buys an item and pays you.
Highlights
From source dataGame versions
Supports 3 Minecraft versions, the newest being 1.21.8.
Loaders
Runs on Fabric, Forge and NeoForge.
Footprint
Rated a light load on a server.
What kind of mod it is
From the catalogEconomy & shops
Currencies, shops, trading and rewards.
Runs on your server
From source side supportModrinth lists VillagersTradingPlus as required on the server. Check its Modrinth page to see whether players need it too.
Compatibility
- Game
- Minecraft
- Loaders
- FabricForgeNeoForge
- Runs on
- Serverrequired on the server
- Game versions
- 1.21.8 and 2 earlier
Verified at the source
- ✓ModrinthOfficial listing, checked 2026-10-01Open ↗
- ✓AuthorLithiumPlus, as published on Modrinth
- ✓LicenseGPL-3.0-onlyFree











