Shifting Wares

Shifting Wares

Mod

Villagers will occasionally reroll their trade offers

Server EconomyGame Mechanics

15.1k downloads
41 followers
Follow Save
Host your Minecraft server on BisectHosting - get 25% off your first month with code MODRINTH.

Shifting Wares

Causes villager to occasionally re-roll their trade offers, making them more flexible and less exploitable.

The most noticeable effects will be felt on any profession able to sell enchanted items; a single of these villager will be able to offer a much greater variety of wares over time.

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.

  • shiftingWares.dailyReroll: Causes villagers to re-roll all their offers once per day, the first time they restock at their job station.
  • shiftingWares.depleteReroll: 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 map trades

Minecraft permanently saves any created map, and lock their structures from appearing on other exploration maps. To prevent daily rerolls from throwing away endless amounts of unsold maps, those trades are handled differently.

Cartographers will remember each map they sell, and offer it again it the next time the same map trade comes up. The gamerule shiftingWares.allowMapReroll (disabled by default) will allow them to forget a map, after it has been sold at least once.

The map's item name, (or preferably, its translation key), is used to tell apart different types of maps. Since 1.20.5, the item_name is preferred over the custom_name.

Technical details

  • This mod runs under the assumption that villagers have up to 2 trades per level. If other mods want to change that, they'll need to depend on Shifting-Wares in order to communicate the changes. (See the Villager-Config addon for an example)

  • If a villager is unable to generate all registered trades for a level, missing ones will be replace with a placeholders, which cannot be used. With the vanilla trade pool, this should only ever happen to cartographers, who are unable to generate explorer maps in worlds with no structures.
    These paddings are required to ensure all 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.

  • The "Demand Bonus" game mechanic is mostly removed, because the demand bonus data is deleted along with the offers that are rerolled. Any effect it may still have is uncertain.

  • Depleted rerolls have a chance to yield duplicate trades.

Upgrading an older world to 1.20.5

Maps from trade caches should be properly preserved upon loading a villager. The upgrade process is partially handled by the mod, please report any oddities you may find.

If a villager had an old version of the placeholder trade, Minecraft will simply delete that trade. This shouldn't cause any issue; the villager's trade list will naturally fix itself upon rerolling.

Related Mods

VillagerConfig Addon

Compatibility Addon to use trades defined in VillagerConfig.

Gamerule Menu

Makes the Gamerule menu accessible from singleplayer worlds


Project members

Estecka

Author

Details

Licensed AGPL-3.0-only
Published a year ago
Updated 3 months ago