Wandering Merchants

Wandering Merchants

A data pack that gives wandering traders professions, many new trades, and much more!

by
4.9K Downloads
datapackfabricforgequiltgame-mechanics
Rent Server with this Mod

About this Mod

Wandering Merchants replaces the vanilla wandering trader with 4 new merchant types: farming, fishing, mining, and treasure. Each merchant has a different set of possible trades and has an equal chance of spawning.

Compatible with VanillaTweaks Wandering Trades datapack.

Farming Merchant Trades

This merchant deals with all things farming.

Trade 1

10 Sweet Berries -> 1 Emerald or

10 Dried Kelp Blocks -> 1 Emerald

Trade 2

5 Pumpkins -> 1 Emerald or

4 Melons -> 1 Emerald

Trade 3

1 Emerald -> 1 Allium

1 Emerald -> 1 Azure Bluet

1 Emerald -> 1 Blue Orchid

1 Emerald -> 1 Cornflower

1 Emerald -> 1 Dandelion

1 Emerald -> 1 Lily of the Valley

1 Emerald -> 1 Orange Tulip

1 Emerald -> 1 Oxeye Daisy

1 Emerald -> 1 Pink Tulip

1 Emerald -> 1 Poppy

1 Emerald -> 1 Red Tulip

1 Emerald -> 1 White Tulip

Trade 4

1 Emerald -> 3 Black Dye

1 Emerald -> 3 Blue Dye

1 Emerald -> 3 Brown Dye

1 Emerald -> 3 Cyan Dye

1 Emerald -> 3 Gray Dye

1 Emerald -> 3 Green Dye

1 Emerald -> 3 Light Blue Dye

1 Emerald -> 3 Light Gray Dye

1 Emerald -> 3 Lime Dye

1 Emerald -> 3 Magenta Dye

1 Emerald -> 3 Orange Dye

1 Emerald -> 3 Pink Dye

1 Emerald -> 3 Purple Dye

1 Emerald -> 3 Red Dye

1 Emerald -> 3 White Dye

1 Emerald -> 3 Yellow Dye

Trade 5

5 Emeralds -> 1 Acacia Sapling

5 Emeralds -> 1 Birch Sapling

5 Emeralds -> 1 Cherry Sapling

5 Emeralds -> 1 Dark Oak Sapling

5 Emeralds -> 1 Jungle Sapling

5 Emeralds -> 1 Oak Sapling

5 Emeralds -> 1 Spruce Sapling

5 Emeralds -> 1 Mangrove Propagule

Trade 6

2 Emerald -> 1 Spore Blossom

1 Emerald -> 2 Small Dripleaf

1 Emerald -> 1 Big Dripleaf

Fishing Merchant Trades

Trade 1

20 String -> 1 Emerald

5 Ink Sac -> 1 Emerald

5 Nautilus Shell -> 1 Emerald

Trade 2

15 Cod -> 1 Emerald

13 Salmon -> 1 Emerald

6 Tropical Fish -> 1 Emerald

4 Pufferfish -> 1 Emerald

Trade 3

2 Emerald -> 5 Glow Ink Sac

Trade 4

3 Emerald -> 1 Luck Potion (5:00)

Trade 5

2 Emerald -> 1 Sea Pickle

3 Emerald -> 1 Brain Coral Block

3 Emerald -> 1 Bubble Coral Block

3 Emerald -> 1 Fire Coral Block

3 Emerald -> 1 Horn Coral Block

3 Emerald -> 1 Tube Coral Block

Trade 6

8 Emerald -> 1 Pufferfish Bucket

8 Emerald -> Cod Bucket

Mining Merchant Trades

Trade 1

15 Coal -> 1 Emerald

22 Flint -> 1 Emerald

12 Quartz -> 1 Emerald

Trade 2

20 Stone -> 1 Emerald

16 Granite -> 1 Emerald

16 Andesite -> 1 Emerald

16 Granite -> 1 Emerald

Trade 3

1 Emerald -> 8 Sand

Trade 4

