All Mods Resource Packs Data Packs Shaders Modpacks Plugins
Shifting Wares

Shifting Wares

by Estecka • Downloads: 0 • Followers: 0
Description
Gallery
Changelog
Versions

Shifting Wares

Causes villager to re-roll their trade offers on their own accord, up to three times a day. This effect will be most noticeable on professions who can sell enchanted or coloured items; a single one of these villagers will be able to offer a much greater variety of wares over time.

This aims to reduce the benefits of exploitative playstyle, while making serendipitous playstyles more viable. Villagers with perfect trades will not keep those trades forever, and villagers with bad trades will get better eventually. Even though a single villager can potentially provide everything you need, having multiple villagers of the same profession is still useful to increase the odds of getting a specific trade.

Because all trades eventually expire, villagers become much easier to replace if they die, so you don't need to care as much about their safety. You can let them roam around freely with little risk to your economy.

Reroll Triggers

There are two gamerules that control when trades can be re-rolled. Both are enabled by default. Disabling all rules effectively disables the mod.

  • shifting-wares:daily_reroll : Causes villagers to re-roll all their offers once per day, the first time they restock at their job station.
  • shifting-wares:deplete_reroll : Causes villagers to re-roll any fully depleted trade offer, whenever they restock at their job station. This also prevents offers from being refilled, if they have a remaining uses.

Exploration Maps and Persitent trades

Minecraft permanently saves all created maps, and lock their structures from appearing on other exploration maps. To prevent daily rerolls from throwing away endless amounts of unsold maps, these trades are treated as persistent.

Persistent trades can only be rerolled if they have been used at least once, and if the gamerule shifting-wares:allow_persistent_reroll is enabled. This gamerule is disabled by default.

Datapacks can mark any trade as persistent by adding this field to the trade:

{
    "shiftingwares:isPersistent": true,
    "wants": "...",
    "gives": "...",
    "...": "..."
}

Any trade that sells a filled map will be forcibly marked as persistent, regardless of how it is configured. "Filled maps" are identified by the presence of a map_id component.

Workstation protection

Breaking and replacing a villager's workstation no longer forces the villager to reroll its trades. The initial trades are generated deterministically, using the villager's UUID as the seed.

This is controlled by the gamerule shifting-wares:workstation_protection.

Miscellani technical details

  • If a villager is unable to generate a trade for a slot, it will be replaced with an empty trade. In vanilla, this should only ever happen to cartographers, who are unable to generate explorer maps in worlds with no structures.
    These empty paddings are required to ensure trades are rerolled with ones of equivalent level, because a trade's position in the list is the only indication to its level. Placeholder trades will never take the place of a valid trade; they will only show up if all other options are exhausted.

  • As a side effect of this mod, the "Demand Bonus" mechanic has its effect greatly diminished, because the demand bonus data is deleted along with the offers that are rerolled.

  • In MC 1.21.11 and prior, Depleted Rerolls have a fair chance of creating duplicate offers, because Minecraft had no reliable way of identifying trades.

For developpers (MC 1.21.11 and prior)

By default, shifting-Wares assumes 2 trades per level, and pulls its trade pools from the same place as Vanilla. Other mods can override this by using the shifting-wares entry-point, and implementing ITradeLayoutProvider.

If your mod contains custom implementation of map trade factories, or produces other items attached with permanent data, you can communicate to Shifting-Wares that they should be persistent, by implementing the same methods defined in IShiftingTradeFactory.

Related Mods

VillagerConfig Addon

Compatibility Addon to use trades defined in VillagerConfig.

Gamerule Menu

Makes the Gamerule menu accessible from singleplayer worlds

All Versions

+ Add Version
Name Game version Platforms Published Downloads Actions
26.3
Fabric
18h ago 1
26.2
Fabric
18h ago 1
26.1.x
Fabric
18h ago 1
1.21.11
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.11
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.21.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x 1.19.4
Fabric
18h ago 1
1.21
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x 1.19.4
Fabric
18h ago 1
1.20.x 1.19.4
Fabric
18h ago 1
1.20.x 1.19.4
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x 1.19.4
Fabric
18h ago 1
1.19.4
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
1.20.x
Fabric
18h ago 1
[4.0.0+26.3] v4.0.0+26.3 by Estecka on Oct 15, 2026
Download
  • Port to MC 26.3
[4.0.0+26.2] v4.0.0+26.2 by Estecka on Oct 15, 2026
Download
  • Port to MC 26.2

(Would you believe it if I said I brought this upon myself by reporting a bug to Mojang, which they actually fixed ?)
  • Ported to MC 26.1
  • Removed the java API.
  • Renamed rule allow_map_reroll to allow_persistent_reroll.
  • Arbitrary trades can be marked as persistent in datapacks.
  • Duplicate trades are now unlikely to happen, thanks to vanilla now including IDs for every trade.
  • Fixed Map Reroll rule being inverted.
  • Fixed Map Reroll rule being inverted.
  • Ported to MC 1.21.11
  • Renamed gamerules to be valid identifiers.

