Welcome to the Hangar Open Beta. Please report any issue you encounter on GitHub!
⛃ EzShops – The Ultimate Shop Plugin for Skyblock & Survival!
⛃ EzShops
Skyblock-ready shop menus with smart pricing, sign trading, and API integrations
- Paper/Purpur 1.21.4+
- Vault economy required
- ShopPriceService API
- Dynamic pricing engine
Requires Vault and a compatible economy plugin to process currency.
⚠ Integrates with EzAuction
★ What makes EzShops different?
- Guided storefront menus: Category icons, quantity pickers, bulk buttons, and lore templates keep every purchase clear for players and staff.
- Smart price automation: Dynamic buy/sell multipliers nudge values after each transaction and persist to
shop-dynamic.ymlso your market keeps evolving between restarts. - Rotating daily specials: Schedule weighted or sequential rotations from
shop/rotations/and highlight limited-time offers without rewriting your categories. - Sign shop mirroring: Sync right-click signs with any menu entry, customize headers and line formats, and let towns trade without opening the GUI.
- Specialty entries out of the box: Sell spawners with correctly tagged block states, issue minion or vote crate keys, and keep cosmetic minion heads restricted to crates.
- Player-run marketplaces:
[shop]signs convert into owner-branded listings that pull stock from linked chests while enforcing permissions and chest access rules. - Category commands: Instantly run a server command when a category icon is clicked, instead of opening a shop. Use this for warps, info, or custom features (see config example below).
- Live config reload: Use
/shop reload(permissionezshops.reload) to instantly reload all shop configuration files and update menus without restarting your server.