1 Emerald -> 4 Red Sand

Trade 5

1 Emerald -> 2 Pointed Dripstone

Trade 6

1 Emerald -> 1 Terracotta

Trade 7

1 Emerald -> 1 Calcite

Treasure Merchant Trades

Trade 1

4 Scute -> 1 Emerald

32 Rotten Flesh -> 1 Emerald

24 Feather -> 1 Emerald

Trade 2

5 Nautilus Shell -> 1 Emerald

22 Nether Wart -> 1 Emerald

24 Paper -> 1 Emerald

Trade 3

3 Emeralds -> 1 Experience Bottle

Trade 4

2 Emeralds -> 5 Glowstone

Trade 5

1 Emerald -> 1 Gunpowder

Trade 6

2 Emerald + 5 Arrow -> 5 Tipped Arrow

Configs Menu

Accessible with /function clgd.trader:config/menu
Used to configure values related to wandering trader spawn rates.

Planned features

Modding

Add your own trader variants

Modding

This section refers to features that are coming soon

The data format for a wandering trader variant is as follows: {Weight:1,Name:"",TradeTable:[]}

  • Weight (optional) works as weight in a LootTable does, the higher the weight, the more likely that trader will be selected. If missing, the weight defaults to 1
  • Name will be used when announcing that the trader has spawned ("A {name} Has Spawned!").
  • TradeTable is a list of lists referring to each trade the merchant has. Each sub list is a list of possible trades for the wandering trader to have. The first sublist is a list of possible trades for the first trade slot, the second sublist for the second trade, and so on.

The trade format is as follows:{Weight:1,Tradedata-blocked:{}}

  • Weight (optional) works the same as mentioned earlier
  • TradeData (optional) contains the information for the trade to be added. This may be left blank if you want a chance of a trade not appearing.

The contents of TradeData follow that of a typical villager trade, with buy and sell values, and and optional buyB value:

buy:{id:"minecraft:emerald",Count:32},buyB:{id:"minecraft:book",Count:1},sell:{id:"minecraft:enchanted_book",Count:1,tag:{StoredEnchantments:{id:mending,lvl:1}}}}}

  • buy stores the item being given in exchange for the item in sell
  • buyB (optional) is a second item to exchange. (This is used in librarian trades, Emeralds + Book = Enchanted Book).

The buy, buyB, and sell tags each of 3 subtags:

  • id - The string id of the item
  • Count - (optional) the amount of the item. Probably defaults to 1
  • tag - (optional) NBT data on the item.
Tutorial: Adding your own merchant

This section refers to features that are coming soon

Although I tried my best to explain how modding works, it may still be confusing for some of you. This tutorial will take you though the step-by-step process of adding your own custom merchant.

For this tutorial, you must have basic knowledge on how do create a datapack. If you do not know how to create a datapack, you can find plenty online. TODO: find a good tutorial and link it here

First you want to create a new datapack with a new function. I'll call mine new_merchant.mcfunction and put it in the namespace mypack.

Inside the new_merchant.mcfunction we need to initialize the trader and set its trades:

Creating the villager function

#This command does the initial setup for the merchant, assigning a name, weight, and setting up the tradetable
data modify storage clgd.trader:data NewMerchant append value {Weight:1,Name:"Special Merchant",TradeTable:[]}
#         I recommend changing this value ^^^ to be something unique. If multiple packs use the same value, then there will be issues with one pack overwriting the other. 

#This adds the first set of trade options to the tradetable
data modify storage clgd.trader:data NewMerchant.TradeTable append value []

#This adds a trade option to the first set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {Tradedata-blocked:{buy:{id:"minecraft:coal",Count:48},sell:{id:"minecraft:diamond",Count:1}}}

#The 'data modify storage clgd.trader:data NewMerchant.TradeTable[-1]' means we are modifying the last set of trade options. Since there is only 1 right now, that means we are modifying the first one.

#This adds the second set of trade options to the tradetable
data modify storage clgd.trader:data NewMerchant.TradeTable append value []