Gamerules *should* be migrated automatically when upgrading an older world. This is handled by the mod, not by minecraft.
  • Marked branch as incompatible with MC 1.21.11
  • Ported to MC 1.21.9, marked previous branch as incompatible.
  • Ported to MC 1.21.9, marked previous branch as incompatible.
  • Backported v3 to MC 1.20
  • Ported to MC 1.21.5, marked previous branch as incompatible.
  • Ported to MC 1.21.5, marked previous branch as incompatible.
  • Added a gamerule that prevents forced rerolls when breaking a villager's workstation.
Removed the map cache and its surrounding mechanics. Older maps will no longer be resold, in the sense that they will no longer be unlisted at all, unless they meet the conditions to be fully discarded.
  • Fixes [#11](https://github.com/Estecka/mc-Shifting-Wares/issues/11)
  • Improves native compatibility with other mods. Custom implementations of map trades will no longer cause unsold maps to be discarded.
  • Other mods can now more easily communicate data for other kinds of persistent items, without requiring a dependency on Shifting-Wares.


⚠ **Upgrading a world from v2 will cause all cached maps to be discarded, even if they were never sold.**
  • Ported to MC 1.21.2, marked previous branch as incompatible.
  • (+1.21.3) Placeholder trades are back to looking empty, thanks to item_model components.
[2.2.3+1.21] v2.2.3+1.21 by Estecka on Oct 15, 2026
Download
  • Ported to MC 1.21.2, marked previous branch as incompatible.
  • (+1.21.3) Placeholder trades are back to looking empty, thanks to item_model components.
[2.2.2+1.21] v2.2.2+1.21 by Estecka on Oct 15, 2026
Download
  • Trade cache serialization can no longer be attempted on the render thread.
  • In singleplayer, this will improve performances when using Fresh Animations** and some other ETF/EMF-dependent resource packs.

  • Trade cache serialization can no longer be attempted on the render thread.
  • In singleplayer, this will improve performances when using Fresh Animations** and some other ETF/EMF-dependent resource packs.

  • Trade cache serialization can no longer be attempted on the render thread.
  • In singleplayer, this will improve performances when using Fresh Animations** and some other ETF/EMF-dependent resource packs.

[2.2.1+1.21] v2.2.1+1.21 by Estecka on Oct 15, 2026
Download
  • Ported to MC1.21, marked previous build as incompatible.

Previous versions of the mod are also affected.
  • Ported to MC1.21, marked previous build as incompatible.

Previous versions of the mod are also affected.
Ported to 1.20.5:
  • Map trades caching will prioritize the item_name over the custom_name if both components are present.
  • Placeholder trades now display an emerald on each sides, since Minecraft no longer supports empty trades. (The change is purely cosmetic, placeholders still cannot be used.)

### Upgrading an older world to 1.20.5
No particular actions should be required, but **the upgrade process is partially handled by the mod,** please make backups and report any oddities you may find.

The mod needs to upgrade exploration maps from the trade caches. Potential issues to look out for are: trade maps loosing their content, their name, or not being stackable with previously sold maps.

If a villager had an empty placeholder trade, Minecraft will simply delete that trade. This shouldn't cause any long term issue; the villager's trade list will naturally fix itself upon rerolling.
  • Fixed a crash that would occur upon restocking if Depleted Rerolls are disabled. (Regression introduced in v1.1)
  • Marked this build as incompatible with 1.20.5
  • Re-implemented Trade-Rebalance support in a backward-compatible way**. This lets the same jar be compatible with versions of Minecraft that don't have this feature.
  • Added an API that will be used to add compatibility with other mods.** In particular, this is used by the VillagerConfig addon.

  • Added a gamerule that allows cartographers to generate new maps**, but only if the previous one has been sold at least once. (Disabled by default)
  • Added a gamerule that allows cartographers to generate new maps**, but only if the previous one has been sold at least once. (Disabled by default)
  • Trade level per slots is evaluated more accurately for each job.**
The old 2-2-2-2-1 layout is no longer blindly applied to everyone; some specific jobs (e.g, fisherman and farmer) did not actually respect this layout, and some of their trades would not reroll properly.
  • Added support for rebalanced trade pools.** (+1.20.2 branch only)
The +1.20 branch is still compatible with all MC 1.20.x on every other aspect.
  • Trade level per slots is evaluated more accurately for each job.**
The old 2-2-2-2-1 layout is no longer blindly applied to everyone; some specific jobs (e.g, fisherman and farmer) did not actually respect this layout, and some of their trades would not reroll properly.
  • Added support for rebalanced trade pools.** (+1.20.2 branch only)
The +1.20 branch is still compatible with all MC 1.20.x on every other aspect.
  • Trade level per slots is evaluated more accurately for each job.**
The old 2-2-2-2-1 layout is no longer blindly applied to everyone; some specific jobs (e.g, fisherman and farmer) did not actually respect this layout, and some of their trades would not reroll properly.
  • Added support for rebalanced trade pools.** (+1.20.2 branch only)
The +1.20 branch is still compatible with all MC 1.20.x on every other aspect.
Shifting Wares Icon
Download Shifting Wares
Select game version
Select platform