Mercantile

FAQ

Click any question to expand. If yours isn't here, open an issue on GitHub.

Is Mercantile vanilla-compatible? +
Yes. Mercantile follows a strict vanilla-first asset policy — every sound, particle, and most icons reuse vanilla assets. Villager pickup items are player heads with pre-existing skin textures, not custom items. The only custom texture is the Sentry Pylon block. New trades and behaviors stack additively with vanilla gossip and pricing; your existing world is fully playable on installation.
Will this hurt my server's performance? +
No major hits expected. Detection cycles (Sentry Pylon, reputation proximity) run on coarse tick intervals (every 40 ticks for pylons; reputation proximity counts in 10-minute chunks). Scan radii are tunable — drop pylonDetectionRadius from 32 to 16 if you have a lot of active pylons. Visualization particles are client-side and culled past 32–64 blocks. State managers (FollowManager, ClientMercantileData) clear on disconnect/unload to prevent unbounded growth. If you observe a regression, please file an issue with a profile/Spark report.
Does it work with VillagerOptimizer, Easy Villagers, or other villager mods? +
Compatibility hasn't been systematically tested. Mods that bulk-modify villager AI, replace trade generation, or alter the merchant menu may conflict with the pathfinding, follow-mode, and trade-cycling mixins. Known conflicts will be flagged in the GitHub issue tracker as they're reported. If you hit one, please open an issue with your full mod list.
Can I disable individual features? +
Yes. Every feature has an enable* flag in mercantile.json. Don't like trade cycling? Set enableTradeCycling to false. Want the visualizations off? Toggle the four enable*Vis client flags. See the full config reference. Use /mercantile reload to apply changes without restarting the server.
Can I customize Mercantile via datapack? +
Yes, in three places. Villager names — datapacks at data/mercantile/villager_names/<category>.json can replace or extend the biome name pools (set "replace": true to override). Reputation-tier exclusive trades — drop per-profession files at data/mercantile/exclusive_trades/<profession>.json with min_tier gates and standard 1.21.1 component-format trades. Sentry Pylon recipe — uses a vanilla-format recipe JSON; standard datapack recipe overrides apply. Vanilla loot tables, advancements, and other recipes are untouched.
Does it work in singleplayer? On a server? +
Both. In singleplayer (which runs an integrated server), everything works out of the box. On a dedicated server, install Mercantile on both server and client — server config syncs to every connected client at join time and after /mercantile reload via the ConfigSyncS2CPayload. Client-only settings (volume, visualizations, info panel, reputation HUD) stay local to each client.
Where's the config file? +
In your Minecraft instance at .minecraft/config/mercantile.json (or the equivalent path for your launcher). It's generated automatically on first launch with all defaults. You can edit it by hand — out-of-range values are clamped on load — then run /mercantile reload in-game to apply without restarting. Or install Mod Menu + Cloth Config for an in-game GUI.
Is there a Forge or NeoForge version? +
No. Mercantile is Fabric-only for Minecraft 1.21.1. A port to Forge/NeoForge isn't planned, but the source is MIT-licensed — feel free to fork and port.