Trade Picker
Now available for both Fabric & NeoForge
Pick the exact villager trades you want. No cycling. No luck.

Trade Picker replaces the workstation-cycling grind with a simple choice screen. Right-click any villager and, instead of getting whatever trades the RNG decided, you see every trade that villager could offer at its current level ā then you pick the ones you want. Your picks lock in permanently, and reputation discounts from curing or Hero of the Village still stack on top.
It adds no new items, blocks, or recipes. Everything you can pick is something that villager could already sell in vanilla ā you just choose it instead of rolling for it.
How it works
- Right-click a villager.
- If that villager has more possible trades at its current level than vanilla would grant, a picker grid appears listing every option. Type in the search box to filter ā
mending,fortune,looting,weakness,emerald, any item name. - Choose your trades and hit Confirm. They become that villager's permanent trades.
- When the villager levels up ā Novice ā Apprentice ā Journeyman ā Expert ā Master ā the picker opens again for that tier, if there's a meaningful choice to make.
The picker only appears when de-randomizing is actually relevant ā that is, when the villager's trade pool has more options than vanilla would give you. If a villager only has two possible trades for a given level, you'd get both anyway, so it just opens the shop normally.
What you can pick, by villager
š§āš« Librarian
- Sells: enchanted books.
- You pick: every tradeable enchantment, listed individually at every level ā Mending, Sharpness IāV, Fortune III, Looting III, Silk Touch, Infinity, every Treasure enchantment. No more breaking and replacing lecterns to chase one book.
āļø Weaponsmith
- Sells: enchanted swords and axes.
- You pick: the enchantment on the weapon ā Sharpness, Smite, Bane of Arthropods, Looting, Fire Aspect, Knockback, Sweeping Edge, Unbreaking.
š”ļø Armorer
- Sells: enchanted diamond armor (helmet, chestplate, leggings, boots).
- You pick: the protection you want ā Protection, Fire / Blast / Projectile Protection, plus piece-specific options like Respiration and Aqua Affinity (helmets), Feather Falling and Depth Strider (boots), Thorns, and Unbreaking.
āļø Toolsmith
- Sells: enchanted diamond tools (pickaxe, axe, shovel, hoe).
- You pick: Efficiency, Fortune, Silk Touch, Unbreaking ā grab Fortune III or Silk Touch directly without the reroll.
š¹ Fletcher
- Sells: enchanted bows and crossbows, and tipped arrows.
- You pick: bow enchantments (Power, Punch, Flame, Infinity, Unbreaking), crossbow enchantments (Quick Charge, Piercing, Multishot, Unbreaking), and the potion on tipped arrows ā including Arrow of Weakness for curing zombie villagers.
š£ Fisherman
- Sells: an enchanted fishing rod.
- You pick: Luck of the Sea, Lure, Unbreaking.
š¾ Every other profession
Farmer, Cleric, Butcher, Shepherd, Mason, Cartographer, Leatherworker ... ā you pick which trades that villager offers at each level, straight from its full vanilla pool. The enchantment-choosing above only applies to professions that sell enchanted items; everyone else lets you choose their regular trades.
Everything stays inside what that villager could roll in vanilla, including level limits. Data packs and modded enchantments are picked up automatically, because the picker reads the actual trade list registered for each profession.
Config: enchanted gear & pricing
Books always list every enchantment individually. For enchanted gear (weapons, armor, tools, bows, rods) you can choose how much control you want:
- Headline mode (default): pick the main enchantment you want; the game still rolls its level and any vanilla bonus enchantments ā so a sword can still come with an extra perk, keeping vanilla's variety.
- Single mode: pick the exact enchantment and its level. You get only that.
- Cost scaling (off by default): enable per profession to make rarer and higher-level enchantments cost more emeralds, up to vanilla's price cap ā a little balance so picking the best isn't free.
Pricing is configurable too. By default, all trades are offered at vanilla's minimum possible price, and curing and Hero of the Village discounts can still apply on top. Enable Vanilla Pricing in the config to restore normal price randomization if you'd rather keep that part of vanilla intact.
Configure everything in ModMenu (Fabric) or by editing config/tradeoptimizer.json (works on both loaders). The same file holds the Vanilla Book Limits toggle.
Multiplayer
On shared servers, each villager is claimed by the first player to interact with it. Only that player ā or a server operator ā can reset or change its trades, so your emerald shop stays yours. Players without the mod installed fall back to normal vanilla trading and receive a one-time message explaining why.
Reset anytime
Hit the Reset button on any trade screen to wipe a villager back to Novice and re-pick from scratch. A confirmation prompt keeps it from firing by accident.
Trade Picker vs. trade cycling mods
| Trade cycling mods | Trade Picker | |
|---|---|---|
| Get specific trades | Eventually, with luck | ā First try, every time |
| Librarian enchantment choice | Random | ā Pick any enchant + level |
| Lowest vanilla price | ā | ā (configurable) |
| Works on all professions | ā | ā |
| Adds no new items or recipes | Varies | ā |
| Multiplayer trade protection | ā | ā |
Compatibility
- Loaders: Fabric and NeoForge ā Minecraft 26.2
- Sodium / Embeddium ā
- Iris / Oculus ā
- Lithium / Starlight ā
- ModMenu ā
- EMI / JEI / REI ā
- Data packs that add or change villager trades ā
Heads-up: Don't install alongside another trade-cycling mod ā you only need one, and running two can conflict.
Install
- Install Fabric Loader or NeoForge for Minecraft 26.2.
- On Fabric, also install Fabric API.
- Drop the matching Trade Picker jar into your
modsfolder. - On a server: install on both the server and the client.
No config needed. Right-click a villager and it just works.
Source & License
- GitHub: https://github.com/polyvenom/tradepicker
- License: CC0 1.0 Universal (public domain)
- Author: polyvenom
- Issues / suggestions: GitHub Issues
Support
If Trade Picker saves you an afternoon of lectern-smashing, a tip on Ko-fi is always appreciated. No pressure ā the mod is and always will be free.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 3d ago | 1 | ||||
| 10d ago | 1 | ||||
| 15d ago | 1 | ||||
| 15d ago | 1 | ||||
| 24d ago | 1 | ||||
| 24d ago | 1 | ||||
| 24d ago | 1 | ||||
| 2mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 |
Adds picks for stew effects and dye colours, keeps trades in the order you choose them, and makes the picker faster. Also adds more version support.
### New
- Pick the exact variant.** A farmer's suspicious stew shows one card per effect, and a leatherworker's dyed leather shows one card per colour. (#14)
- Trades appear in the order you pick them.** Selected cards are numbered 1, 2, and so on, and the villager lists the trades in that order. (#23)
### Changed
- Faster picker.** The picker opens and confirms with less work per click. Settings save once, when you close the config screen. (#20)
- Translatable screens.** The picker, the Reset button and the reset confirmation use translation keys. Enchantment and effect names come from Minecraft itself, so they are localised and modded ones display correctly. Professions show as "Farmer" rather than "FARMER". Tipped arrows show potency and duration, for example "Strength II (0:11)". (#21)
- Picker screen polish.** Your selections, search text and scroll position survive a window or GUI-scale change. Search matches trade contents only, not the annotation text. (#18)
### Fixed
- Correct enchanted-book labels with datapacks.** Librarians from datapack trade sets now show the enchantment you will actually get. (#16)
- Book prices.** A picked enchanted book costs what its card showed, including single-level books such as Mending and Silk Touch. (#15)
- Vanilla refusals.** As in vanilla, you can't trade with a sleeping or dying villager, or with one another player is already trading with. (#10)
- Esc on the reset confirmation** goes back to the trade screen.
- Walking away mid-pick** now shows a message saying your picks weren't applied.
- Server-side checks.** The server validates every pick a client sends and rejects modified or out-of-range requests. (#9)
Fabric builds require Fabric API. Install the same version on both client and server.
Adds picks for stew effects and dye colours, keeps trades in the order you choose them, and makes the picker faster. Also adds more version support.
### New
- Pick the exact variant.** A farmer's suspicious stew shows one card per effect, and a leatherworker's dyed leather shows one card per colour. (#14)
- Trades appear in the order you pick them.** Selected cards are numbered 1, 2, and so on, and the villager lists the trades in that order. (#23)
### Changed
- Faster picker.** The picker opens and confirms with less work per click. Settings save once, when you close the config screen. (#20)
- Translatable screens.** The picker, the Reset button and the reset confirmation use translation keys. Enchantment and effect names come from Minecraft itself, so they are localised and modded ones display correctly. Professions show as "Farmer" rather than "FARMER". Tipped arrows show potency and duration, for example "Strength II (0:11)". (#21)
- Picker screen polish.** Your selections, search text and scroll position survive a window or GUI-scale change. Search matches trade contents only, not the annotation text. (#18)
### Fixed
- Correct enchanted-book labels with datapacks.** Librarians from datapack trade sets now show the enchantment you will actually get. (#16)
- Book prices.** A picked enchanted book costs what its card showed, including single-level books such as Mending and Silk Touch. (#15)
- Vanilla refusals.** As in vanilla, you can't trade with a sleeping or dying villager, or with one another player is already trading with. (#10)
- Esc on the reset confirmation** goes back to the trade screen.
- Walking away mid-pick** now shows a message saying your picks weren't applied.
- Server-side checks.** The server validates every pick a client sends and rejects modified or out-of-range requests. (#9)
Fabric builds require Fabric API. Install the same version on both client and server.
Adds picks for stew effects and dye colours, keeps trades in the order you choose them, and makes the picker faster. Also adds more version support.
### New
- Pick the exact variant.** A farmer's suspicious stew shows one card per effect, and a leatherworker's dyed leather shows one card per colour. (#14)
- Trades appear in the order you pick them.** Selected cards are numbered 1, 2, and so on, and the villager lists the trades in that order. (#23)
### Changed
- Faster picker.** The picker opens and confirms with less work per click. Settings save once, when you close the config screen. (#20)
- Translatable screens.** The picker, the Reset button and the reset confirmation use translation keys. Enchantment and effect names come from Minecraft itself, so they are localised and modded ones display correctly. Professions show as "Farmer" rather than "FARMER". Tipped arrows show potency and duration, for example "Strength II (0:11)". (#21)
- Picker screen polish.** Your selections, search text and scroll position survive a window or GUI-scale change. Search matches trade contents only, not the annotation text. (#18)
### Fixed
- Correct enchanted-book labels with datapacks.** Librarians from datapack trade sets now show the enchantment you will actually get. (#16)
- Book prices.** A picked enchanted book costs what its card showed, including single-level books such as Mending and Silk Touch. (#15)
- Vanilla refusals.** As in vanilla, you can't trade with a sleeping or dying villager, or with one another player is already trading with. (#10)
- Esc on the reset confirmation** goes back to the trade screen.
- Walking away mid-pick** now shows a message saying your picks weren't applied.
- Server-side checks.** The server validates every pick a client sends and rejects modified or out-of-range requests. (#9)
Fabric builds require Fabric API. Install the same version on both client and server.
Adds picks for stew effects and dye colours, keeps trades in the order you choose them, and makes the picker faster. Also adds more version support.
### New
- Pick the exact variant.** A farmer's suspicious stew shows one card per effect, and a leatherworker's dyed leather shows one card per colour. (#14)
- Trades appear in the order you pick them.** Selected cards are numbered 1, 2, and so on, and the villager lists the trades in that order. (#23)
### Changed
- Faster picker.** The picker opens and confirms with less work per click. Settings save once, when you close the config screen. (#20)
- Translatable screens.** The picker, the Reset button and the reset confirmation use translation keys. Enchantment and effect names come from Minecraft itself, so they are localised and modded ones display correctly. Professions show as "Farmer" rather than "FARMER". Tipped arrows show potency and duration, for example "Strength II (0:11)". (#21)
- Picker screen polish.** Your selections, search text and scroll position survive a window or GUI-scale change. Search matches trade contents only, not the annotation text. (#18)
### Fixed
- Correct enchanted-book labels with datapacks.** Librarians from datapack trade sets now show the enchantment you will actually get. (#16)
- Book prices.** A picked enchanted book costs what its card showed, including single-level books such as Mending and Silk Touch. (#15)
- Vanilla refusals.** As in vanilla, you can't trade with a sleeping or dying villager, or with one another player is already trading with. (#10)
- Esc on the reset confirmation** goes back to the trade screen.
- Walking away mid-pick** now shows a message saying your picks weren't applied.
- Server-side checks.** The server validates every pick a client sends and rejects modified or out-of-range requests. (#9)
Fabric builds require Fabric API. Install the same version on both client and server.
Adds Minecraft 26.3. Villagers now take a new rank only after you've picked its trades.
### Fixed
- Name tags and spawn eggs work on villagers again.** Right-clicking a villager with a named name tag names it, and using a villager spawn egg on it spawns a baby, as in vanilla.
- No black flash when a screen opens.** The picker and the trade screen open straight over the world. Confirming your picks goes directly to the next screen without dropping back to the world first.
### If you played 1.5.0 (#25)
1.5.0 could leave a villager one rank short for good. A rank with nothing to choose, such as the librarian's Master rank, was filled in automatically but never granted. 1.5.1 grants those ranks. A villager that 1.5.0 already left stuck gets its rank the next time you right-click it, with no picker and no lost trades.
Adds Minecraft 26.3. Villagers now take a new rank only after you've picked its trades.
### Fixed
- Name tags and spawn eggs work on villagers again.** Right-clicking a villager with a named name tag names it, and using a villager spawn egg on it spawns a baby, as in vanilla.
- No black flash when a screen opens.** The picker and the trade screen open straight over the world. Confirming your picks goes directly to the next screen without dropping back to the world first.
### If you played 1.5.0 (#25)
1.5.0 could leave a villager one rank short for good. A rank with nothing to choose, such as the librarian's Master rank, was filled in automatically but never granted. 1.5.1 grants those ranks. A villager that 1.5.0 already left stuck gets its rank the next time you right-click it, with no picker and no lost trades.
Adds Minecraft 26.3. Villagers now take a new rank only after you've picked its trades.
### Fixed
- Name tags and spawn eggs work on villagers again.** Right-clicking a villager with a named name tag names it, and using a villager spawn egg on it spawns a baby, as in vanilla.
- No black flash when a screen opens.** The picker and the trade screen open straight over the world. Confirming your picks goes directly to the next screen without dropping back to the world first.
### If you played 1.5.0 (#25)
1.5.0 could leave a villager one rank short for good. A rank with nothing to choose, such as the librarian's Master rank, was filled in automatically but never granted. 1.5.1 grants those ranks. A villager that 1.5.0 already left stuck gets its rank the next time you right-click it, with no picker and no lost trades.
Cured villagers keep the trades you picked. Curing a zombie villager replaces it with a new entity behind the scenes, which detached it from your picks. The villager came back selling trades you never chose, and the picker never opened for it again. Your picks and your claim now follow a villager through the whole zombify-and-cure round trip.
- Reputation discounts actually reach the trade screen. Discounts from curing a villager, and from Hero of the Village, were being applied and then wiped a moment before the screen opened, so you saw the full price every time. They now show correctly on every open.
- Villagers keep their picks through a Nether portal. (#12) Profiles were stored per dimension, so a villager carried through a portal read as unclaimed on the far side and could be re-picked or reset by anyone. Profiles are now stored once for the whole world, and profiles saved by older versions are folded into the shared store automatically.
- Trade use-counts no longer roll back after a reload. (#11) Trades a villager already had before you installed the mod could reset their use counts when the world reloaded, restocking them early.
- One unreadable profile no longer takes the rest down with it. (#13) A single malformed entry stopped every villager profile in the world from loading. Bad entries are now skipped one at a time.
- Cost scaling applies to tipped-arrow trades. (#17) The fletcher's tipped-arrow trades ignored the cost-scaling setting.
### Quality-of-life update for the trade picker, based on player feedback.
- Already-picked trades are marked. Trades a villager already sells now show a green check mark and a tooltip note, so you never have to remember which trades you chose at earlier levels.
- New setting:* Hide Already-Picked Trades. Turn it on to remove those trades from the picker entirely ā you only ever see trades you don't have yet. Off by default. Found in the mod settings via ModMenu.
- Sorted picker. Trades are now sorted by type: regular trades first, then enchanted books and enchanted gear grouped alphabetically by enchantment and level. No more hunting through the list.
Available for Minecraft 26.2 and 1.21.9ā1.21.11 (Fabric). Requires Fabric API. Install the same version on client and server.
### Quality-of-life update for the trade picker, based on player feedback.
- Already-picked trades are marked. Trades a villager already sells now show a green check mark and a tooltip note, so you never have to remember which trades you chose at earlier levels.
- New setting:* Hide Already-Picked Trades. Turn it on to remove those trades from the picker entirely ā you only ever see trades you don't have yet. Off by default. Found in the mod settings via ModMenu.
- Sorted picker. Trades are now sorted by type: regular trades first, then enchanted books and enchanted gear grouped alphabetically by enchantment and level. No more hunting through the list.
Available for Minecraft 26.2 and 1.21.9ā1.21.11 (Fabric). Requires Fabric API. Install the same version on client and server.
### Quality-of-life update for the trade picker, based on player feedback.
- Already-picked trades are marked. Trades a villager already sells now show a green check mark and a tooltip note, so you never have to remember which trades you chose at earlier levels.
- New setting:* Hide Already-Picked Trades. Turn it on to remove those trades from the picker entirely ā you only ever see trades you don't have yet. Off by default. Found in the mod settings via ModMenu.
- Sorted picker. Trades are now sorted by type: regular trades first, then enchanted books and enchanted gear grouped alphabetically by enchantment and level. No more hunting through the list.
Available for Minecraft 26.2 and 1.21.9ā1.21.11 (Fabric). Requires Fabric API. Install the same version on client and server.
- Minecraft 26.1.x (Fabric):**
tradeoptimizer-fabric-1.3.0+mc26.1.jarā covers 26.1 through 26.1.x. Same 1.3.0 feature set: Fixes bug: enchanted gear (weapons, armor, tools, bows, rods) and tipped arrows now expand into choosable cards in the picker, instead of letting vanilla roll them.
## What's new
- Weaponsmith / Armorer / Toolsmith / Fletcher / Fisherman** ā pick the enchantment on the item they sell.
- Fletcher tipped arrows** ā pick the potion (e.g. Arrow of Weakness).
- Two modes:** Headline (default ā pick the main enchantment; the game still rolls its level and any bonus enchantments) or Single (pick the exact enchantment and level). Switchable in ModMenu (Fabric) or
config/tradeoptimizer.json. - Optional per-profession cost scaling** ā make rarer/higher enchantments cost more emeralds; off by default.
- Everything stays within what that villager could roll in vanilla ā no enchantments or levels it couldn't normally offer.
What's new
- Weaponsmith / Armorer / Toolsmith / Fletcher / Fisherman** --- pick the enchantment on the item they sell.
- Fletcher tipped arrows** --- pick the potion (e.g. Arrow of Weakness).
- Two modes:** Headline (default --- pick the main enchantment; the game still rolls its level and any bonus enchantments) or Single (pick the exact enchantment and level). Switchable in ModMenu (Fabric) or
config/tradeoptimizer.json. - Optional per-profession cost scaling** --- make rarer/higher enchantments cost more emeralds; off by default.
- Everything stays within what that villager could roll in vanilla --- no enchantments or levels it couldn't normally offer.
Notes
- Fabric + NeoForge, Minecraft 26.2. Worlds carry over between loaders.
- No new items, blocks, or recipes.
What's new
- Weaponsmith / Armorer / Toolsmith / Fletcher / Fisherman** --- pick the enchantment on the item they sell.
- Fletcher tipped arrows** --- pick the potion (e.g. Arrow of Weakness).
- Two modes:** Headline (default --- pick the main enchantment; the game still rolls its level and any bonus enchantments) or Single (pick the exact enchantment and level). Switchable in ModMenu (Fabric) or
config/tradeoptimizer.json. - Optional per-profession cost scaling** --- make rarer/higher enchantments cost more emeralds; off by default.
- Everything stays within what that villager could roll in vanilla --- no enchantments or levels it couldn't normally offer.
Notes
- Fabric + NeoForge, Minecraft 26.2. Worlds carry over between loaders.
- No new items, blocks, or recipes.
Updated for Minecraft 26.2.
### New
- Vanilla book limits (optional, off by default).** Caps a librarian's enchanted-book picks per level to vanilla's actual book-trade count, pushing your remaining picks onto that level's non-book trades ā for players who want a more vanilla-flavoured librarian economy. Toggle it in the config screen (ModMenu) or
config/tradeoptimizer.json.
### Fixes
- The trade screen no longer briefly flashes closed the first time you reopen a villager right after resetting its trades.
- The book-limit label no longer reads "(max 0 book)" on professions that don't sell books.
Requires Minecraft 26.2 and Java 25.
Updated for Minecraft 26.2.
### New
- Vanilla book limits (optional, off by default).** Caps a librarian's enchanted-book picks per level to vanilla's actual book-trade count, pushing your remaining picks onto that level's non-book trades ā for players who want a more vanilla-flavoured librarian economy. Toggle it in the config screen (ModMenu) or
config/tradeoptimizer.json.
### Fixes
- The trade screen no longer briefly flashes closed the first time you reopen a villager right after resetting its trades.
- The book-limit label no longer reads "(max 0 book)" on professions that don't sell books.
Requires Minecraft 26.2 and Java 25.
### Worlds carry over between loaders
- The mod id, package name, and SavedData keys are identical across both loaders, so a world's villager picks transfer between Fabric and NeoForge unchanged. Drop the jar in either loader and pick up where you left off.
### Restock exploit fixed
- Picking new trades on a level-up no longer silently restocks previously-used lower-level trades. Use-counts now carry over across the offer rebuild, so a maxed-out trade stays maxed until a normal restock refills it.
- Synthetic book keys for librarian picks are now written in a level-first lowercase form (book/<level>/<namespace>/<path>) for stricter Identifier compatibility. The previous uppercase-L form is still read on load for save compatibility.
### Worlds carry over between loaders
- The mod id, package name, and SavedData keys are identical across both loaders, so a world's villager picks transfer between Fabric and NeoForge unchanged. Drop the jar in either loader and pick up where you left off.
### Restock exploit fixed
- Picking new trades on a level-up no longer silently restocks previously-used lower-level trades. Use-counts now carry over across the offer rebuild, so a maxed-out trade stays maxed until a normal restock refills it.
### Book-key migration
- Synthetic book keys for librarian picks are now written in a level-first lowercase form (book/<level>/<namespace>/<path>) for stricter Identifier compatibility. The previous uppercase-L form is still read on load for save compatibility.
- Enchantment display fix ā single-level enchantments (Mending, Silk Touch, Infinity, Channeling, etc.) no longer show a redundant "I" numeral, matching vanilla's display conventions
- Vanilla pricing toggle ā new config/tradeoptimizer.json with a vanillaPricing option. Off by default (keeps the mod's lowest-price behavior). Enable it to use vanilla's randomized price range
- ModMenu integration ā config screen accessible from the ModMenu mods list if ModMenu is installed (soft optional, not required)
- Mod icon fix ā icon is now the correct 256Ć256 format and displays properly in ModMenu
- Picker opens first for fresh villagers ā Right-clicking a villager who just got their profession now opens the picker immediately. The old behaviour imported their random starter trades and made you hit Reset first before choosing. Villagers you've already traded with are unaffected.
- Restocking now works correctly ā Picked trades were restocking instantly every time you reopened the merchant screen, bypassing vanilla's restock cooldown entirely. Fixed ā the villager now has to sleep and return to their workstation to restock, same as vanilla.
- Reset button hidden on Wandering Traders ā The button was appearing on the Wandering Trader screen and could accidentally target a villager you'd visited just before. It now only shows on real villagers.
### Other fixes:
- Enchanted-book trades from mods with / in their enchantment IDs were being silently dropped ā fixed
- Villagers whose levels don't have exactly 2 trades (modded trade pools, or vanilla edge cases like a toolsmith's master level) had trades filed at the wrong level or lost entirely ā fixed
- Server-only install: players without the mod now fall back to vanilla trading with a one-time explanation instead of silent failure
- Safe to update mid-world ā all existing picks carry over.
- Packet DoS guard: cap pick count (ā¤64) and trade list size (ā¤4096)
- Server-side pick validation: re-enumerate real trade pool on submit;
current level ā closes cross-profession trade laundering
- Villager ownership: first player to right-click claims the villager;
reloads and profession changes; backward-compatible with 1.0.3 saves
- Librarian book trades no longer vanish when the villager reaches master level.** Previously, re-applying trades on a villager at master level (which sells candles, not books) caused all earlier enchanted-book picks to silently fail and drop out of the trade menu. The bookshelf and candle trades were unaffected.
- No reset needed** --- existing villager picks are intact. Affected librarians will self-heal and show all their book trades again on the next right-click.
Also includes the v1.0.2 fix: villager levels with only 1 or 2 possible trades (e.g. toolsmith master = diamond pickaxe only) now auto-progress without requiring the picker.
- No save data changes** --- existing worlds carry over without any reset.
- Reputation discounts now apply correctly.** Prices from curing a zombie villager or having Hero of the Village were never being applied to picked trades in v1.0.0. They now work exactly as vanilla intends.
Also fixes the mod icon showing in ModMenu and the mod list.
- No save data changes** --- existing worlds and villager picks carry over without any reset.