⚡ Player-facing commands
/shop: Open the menu or browse a flat paginated list when categories are disabled./shop buy&/shop sell: Trade directly from chat with material names and optional amounts./sellhand&/sellinventory: Cash out specific stacks or an entire inventory in one click, with summary receipts./price: Let players and staff quote live buy/sell totals using tab-complete across every configured material./shop reload: Instantly reload all shop configuration files and update menus (permissionezshops.reload).
⛃ Stock Market Features
- Live Stock Market Pricing: Certain shop items use a real-time stock market price that changes based on player trading activity and random market events.
- Configurable controls: Admins can block or override specific items from the stock market via config, and all trading commands are permission-based with optional per-player cooldowns.
- Persistent state: Frozen prices and admin overrides are saved and persist across server restarts.
- How It Works:
New price = max(1.0, current price × (1 + (demand × 0.02) + random volatility))
Where:
- demand is positive for player purchases, negative for sales
- random volatility is a value between -10% and +10% per update
- Prices never fall below 1.0 coins
Buying increases the price, selling decreases it, and random market swings keep things interesting!
⛃ Stock Market Commands
/stock buy <item> <amount>: Buy shares in a stock market item at the current price./stock sell <item> <amount>: Sell your shares for the current market price./stock info <item>: View the current price, recent changes, and volatility for a specific item./stock list: See all stock market items and their current prices.
⛃ Admin Stock Market Controls
/stockadmin freeze <item>: Freeze or unfreeze the price of a stock market item (requiresezshops.stock.admin.freeze). Frozen state persists across restarts./stockadmin set <item> <price>: Set the price of a stock market item directly (requiresezshops.stock.admin.set)./stockadmin list [page]: List all stock market items, their prices, and frozen status, with pagination and metadata showing who/when (requiresezshops.stock.admin.list)./stockadmin info <item>: View detailed info, including who froze an item and when (requiresezshops.stock.admin.info).
⛃ Stock Market Permissions
ezshops.stock.buy: Allow buying stock market items.ezshops.stock.sell: Allow selling stock market items.ezshops.stock.info: Allow viewing stock info.ezshops.stock.list: Allow listing all stock market items.ezshops.stock.admin.freeze: Allow freezing/unfreezing items.ezshops.stock.admin.set: Allow setting prices directly.ezshops.stock.admin.list: Allow listing all items with admin details.ezshops.stock.admin.info: Allow viewing admin info for items.
🛠️ Configuration toolkit
- Instant defaults: First launch seeds
shop.yml, menu layouts, and category presets so you can adjust icons, lore, and prices immediately. - Flexible layouts: Pick per-category sizes, filler items, back buttons, and slot placements or fall back to a flat /shop list.
- Category commands: Add a
command:field to any category config (e.g.shop/categories/warp.yml). When clicked, the command runs for the player (supports{player}placeholder). Example:
menu-title: '&bWarp Menu'
icon:
material: ENDER_PEARL
display-name: '&bWarps'
slot: 0
command: 'warp main {player}'
- Rotations and specials: Build timed lineups in
shop/rotations/, assign them viarotation-group, and let the plugin cycle icons, menu titles, and items automatically. - Dynamic pricing defaults: Tune global multipliers in
config.ymland override them per entry to automate supply-and-demand swings. - Sign formatting: Adjust accepted headers and line colors to match your branding without breaking existing signage.
- Player shop tuning: Toggle the entire system with
player-shops.enabled, enforce quantity or price limits, and rewrite owner/item/stock lines through the dedicated sign-format placeholders. - /playershop setup flow: Give creators a menu-driven way to prefill quantity and pricing, complete with +/- buttons that honor your configured minimums and caps before they ever place a sign.
- Localized messaging: Point
languageinconfig.ymlto files likemessages/messages_fr.yml. Bundle new locales inside your jar (and add them toEzShopsPlugin.DEFAULT_SHOP_RESOURCES) so they copy toplugins/EzShops/messages/on first launch.
💲 Configuring item pricing
- Open the entry file: Each category lives under
plugins/EzShops/shop/categories/; edit the item section (for examplefarming.yml➝wheat_seeds). - Set your base totals: Update the
buyandsellvalues to control the price for the configuredamount; EzShops scales shift-click totals for you, andbulk-amountchanges the alternative stack size. - Enable dynamic swings: Add an optional
dynamic-pricingblock withenabled,starting-multiplier,min-multiplier,max-multiplier,buy-change, andsell-changeto let prices respond automatically to trades. - Apply changes: Save the file and reload EzShops (or restart the server) to push the updated numbers live to menus, signs, and API consumers.
wheat_seeds:
material: WHEAT_SEEDS
slot: 10
amount: 16
bulk-amount: 64
buy: 15.0
sell: 3.8
dynamic-pricing:
enabled: true
starting-multiplier: 1.0
min-multiplier: 0.7
max-multiplier: 2.1
buy-change: 0.018
sell-change: 0.012
🎲 Configuring rotating specials
- Define the schedule: Edit
plugins/EzShops/shop/rotations/daily-specials.yml(or create a new file undershop/rotations/). Set interval to an ISO-8601 duration like PT6H or compact shorthand such as 6h, choose a mode of sequential or random, and pick a default-option for fresh installs. - Wire the category: Point
rotation-groupinside the matching category file (the bundle shipsshop/categories/daily_specials.yml). The optionalrotation-defaultsblock supplies the shared icon, menu title, and baseline item data that every option inherits. - Override per option: Inside each option’s items block, override only the fields you need (material, prices, amounts, lore, or icons). Add weight values when using random mode to bias how often each option appears.
- Reload and monitor: Reload EzShops or restart the server. The plugin copies active selections to
shop-rotations.ymlso admins can track timers or pin a specific option between rotations.
rotations:
daily-specials:
interval: 12h
mode: random
default-option: farming-frenzy
options:
farming-frenzy:
menu-title: '&aDaily Special: Farming Frenzy'
monster-madness:
weight: 2
items:
harvest_bundle:
material: ROTTEN_FLESH
buy: 24.0
sell: 9.5
🪧 Sign shops
- Mirror menu offers: Tie a sign to any priced
Material; EzShops pulls the same buy/sell data used by your GUI entries. - Quick setup: Place
[shop]on line one,buyorsellon line two, the item (for exampleDIAMOND_BLOCK) on line three, and the stack amount on line four. - Example layout:
[shop]/buy/DIAMOND_BLOCK/1instantly rewrites to your themed header, action text, item name, and formatted price. - Granular permissions: Lock creation behind
ezshops.shop.sign.createwhile letting standard shop permissions govern who can buy or sell through the sign. - Player feedback: Players receive chat confirmations while the sign updates its colored price line after each trade.
- Batch generator GUI: Run
/signshop(permissionezshops.shop.sign.setup) to open a planner GUI that pulls items from your inventory, flips between buy/sell modes, sets a shared backing block, tweaks spacing and rows, and chains together as many synchronized signs as you need before confirmation.

