
UltimateShop
Build your own shop rules with flexible products, prices, conditions, actions, and dynamic menus.
UltimateShop is a highly configurable shop and trading framework for Spigot and Paper. Configure what appears in a shop, who can trade, what players pay and receive, how prices and stock change, and when offers refresh. Each part can follow its own rules and work together with the others.
Use conditions, placeholders, formulas, actions, and reset schedules across supported settings to connect your shop to player progress, server events, custom items, and existing economy plugins. A daily random shop, seasonal market, or reward menu is one example of these features working together. You can combine the same features differently, or layer several behaviors into one shop.


Features
Features marked Premium require UltimateShop Premium. Some integrations also require the corresponding third-party plugin.
Build Shops Around Your Own Rules
The shop's selection, transactions, availability, and refresh behavior are configured separately. Combine the supported rules at the menu, product, price, and reward levels to create your own trading experience.
- Decide what appears: Use configured products and display rules to shape the selection. Premium adds dynamic layouts, conditional product selection, and random placeholders: switch products according to conditions, choose weighted offers from a pool, or roll selections separately for each player.
- Decide what changes hands: Combine items, currencies, costs, rewards, and commands in a transaction. Conditions can change which entries apply, allowing the same offer to include different payments or rewards for eligible players.
- Decide who can trade and when: Check permissions, worlds, biomes, or placeholder values, then apply personal and global limits or cooldowns. Values exposed by other plugins can connect trading to levels, quests, seasons, dates, or event states.
- Decide how the shop evolves: Use formulas and transaction data to change prices, quantities, and available stock. Schedule usage resets independently. Premium random placeholders can also refresh product selections and values on a schedule, with product usage resets linked to the same cycle.
- Decide what happens around a trade: Configure menu and transaction actions, success or failure feedback, display information, and navigation. Connect purchases to services or rewards delivered by your other plugins.
For example: With Premium, random placeholders can select 5 daily offers from a larger pool, while conditional product selection can change what appears according to a season value supplied by another plugin. Those offers can also have rank-based rewards, alternative payments, limited stock, and prices that respond to trading activity. Each of these rules can be used independently or combined with the others.
The same building blocks can produce rotating merchants, seasonal offers, progression-based exchanges, player-supplied markets, daily rewards, one-time claims, or command-based services. These examples illustrate possible configurations; your shop's behavior comes from the rules you choose and how you combine them.
Flexible Products & Payment Methods
- Configure what players pay and what they receive independently. Both sides can include items, money, points, EXP, or levels, with separate buying and selling settings.
- Combine multiple costs or rewards in one transaction. For example, charge 500 points and 64 diamonds for a custom sword, then run a command to grant an additional reward.
- Use ALL mode to require or deliver every applicable entry, or ANY mode to let the system select a valid option. Offer money or points as alternative payment methods without creating separate products.
- Apply different prices or rewards at specific transaction counts, and add requirements to individual entries. Create introductory offers, milestone rewards, or progressively more expensive purchases.
- Build command shops and free reward entries, and reuse named price definitions to simplify common pricing settings.
- Premium: Connect other numeric resources through placeholders and give/take actions, even when no direct economy hook is available.
Dynamic Markets & Item-Based Sell Prices
- Calculate prices and product amounts with math expressions, PlaceholderAPI values, and player or server transaction counts. Make popular products more expensive or lower their sell price as more players supply them.
- Choose simple fixed-price calculations or calculate successive trades individually, so a bulk purchase can follow your changing price rules.
- Set minimum and maximum amounts to keep calculated prices within your intended range.
- Price Modifier (experimental): Adjust sell rewards using the actual item being sold, with price preview and confirmation through an Item Sell Menu. Reduce the value of damaged equipment, read numbers from Lore or NBT, or apply MythicChanger matching rules. Some modifier types require additional plugins.
- Premium: Show whether a dynamic price is above, below, or equal to its base price, and use additional lifetime-count and transaction-time data in your formulas.
Personal Limits, Global Stock & Cooldowns
- Set personal and server-wide buying and selling limits independently. Control how much each player can trade and how much the entire server can purchase or supply.
- Configure personal and global cooldowns for both buying and selling, alongside your transaction limits.
- Keep limits permanent, reset them after an interval, or refresh them on a schedule. Build daily allowances, weekly offers, or recurring stock refills.
- Use formulas and placeholders for limits and stock. Combine buy and sell data to create a market where player sales replenish available stock.
- Premium: Share usage data across products, including transaction counts, limits, and reset times. Shared product data is currently an Alpha feature.
- Premium: Use custom reset timestamps and random-placeholder reset schedules for more specialized offers and shop rotations.
Custom Items & Economy Integrations
- Retrieve supported plugin items directly through configuration. Item hooks include ItemsAdder, Oraxen, Nexo, CraftEngine, MMOItems, MythicMobs, EcoItems, EcoArmor, eco, NeigeItems, and ExecutableItems. ItemBridge can provide access to additional item plugins.
- Recognize supported custom items by their plugin identity, allowing them to remain sellable after name, Lore, or enchantment changes, provided their identifying data is preserved.
- Use ItemFormat to build configured items, customize supported item properties, and modify templates retrieved from item plugins. Save held items for later use in shops and menus.
- Choose strict vanilla item comparison or configurable ItemFormat matching. With MythicChanger installed, define more specific matching rules for the items you accept.
- Use Vault, PlayerPoints, CoinsEngine, ExcellentEconomy, UltraEconomy, EcoBits, PEconomy, RedisEconomy, RoyaleEconomy, and VotingPlugin, plus vanilla EXP and levels.
- Premium: Access additional ItemFormat options, including AdvancedEnchantments integration and modern item component settings on supported server versions.
Custom Menus & Convenient Trading
- Design shop menus, navigation menus, and quantity-selection menus with your own layouts, display items, names, Lore, buttons, conditions, and actions. Configure interaction-based or periodic button updates for dynamic information.
- Let players select quantities with Buy More, sell matching inventory items through product Sell All, or use quick-buy, quick-sell, sell-hand, and sell-all-hand commands where permitted.
- Set each product's default buy and sell quantities for direct trading. Make one click buy a stack or sell a configured batch.
- Provide two item-deposit selling workflows: Sell All GUI sells deposited items when the menu closes; Item Sell Menus let players preview the adjusted price and confirm the sale with a button.
- Enable smart item giving to respect stack sizes, reuse inventory space, and check capacity before giving purchased items.
- Premium: Add text or item-based product search, editable favourites, conditional button selection, dynamic layouts, custom menu commands, and GUI title updates. Title updates require PacketEvents.
- Premium: Define custom product click actions and display the same product in multiple slots or menus. Offer separate quantity shortcuts while keeping the underlying product data together.
Java, Bedrock & Graphical Dialog Menus
- Classic inventory menus: Give Java players familiar chest-style shops with configurable item layouts and trading controls.
- Premium — Bedrock Form UI: Generate Bedrock forms from your existing menus through Geyser and Floodgate. Show item icons and price information, with separate Bedrock click behavior for a more suitable interaction flow.
- Premium — Native Dialog UI: Use Minecraft Dialog menus on Paper 1.21.9+ with a compatible Java client. Standard action-button and item-action-list layouts do not require a resource pack.
- Premium — Ore Graphical Menus: Create Dialog shops with custom backgrounds, buttons, product cards, item icons, and navigation. Customize textures and layout templates, then generate the required resource pack with /shop dialogpack. Requires Paper 1.21.9+, a compatible Java client, and the generated resource pack loaded by the client.
- Reuse shop definitions across supported menu presentations, and tailor product descriptions to the interface in which they appear.
Container Selling & Conditional Sell Bonuses
- Premium — Sell Stick: Let players sell eligible contents by clicking a container. Configure usage counts and selling multipliers for different stick types.
- Premium — Sell Chest (experimental): Automatically sell eligible chest contents while the owner is online and the chunk is loaded. Configure usage limits, multipliers, and hologram information. Sell Chest does not support Folia.
- Premium — Shulker Box Selling (Alpha): Enable selling of eligible contents inside shulker boxes through supported selling workflows.
- Premium — Sell Multiplier: Apply conditional bonuses or taxes. Use the highest matching multiplier or multiply matching entries together for VIP bonuses, event boosts, and other sell adjustments.
- Container-selling protection integrations include WorldGuard, Residence, GriefPrevention, Lands, HuskTowns, HuskClaims, PlotSquared, Towny, BentoBox, Dominion, and SuperiorSkyblock2. Sell Chest holograms support DecentHolograms, CMI, and FancyHolograms.
Actions & Conditions for Your Server's Rules
- Control access and trading with permission, world, biome, menu, and placeholder checks. Restrict a shop to a world, require a rank, or connect an offer to progress tracked by another plugin.
- Run actions when menus open or close, buttons are clicked, transactions succeed, or trading fails. Send messages, execute commands, play sounds, teleport players, and open other menus.
- Control which transaction counts trigger an action and whether it runs once for a bulk transaction. Customize feedback for insufficient funds, full inventories, unmet conditions, or reached limits.
- Premium: Combine conditional, delayed, and chance-based actions; compose alternative or inverted conditions; and trigger actions from condition results. Filter actions for Java or Bedrock players when their interactions need to differ.
Dynamic Information & Player Language
- Display prices, quantities, limits, transaction counts, and reset information in product descriptions and messages. Integrate PlaceholderAPI and built-in math, cron, and language placeholders where supported.
- Customize text with legacy colors, hex colors, gradients, and MiniMessage formatting, and control how numbers and prices are presented.
- Premium: Use random and conditional placeholders for rotating offers and contextual text. Store custom values separately for each player or globally; custom placeholder storage is currently a Beta feature.
- Premium: Show reset countdowns and comparison results, display localized vanilla item names, and select language text according to each player's client locale.
- Premium: Deliver language feedback through chat, titles, action bars, boss bars, and sounds. Supported modern Paper versions also offer item sprite display options for Java players.
Management, Storage & Network Features
- Manage saved items, open menus for players, perform quick trades, and adjust product usage data through commands and permissions.
- Store data in YAML or enable SQL storage. Supported SQL dialects include MySQL, H2, PostgreSQL, and SQLite, with automatic saving and asynchronous database operations.
- Premium: Edit shops, products, and menus through the in-game editor.
- Premium: Record transactions in a file or database, including player, product, amount, price, and multiplier information. Logs are buffered and written in batches.
- Premium: Synchronize global product usage updates through BungeeCord plugin messaging with database storage enabled. Check the setup guide when configuring a proxy network.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
|
R
5.0.2
|
1d ago | 1 | |||
|
A
5.0.0.2
|
1d ago | 1 | |||
|
A
5.0.0
|
1d ago | 1 | |||
|
A
5.0.0
|
1d ago | 1 | |||
|
R
4.7.6
|
1d ago | 1 | |||
|
R
4.7.4
|
1d ago | 1 | |||
|
R
4.7.1
|
1d ago | 1 | |||
|
R
4.6.9
|
1d ago | 1 | |||
|
R
4.6.7
|
1d ago | 1 | |||
|
R
4.6.4
|
1d ago | 1 | |||
|
R
4.6.0
|
1d ago | 1 | |||
|
R
4.5.27
|
1d ago | 1 | |||
|
R
4.4.8
|
1d ago | 1 | |||
|
R
4.4.6
|
1d ago | 1 | |||
|
R
4.4.2
|
1d ago | 1 | |||
|
R
4.3.6
|
1d ago | 1 | |||
|
A
4.3.5
|
1d ago | 1 | |||
|
R
4.3.1
|
1d ago | 1 | |||
|
R
4.2.12
|
1d ago | 1 | |||
|
R
4.2.10
|
1d ago | 1 | |||
|
R
4.2.5
|
1d ago | 1 | |||
|
R
4.2.3
|
1d ago | 1 | |||
|
R
4.2.1
|
1d ago | 1 | |||
|
R
4.1.6
|
1d ago | 1 | |||
|
A
4.1.5
|
1d ago | 1 | |||
|
A
4.1.3
|
1d ago | 1 | |||
|
R
4.1.1
|
1d ago | 1 | |||
|
R
4.1.0
|
1d ago | 1 | |||
|
R
4.0.0
|
1d ago | 1 | |||
|
R
3.13.5
|
1d ago | 1 | |||
|
R
3.13.4
|
1d ago | 1 | |||
|
R
3.13.1
|
1d ago | 1 | |||
|
R
3.12.3
|
1d ago | 1 | |||
|
R
3.11.2
|
1d ago | 1 | |||
|
R
3.10.4
|
1d ago | 1 | |||
|
R
3.10.3
|
1d ago | 1 | |||
|
R
3.10.1
|
1d ago | 1 | |||
|
R
3.9.4
|
1d ago | 1 | |||
|
R
3.9.3
|
1d ago | 1 | |||
|
R
3.9.2
|
1d ago | 1 | |||
|
R
3.9.0
|
1d ago | 1 | |||
|
R
3.8.2
|
1d ago | 1 | |||
|
R
3.6.8
|
1d ago | 1 | |||
|
R
3.6.3
|
1d ago | 1 | |||
|
R
3.5.1
|
1d ago | 1 | |||
|
R
3.4.9
|
1d ago | 1 | |||
|
R
3.4.2
|
1d ago | 1 | |||
|
R
3.3.7
|
1d ago | 1 | |||
|
R
3.3.6
|
1d ago | 1 | |||
|
R
3.2.7
|
1d ago | 1 | |||
|
A
3.1.1
|
1d ago | 1 | |||
|
R
2.8.0
|
1d ago | 1 | |||
|
R
2.7.3
|
1d ago | 1 | |||
|
R
2.5.9
|
1d ago | 1 | |||
|
R
2.5.3
|
1d ago | 1 | |||
|
R
2.3.7
|
1d ago | 1 | |||
|
R
2.2.9
|
1d ago | 1 | |||
|
R
2.2.8
|
1d ago | 1 | |||
|
R
2.2.7
|
1d ago | 1 | |||
|
R
2.2.6
|
1d ago | 1 | |||
|
R
2.2.5
|
1d ago | 1 | |||
|
R
2.2.4
|
1d ago | 1 |
- A new Item Price Modifier feature has been added, with four default Item Price Modifiers included. Simply put, you can adjust the price of an item based on its durability, NBT, Lore, and other information. (For example, items with low remaining durability will sell for less, while rarer weapons will sell for more.)
- Slightly optimized the performance of Sell Chest and added a second check in the timer to check whether the block is unloaded.
- Fixed an issue that caused memory leaks in some cases when the GUI circle update feature was enabled, for example, when the GUI failed to open properly due to unmet conditions or config issue.
- The transaction log function has now been changed to a caching mechanism, which writes to the database or file at intervals to avoid writing for every transaction, thus preventing I/O bottlenecks caused by frequent transactions.
- The Use Times Cache system has been optimized to avoid regenerating a new reset task for each transaction (in many cases your new purchase or sale will not affect the next reset time), which can significantly improve Use Times performance in some situations.
- Other small changes and fixes.
- In previous versions, a Reset Pool system was introduced for each product use time reset. Now, this system has been introduced for each Random Placeholder reset. This system can help you merge multiple Reset Tasks with similar times into the same Task to reduce memory usage.
- The configuration file now includes settings for the Reset Pool system, such as the time interval within which resets are automatically placed in the same task and the maximum number of resets per tick. In previous versions, these settings were fixed, but in this version, they can be freely adjusted via the configuration file to meet the needs of various servers.
- Fixed a bug where setting the reset mode to CUSTOM in Random Placeholder would prevent it from ever being reset. To address this, we've added lastResetTime information to the Random Placeholder database.
- Fixed an issue where products without the "buy more" feature enabled would display an error in Dialog Menu mode.
- Other small changes and fixes.
Welcome to UltimateShop v5! This version introduces the following changes:
- Menu types are now separated into their own folders, instead of all being concentrated in the
menusfolder as in previous versions. - A new Item Sell Menu has been added, similar to the previous Sell All Menu, but this menu requires the player to click a confirmation button before selling, and the confirmation button displays the price the player will receive.
- The code related to asynchronous database processing threads has been refactored to prevent data loss due to database connection timeouts.
- Several memory leak issues have been fixed.
- The code related to the reload plugin has been refactored.
- Fixed a bug in the bedrock menu when displaying player heads, etc.
- Fixed an issue where the placeholder sometimes displayed incorrect values.
- Other minor modifications and fixes.
- All plugin configurations now support recursive reading, meaning that if you put the configurations in a folder within a folder, they will be read normally. For users with a large number of shop and menu configurations, you can now place the configurations in subfolders to categorize them for easier management.
- When using the Tab completion command, options that do not match the current input will be automatically excluded. For example, if you have already entered the letter 'a' when entering a shop ID parameter, all shops that do not start with 'a' will not appear in the Tab completion. This is to allow users with a large number of shops and menu configurations to quickly find the desired results by entering only a few letters.
- Fixed an error message that appeared when the plugin read the configuration if only menu-settings was used in the shop configuration without the menu option.
- Fixed some issues related to 26.2 version.
- ItemFormat Update: attribute option and patterns option in ItemFormat now use new format which support multi same pattern type and attribute type in one item, which is more flexible, old format will still work at the moment.
- API Update: Added ShopHelper#startBuy, ShopHelper#startSell, ShopHelper#getVaultBuyPrice, ShopHelper#getVaultSellPrice method.
- Added some mathematical function support. For more info, please view: ➗Math Calculate Format | UltimateShop Wiki
- Added new action: back.
Updated default menu files, some back button use back action now.
- Fixed plugin print error on 26.2 servers.
- Added {display} placeholder support in price placehoder option, can display the item name if the price type is vanilla item or hook item.
- Improved GUI listener codes.
- ItemFormat Update: Fix tool component does not work well in some case.
- Added support for latest Dominion v4 version and drop it's old version support.
- Improved price display placeholder merge rule.
- The maximum purchase and sell quantity per transaction is limited to 9,999 start from this version.
- The loading of player cache has been changed from PlayerLogineEvent to PlayerJoinEvent.
- If the player cache has not completed reading, the plugin will no longer allow any transactions.
- When the server stops, it will be forced to wait for all ongoing asynchronous database tasks to complete before continuing with other work, to avoid player data loss and database errors.
- If a player joins the server but the player cache has not been loaded and quickly leaves the server, the player cache will remain on the server and cannot be cleared. This issue has now been fixed.
- Plugin will close the database connection, unregister all listener and PAPI extension and so on after disable.
- Plugin no longer reconnect the database when use reload command, to do that, you need restart the whole server.
- Fixed memory leak in some case.
- Reworked the cache system, and should have better performance now.
- Reworked the use time reset codes, and should have better performance and some issues fixed.
- Added support for display favourite remove message in favourite menu.
- Added new conditional symbol in auto product lore add system: @w, it will return true if the button exist in buy more menu and can only buy or sell product.
- Also updated default auto add lore message, now add to favourite menu and sell all line no longer display at buy more menu.
- Now prompt waiting for input message no longer use fixed plugin prefix.
- Other small changes and fixes.
- Reworked skull item builder codes, should have better performance now.
- Reworked gui listener codes, should have better performance.
- Other small changes and fixes.
- Improved codes of use times cache.
- Added {amount} placeholder support for buy/sell price not enough message.
- Added null catcher for PlaceholderAPI extension.
- Fixed random placeholder will print issue in some case.
- Other small changes and fixes.
- Added hook-item-method option in config.yml file.
- Fixed GUI issue when enabe menu or title circle update feature.
- Added menu.anti-dupe-checker option in config.yml file.
- GUI Open method and unregister method now force run in main thread.
- Added built-in number format feature.
- Added support for CraftEngine 26.4+ version and drop support for version below that.
- Fixed open action and close action does not work for buy more menu.
- Added {number:<number>} built-in placeholder.
- Fixed item amount issue in multi display item format.
- Added /shop sellhand command.
- Added CoinsEngine 2.7.0 version support.
- Language missing key updater will use server language value first.
- Fixed plugin will print error when use skull item with base64 data in Spigot server.
- API Change: Added Cancellable support to ItemPreTransactionEvent. (Thanks P-Pang3)
- API Improve: Support ItemStack[] object type in API instead of Inventory only.
- API Fix: Fixed ItemFinishTransactionEvent buyOrSell can not work as well.
- Added {shop-id} placeholder support in shop menu title. (Thanks Happy-FZM)
- Title Update feature no longer require MythicChanger. (Thanks Happy-FZM)
- Added {item-material} placeholder in PlaceholderAPI extension to display product display item material ID. (Thanks Happy-FZM)
- Updated all language files by AI.
- Fixed menu click cooldown feature does not work well in some case.
- Fixed boss bar color codes in Spigot servers.
- Other small changes and fixes.
- Fixed default transport shop name does not exist in language file.
- A new settings.menu-settings option has been added to the shop configuration.You can configure all menu-related settings here. The menu settings defined in this section only apply to this specific shop, allowing you to create independent menu configurations for the shop without needing to create a separate menu configuration file.
- Added require-conditions option for single thing config.
- Added {amount} placeholder support in buy-conditions and sell-conditions.
- Added hide-message option in product config section.
- Added force-display-fail-message option in config.yml file. Default to false.
> If set to false, we will not force display fail message and you can also use hide-message option in shop configs to hide the fail messages.
- Added math support in placeholder condition.
- This version bring COOLDOWN_TIMED and COOLDOWN_TIMER reset mode to free version.
- Added fail-type option support in fail-actions section.
- Fixed plugin can not load at Paper-1.17.1 version.
- Fixed NPE issue when use multi item as price and didn't set placeholder option for them.
- Fixed {amount} used in give/take actions return 0.0 in some case.
- If {amount} returns an integer, it will no longer include a decimal point.
- Added new action: action_bar.
- Added support for use built-in placeholder in lang placeholder.
- Fixed language option in config.yml does not work since 4.2.0.
- The language placeholder feature has been added, allowing for the display of customized language texts for different client languages.
- Fixed the issue of errors when downloading MariaDB drivers.
- This version continuously improves the performance of plugins related to data processing based on community feedback.
- Optimized the logic of the auto reset feature.
- Added new action: update_gui.
- Added new option: menu.title-update.circle-update, if set to true, we will update gui title every second when player open GUI.
- The plugin's performance when processing database data has been optimized. This update requires sustained feedback from the community, as I, as the author, don't have that many "players" to test it with.
- Fixed MySQL database does not work as well start from 4.1.0.
- Added /shop updategui command.
- Added support for automatically updating the player's GUI when resetting buy times, sell times, and random placeholders. The display item for 'buy more menu' can now display up to 99 quantities.
- The default configuration file has been updated, enabling some useful features by default.
- ItemFormat Update: Fixed item damage can not being set to 0. Improved database codes.
- We plan to end support for versions below 1.20.5 (excluding 1.20.5) starting in January 2026.
- The "add lore" feature for display items now supports using multiple conditional symbols simultaneously.
- Added support for negation of conditional symbols.
- The suffix in display item add lore has been removed, and all suffixes have been merged into the conditional symbol (i.e., the prefix).
- The secret-shop-items option is now set in each shop configuration file instead of being uniformly set in config.yml.
- Items that have been hidden due to the secret shop items feature will no longer be tradable, instead of just being hidden in previous versions.
- You can now set secret rules in the config.yml file to consider hiding items based on the conditions met.
- Added time-offset section in config.yml file.
- Added error catcher for debuild item methods.
