
EconomyShop by ilius
Clean server shop and player chest shops with price history, sales tax, and full GUI management
EconomyShop v1.1.4 — Hotfix
Bug Fixes
- Fixed harmless "Duplicate column name" warning spam on every restart with MySQL (thanks Azure)
EconomyShop v1.1.3 — Hotfix
Bug Fixes
- Fixed
/selleating items without paying on Paper 26.1+ (thanks Kennardinbound) - Silenced spurious "Failed to add stock" warning spam on every sell
- Fixed
v1.1.2 Changelog
New Features
- Added support for PlaceholderAPI expressions as prices — set any item's buy or sell price to a placeholder like
%my_papi_value%in the admin editor and it'll be resolved per-player at purchase/sale time. Plain numeric prices still work exactly as before. Currency markers like$and,in resolved values are stripped automatically; resolution failures fall back to the numeric price safely
Security
- Fixed a potential free-items exploit on Vault economy providers that allow zero-amount withdraws: items set to "sell only" (buy price 0) could be acquired for free via the buy menu. The shop now refuses to open the buy menu for sell-only items regardless of which economy provider is installed
- Added support for PlaceholderAPI expressions as prices — set any item's buy or sell price to a placeholder like
v1.1.1 Changelog
Compatibility
- Restored backwards compatibility with Paper 1.21.x and Java 21
- Still loads cleanly on Paper 26.1+ with Java 25 — one build works on both
Bug Fixes
- Update checker now compares versions semantically instead of by string equality (no more "new version available" when you're already on a newer build)
- Update checker safely ignores garbage / outage responses from SpigotMC
- Fixed a build issue where plugin.yml versions could lag behind the actual release
Improvements
config.ymlnow self-heals on startup — keys added in newer plugin versions are automatically merged into older configs. Fixes "admin GUI toggle doesn't save" symptoms caused by stale configs missing newer keys (e.g.modules.buyorderson configs pre-dating the Buy Orders feature)
v1.1.0 Changelog
Compatibility
- Updated to support Paper 26.1+ (Minecraft 26.1.2 and later)
- Now requires Java 25 — matches the new Paper server runtime
Note
- Stay on the previous version if you're running Paper 1.21.x or Java 21
EconomyShop v1.0.5.2 — Hotfix
Bug Fixes
Custom datapack item lore not showing in the shop
- Items with custom lore (magic swords, datapack tools, MMOItems-style gear) now keep their lore in every shop GUI
- Original lore appears at the top, shop info (buy/sell/stock) below a divider
- Affects the category browser, buy/sell confirmation screens, and the
/shop sellGUI
Colored item names rendered as plain white
- Custom display names with color codes (e.g.
<gold>Excalibur</gold>) now keep their colors instead of being flattened to plain text - Italic is still suppressed so renamed items don't look weird in the GUI
/shop sellshowed plain materials instead of custom items- Sell-to-Shop GUI now uses the saved shop item's appearance (custom model data, components, etc.) instead of constructing a fresh icon from the base material
EconomyShop v1.0.5.1 — Hotfix
New
seed-default-shopconfig option- New flag (defaults true) that controls whether the default shop seeds on first install
- Set to false BEFORE first install for an empty shop you configure yourself
- No effect on existing servers
Bug Fixes
"Exclude from Sell All" was per-session, not persistent
- Excluding an item via right-click in
/shop sellno longer resets when you close the GUI - Exclusions now persist across reopens and logouts until you re-include the item
- Thanks to Talvkes for the report
Wrong prices in sell paths when same material exists in multiple categories
- Sell flows could show different prices depending on which category had the item
- Lookup is now deterministic — highest sell price wins consistently across all sell paths
Changes
Default shop seeder no longer includes end-game items
- Removed 17 items admins typically customize: netherite, totems, beacons, elytra, tridents, shulker boxes, and similar
- Seeder still creates ~190 everyday items
- Removed items remain available to add manually via
/shop admin edit
EconomyShop v1.0.5 — Persistent item settings + sell-to-shop fix
Features
Item settings now persist when you delete and re-add
- Items removed via the admin GUI are soft-removed instead of permanently erased
- Re-adding the same material to the same category restores its previous price, stock mode, dynamic-pricing flags, and every per-item setting exactly as you left them
- A new "Restored" chat message confirms when this happens (distinct from the regular "Added")
- Old soft-deletes auto-purge after 90 days alongside the existing transaction-purge dashboard action
- Database migrates automatically on first boot — no config changes needed
Bug Fixes
Sell-To-Shop "Exclude from Sell All" visual not updating
- Right-clicking an item in
/shop sellto exclude it from Sell All correctly toggled the exclusion, but the red ✘ "Excluded" lore line and missing glow never appeared - Now the lore and glow update on every right-click as expected
- The exclusion itself was always working — Sell All did skip excluded items — only the visual feedback was broken
- Caused by Paper changing inventory item access to return a snapshot rather than a live reference
Crash-window dupe vector in
/shop sell handand/shop sell all- Both commands deposited money before removing items, opposite of the canonical sell order
- A server crash mid-transaction could have left a player with both items and money
- Now items removed first, money deposited last
- The GUI sell paths (
/shop sellbutton, sell-confirmation GUI) were already correct — this brings the command paths in line
EconomyShop v1.0.4.1 — Hotfix
Bug Fixes
Creative Mode Config Not Respected
- The
security.block-creativeconfig option was being ignored inside shop GUIs - Setting it to
falsenow correctly allows creative mode players to buy and sell - Previously, the command let creative players through but every GUI click was silently blocked
Database Errors on Bulk Price Adjustment
- Running
/shop admin prices increase/decreasecould cause database lock errors and fail to update many items - Bulk operations are now atomic — all items update together, or none do on failure
- Significantly faster on large shops
- The
EconomyShop v1.0.1 (patch)
-Switched from MySQL Connector (GPL) to MariaDB Connector (LGPL) — works with both MySQL and MariaDB -Fixed character encoding to utf8mb4 for special characters -Replaced sign-based text input with chat-based input — no external dependencies
v1.0.1 Changelog
Bug Fixes
- Fixed sell transaction order — items are now removed before money is deposited, preventing a potential item duplication exploit on server crash
- Fixed a TOCTOU race condition in buy transactions — removed separate balance check before withdrawal, now uses a single atomic withdraw call
- Fixed chest shop buy order — owner now receives payment before items are delivered to buyer, preventing unrecoverable state if deposit fails
- Fixed stock cache/DB ordering inconsistency — addStock() now writes to database first and updates cache on success, matching the deductStock() pattern
- Fixed GUI click rate limiting race condition on Folia servers — replaced get-then-put with atomic put-and-check
- Fixed quantity input accepting negative or oversized values in chest shop transaction GUI — now rejects anything outside 1-2304
- Fixed admin stock edit blocking the main thread with a synchronous database call — now runs async
- Fixed icon picker losing its mode when searching — browsing materials after a search no longer adds items to the shop instead of picking an icon
- Fixed missing placeholder values in buy failure messages — "You need {price} to buy {qty}x {item}" now shows actual values instead of blanks
- Fixed missing {item} placeholder in admin price set messages
- Fixed missing {category} placeholder in admin item removed messages
- Fixed missing {stock} placeholder in out-of-stock error message
MySQL / MariaDB
- Fixed CAST AS INTEGER syntax that fails on MySQL — now uses database-specific casting (CAST AS SIGNED on MySQL, CAST AS INTEGER on SQLite)
- Fixed HikariCP idle timeout being hardcoded instead of reading from config
- Fixed missing serverTimezone=UTC parameter in JDBC URL — prevents timezone errors on MySQL 5.7+
- Fixed price_history table using DOUBLE instead of DECIMAL(15,2) — prices now stored with exact precision
- Fixed dead config getter (keepalive-time) replaced with working idle-timeout getter
Security
- Added transaction locks to admin shop buy and sell operations — prevents concurrent purchases overselling finite stock
- Creative mode is now always blocked for all shop transactions — no longer configurable
- Fixed SQLite connection field not being volatile — prevents stale reads on multi-threaded servers
- Added synchronized access to SQLite connection reconnection — prevents race condition on concurrent access
- Fixed silent exception swallowing in database schema migration — unexpected errors are now logged instead of ignored
- Added missing economyshop.admin.bypass permission to plugin.yml — was checked in code but undocumented
GUI Improvements
- All admin shop and player shop item layouts now use a centered, responsive algorithm — items arrange cleanly based on count instead of packing left-to-right
- Chest shop Edit GUI buttons now center dynamically based on available features instead of leaving gaps
- Added configurable divider lines between item info and click actions in all GUI lore
- Renamed "Right-click to quick sell" to "Right-click to sell"
- Removed bold formatting from price history titles — long item names no longer overflow the screen
- Long item names in price history titles are truncated with "..." if they exceed 32 characters
- Custom datapack items now display proper names everywhere instead of raw translation keys
Customizability
- Every admin GUI string is now configurable via lang/en_US.yml — item editor, category config, dashboard, material browser
- All 20 sign input prompts (buy price, sell price, search, permission, etc.) are now configurable
- Chest shop sign text ([Shop], Buy:, Sell:, Buy Only) is now configurable
- Market stats and purge result messages are now configurable
- Currency symbol is now configurable via economy.currency-format in config.yml — supports any format like $, G, coins
- Help command format now matches AuctionHouse style
- Added granular admin permissions — economyshop.admin.edit and economyshop.admin.reload are now checked separately
- Removed dead config options that did nothing
- Removed unused economyshop.admin.import permission
- Config reload now re-applies currency format without requiring a restart
- Added 10 missing chest shop GUI message keys that were showing raw key names to players
Compatibility
- Moved Vault from softdepend to depend — plugin already required it, now declared honestly
- Fixed Folia entity scheduler passing null as retired callback — now uses a safe no-op
- Fixed tab completion returning null which leaked all online player names — now returns empty list
- Added base permission check to tab completion — players without economyshop.use no longer see subcommands
- Fixed WorldGuard hook silently swallowing all exceptions — unexpected errors are now logged
-Fixed some chat messages showing raw values
Release version of EconomyShop