- One-click placement: Look at the block you want behind the first sign and hit confirm; EzShops lays down the backing line and wall signs in front of you using your configured formatting, stack sizes, and stored metadata so they trade immediately.
🪧 How to use the sign shop generator
- Open the planner: Run
/signshop(permissionezshops.shop.sign.setup) to open the generator GUI and pull eligible materials from your inventory. - Select your template item: Click an item in your inventory pane to add it to the plan. EzShops copies its material, display name, lore, and buy/sell prices straight from the linked menu entry.
- Choose buy or sell mode: Use the toggle buttons to decide whether every generated sign handles purchases or sales, and set the stack amount if you need something other than the default.
- Configure the layout: Pick the backing block, adjust spacing and row count, and preview the final sign text so you know exactly how the strip will look in-game.
- Confirm placement: Stand where you want the line to begin, look at the supporting block, and press the confirm item; EzShops places the backing and every formatted sign using the plan you just saved.
- Reuse saved plans: The generator keeps your last configuration so you can rerun
/signshop, tweak a detail, and redeploy another set of synchronized buy or sell signs in seconds.
🪧 Scanning sign shops
/signshop scan: Sweep the nearby area for EzShops-formatted signs and highlight any that no longer match their linked GUI entry or have invalid headers.- Permission gated: Limit the audit tool to trusted staff with
ezshops.shop.sign.scanso regular players can’t spam alerts. - Instant feedback: Scans summarize the number of corrected signs, orphaned headers, or skipped locations right in chat so you know where to investigate.
- One-click fixes: Choose the optional autofix prompt to rewrite outdated lines, reapply pricing, and restore proper formatting without touching each sign manually.
- Perfect for expansions: Run a scan after big layout changes or world edits to ensure every strip still points at a valid backing block before opening your new district.
🛒 Player shops

- Let the community sell: Players place
[playershop]on a sign attached to their chest, add the quantity and price (or reuse saved defaults), and EzShops validates the stock before activating the listing. - Automatic formatting: Successful shops rewrite their signs with color-coded headers, owner names, item summaries, and price lines that reflect stock status.
- Offline earnings: Purchases withdraw money from buyers, deposit it into the owner's account, and send notifications when the seller is online.
- Secure storage: Only owners (or admins with
ezshops.playershop.admin) can break signs or open connected chests, preventing grief and theft. - Permission tiers: Grant
ezshops.playershop.createto trusted builders,ezshops.playershop.buyto the wider community, and reserveezshops.playershop.adminfor staff oversight. - Configurable rules: Require stocked chests, clamp quantity or pricing ranges, or disable the feature entirely using the
player-shopsblock insideconfig.yml. - Double-chest ready: Listings automatically bind to both sides of a double chest and refresh their signs whenever stock changes so the status is always accurate.
🛒 How to open a player shop
- Preset your values (optional): Run
/playershopto open the setup menu. Use the +/- buttons to lock in a quantity and price that respect your configured limits; the plugin saves these until you change them again. - Stock a chest: Place the item you want to sell inside the chest (or both sides of a double chest) so EzShops can detect the template stack.
- Add the sign: Attach a sign to the chest and write
[playershop](or another allowed header) on the first line. - Enter quantity and price: Fill in the second line with the amount to sell per purchase (e.g.
x16) and the third line with the total cost (numbers only). Leave either line blank to reuse the values you saved with/playershop. - Let EzShops verify: When you place the sign, the plugin checks ownership, chest stock, and any price or quantity guards before rewriting the sign with your themed formatting.
- Maintain stock: Keep the chest supplied; EzShops instantly flags the sign as out of stock and flips it back when you restock or close the chest inventory.
- Collect earnings: Every sale deposits money into your account, notifies you if you are online, and keeps the sign synced with the remaining stock.
📦 ShopPriceService API examples
- Lookup the service
RegisteredServiceProvider<ShopPriceService> provider = Bukkit.getServicesManager().getRegistration(ShopPriceService.class);
ShopPriceService prices = provider != null ? provider.getProvider() : null;
- Query buy and sell totals
ItemStack stack = new ItemStack(Material.DIAMOND, 16);
prices.findBuyPrice(stack).ifPresent(total -> player.sendMessage("Buy price: " + total));
prices.findSellPrice(stack).ifPresent(total -> player.sendMessage("Sell price: " + total));
- Cache your reference: Grab the provider during plugin enable and reuse it for commands, GUIs, and scheduled tasks.
🚀 Quick start
- Install Vault and an economy provider, then drop
EzShops.jarintoplugins/. - Restart the server to generate default shop categories, sign formats, and dynamic pricing storage.
- Edit
plugins/EzShops/shop.yml(or the files underplugins/EzShops/shop/) to tailor categories, prices, and display copy. - Grant
ezshops.shop.sign.createto trusted builders so they can post buy/sell signs around your spawn.
⛃ Deliver a polished ingame shop with EzShops today!
🔗 Related Plugins
Pinned Versions
Pages
Members
Owner