#This adds a trade option to the second set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {Tradedata-blocked:{buy:{id:"minecraft:diamond",Count:1},sell:{id:"minecraft:emerald",Count:2}}}

#Add a second trade option to the second set of trades
data modify storage clgd.trader:data NewMerchant.TradeTable[-1] append value {Tradedata-blocked:{buy:{id:"minecraft:coal_block",Count:5},sell:{id:"minecraft:emerald",Count:2}}}

#Now that there are 2 trades, the 'data modify storage clgd.trader:data NewMerchant.TradeTable[-1]' refers to the second set of trades

This function will create the data for a new merchant with 2 trades. The first trade will always be 48 Coal -> 1 Diamond and the second trade will either be 1 Diamond -> 2 Emeralds or 5 Coal Blocks -> 1 Emerald

Running the function

Now that we've written the function to create the villager, we want to make sure that the function gets run to initialize the trades. This can be done by creating a new namespace called clgd.trader then inside that namespace create a new folder called tags, another subfolder called functions , then a file called set_default_trades.json. You'll also need to create another file called update_trades.json

So your folder structure should look like:
clgd.trader -> tags -> functions -> set_default_trades.json

The set_default_trades.json should look something like this

{
  "values": [
    "mypack:new_merchant"
  ]
}

Available Versions

v1.1.0release
MC 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4fabric, forge, quilt
January 10, 2024
v1.1.0release
MC 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4datapack
January 10, 2024
v1.0.1release
MC 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4fabric, forge, quilt
January 9, 2024
v1.0.1release
MC 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4datapack
January 9, 2024
Wandering Merchant v1.0.0release
MC 1.20, 1.20.1, 1.20.2, 1.20.3, 1.20.4fabric, forge, quilt
August 23, 2023

How to Install Wandering Merchants on Your Server

1

Order Server

Order a Minecraft Java server with at least 3 GB RAM (4 GB recommended).

2

Set datapack Loader

In the panel under "Egg", select the datapack loader and matching Minecraft version (1.20.4).

3

Install Mod

Open the mod browser in the dashboard and search for "Wandering Merchants". Click "Install" – done! Alternatively, upload the .jar via SFTP to the /mods folder.

Compatibility

Mod Loaders

datapackfabricforgequilt

Minecraft Versions

1.20.4, 1.20.3, 1.20.2 (+2 more)

Server-side

Required

Recommended RAM

4 GB(min. 3 GB)

Frequently Asked Questions

Wandering Merchants server crashes on startup – what to do?

Most common cause: wrong datapack version or insufficient RAM. Check the server log (latest.log) for "OutOfMemoryError" or "Mixin" errors. With Mado Hosting: ensure at least 3 GB RAM is allocated and the loader matches the mod version (1.20.4). You can switch loaders with one click in the panel.

Is Wandering Merchants compatible with datapack and fabric and forge and quilt?

Wandering Merchants officially supports datapack, fabric, forge, quilt for Minecraft 1.20.4, 1.20.3, 1.20.2. Note: Forge and Fabric mods are NOT cross-compatible – pick one loader and stick with it. The Mado dashboard automatically detects incompatible loader combinations.

Server lagging with Wandering Merchants – how to optimize performance?

Recommended RAM: 4 GB (per 8 players). Use /spark profiler to check if Wandering Merchants consumes the most tick time. Common fixes: reduce server view-distance to 8-10, install "performant" or "starlight" as supplementary mods on Forge. With Mado Hosting, your server runs on NVMe SSDs with dedicated CPU cores for minimal latency.

Rent Modded Server

Install Wandering Merchants with just one click on your server.

Recommended RAM
4 GBab €8/mo
Min. 3 GB | +1 GB pro 8 Spieler
Create Server Now
1-Click Mod Install
NVMe SSD Storage
DDoS Protection included

Details

License
Creative Commons Attribution Non Commercial Share Alike 4.0 International
Server-side
Required

Supported Versions

1.20.41.20.31.20.21.20.11.20