ShopGUIPlus, Dynamic Pricing Setup
Configure ShopGUIPlus dynamic pricing with supply and demand curves, decay periods, price caps, and per-item overrides for a balanced server economy.
What Is Dynamic Pricing?
Shopguiplus dynamic pricing adjusts buy and sell values based on how much of an item has been traded recently. When players flood the server shop with cobblestone, the sell price drops. When everyone buys diamonds, the buy price rises. This simulates a real market without you manually tweaking prices every week.
Static prices create exploitable loops: if cobblestone always sells for 1 coin and stone always buys for 0.5, a player with a silk touch pickaxe can print infinite money by cycling between the two. Shopguiplus dynamic pricing breaks these loops naturally because the prices converge as trade volume increases.
Enabling Dynamic Pricing
Open plugins/ShopGUIPlus/config.yml and enable the system:
dynamicPricing:
enabled: true
provider: INTERNAL
decayEnabled: true
decayPeriod: 24
decayRate: 0.5
The provider setting controls which engine calculates prices. INTERNAL uses ShopGUI+'s built-in algorithm. You can also use external providers like DynamicShop if you want more granular control, but the internal engine works well for most servers.
Understanding Decay
Decay controls how quickly prices return to their base values. With a 24-hour decay period and a 0.5 decay rate, prices lose half their deviation from the base every 24 hours. This means a price spike from heavy buying on Saturday is mostly normalized by Monday. Shorter decay periods (12 hours) suit active servers where the economy moves fast. Longer periods (48 hours) work for smaller communities where you want price changes to feel lasting.
Setting Per-Item Price Caps
Without caps, shopguiplus dynamic pricing can push items to extreme values. A diamond that normally costs 500 could spike to 5000 if twenty players buy it in an hour. Set min and max bounds in your shop files:
1:
material: DIAMOND
buyPrice: 500
sellPrice: 100
dynamicPricing:
enabled: true
minBuyPrice: 300
maxBuyPrice: 1000
minSellPrice: 50
maxSellPrice: 200
The caps keep prices within a sane range while still allowing meaningful fluctuation. Set your max buy price at roughly 2x the base and min sell price at 0.5x the base as a starting point. Adjust after observing a week of live trading data.
Which Items Should Use Dynamic Pricing?
Not every item benefits from price fluctuation. We recommend this strategy:
| Item Type | Dynamic Pricing | Reasoning |
|---|---|---|
| Raw materials (ores, logs, stone) | Yes | High trade volume, prices should respond to supply |
| Mob drops (gunpowder, bones) | Yes | Farm output varies, dynamic pricing prevents oversaturation |
| Tools and armor | No | Low volume, price swings feel random and unfair |
| Rare items (elytra, tridents) | No | Too few transactions for meaningful price discovery |
| Custom items (Oraxen) | Optional | Depends on how many you expect to circulate |
Monitoring Price Changes
ShopGUI+ logs price adjustments in its data files. You can also display current prices on scoreboards or holograms using PlaceholderAPI expansions provided by ShopGUI+. Some server owners build a "stock market board" at spawn showing live prices for key commodities, which creates engagement and gives players a reason to check the shop regularly.
Review your shopguiplus dynamic pricing data weekly. If an item's price has been pegged at its minimum sell price for days, players are dumping it faster than demand absorbs. Either raise the min cap or reduce the item's drop rate through gameplay changes.
Dynamic Pricing and Your Economy
Dynamic pricing works best as part of a broader economy strategy. Pair it with ChestShop player markets, where players undercut the admin shop when dynamic prices are high, creating natural competition. Use Vault tax settings to skim a percentage off every dynamic transaction as an inflation sink. The result is a living economy that balances itself with minimal admin intervention.
See these configs live: Astroworld MC, IP play.astroworldmc.com, Java + Bedrock.