EconomyShop v1.1.4 — Hotfix
Bug Fixes
- Fixed harmless "Duplicate column name" warning spam on every restart with MySQL
## 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
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
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 — 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-creative config option was being ignored inside shop GUIs
- Setting it to false now 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/decrease could 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
EconomyShop v1.0.4 — Changelog
New Features
Bulk Price Adjustment Command
- New admin command: /shop admin prices <increase|decrease> <buy|sell> <percent>
- Adjusts all shop item prices at once by a percentage
- Increase capped at 1000%, decrease capped at 99% (prevents zero/negative prices)
- Clamped to your configured min/max price bounds
- Full tab completion through all argument positions
Discord Webhook Alerts for Repeated Transactions
- New webhooks section in config.yml
- Sends a Discord embed when a player performs many buy/sell transactions of the same item within a configurable time window
- Tracks both buys and sells of the same material in a single counter (catches buy/resell exploits)
- Tracked per-player and per-material to avoid false positives from normal shopping
- Configurable threshold and sliding time window
- Disabled by default — paste your Discord webhook URL and toggle on
- Fully async, errors are swallowed so a bad webhook URL never breaks the plugin
Bug Fixes
Restock Interval Editor
- Restock interval slot in the admin item editor now uses left/right click increments instead of typing on a sign
- Left-click: +1 hour
- Right-click: -1 hour
- Shift+Left: +1 minute
- Shift+Right: -1 minute
- Lore now clearly shows all click instructions
- Hint added when value is 0 (uses server default)
Full Inventory Buy Block
- Buying items with a full inventory is now blocked entirely instead of dropping overflow on the ground
- Prevents money laundering exploits (buy + drop for alt to grab)
- Prevents lost items from chunk unloads
- Prevents item drop spam griefing
- Counts both empty slots AND partial stacks of the same item as available space
- Money and stock are not deducted on a blocked purchase
- Clear error message tells the player to make space
EconomyShop v1.0.3.4 — Patch Notes
Critical Bug Fixes
Selling Air / Invalid Items
Sell Multiplier Creating Free Money
- Players could sell AIR or null-material items for money. Added isAir() and null checks in handleQuickSell, executeSell, and the material browser. Inventory counting now skips air stacks. Blacklisted materials are also now blocked when adding items via the material browser.
Money Duplication via Transaction Order
- All config values that feed into price math are now clamped to safe bounds — sell-price-multiplier locked to [0.01, 1.0], buy-sell-spread to [0.01, 1.0], all stock settings floored at 1. Prevents misconfiguration from generating money.
- Fixed NaN and Infinity multipliers caused by division-by-zero when stock reached 0. getEffectiveSellPrice and getEffectiveBuyPrice now treat NaN/Infinity as 1.0. DynamicPricingEngine uses Math.max(1, ...) on every stock divisor.
- getEffectiveSellPrice now returns 0 instead of null when an item has no sell price set.
- Reversed sell operation order: items are now removed from inventory before depositing money. Previously, a crash between deposit and item removal would give money without taking items.
- Added dupe detection: item count is verified before and after removal. If the delta doesn't match the expected quantity, the transaction aborts, items are returned, and a [DUPE DETECTION] warning is logged.
Other Changes
- Sell confirmation GUI now driven by sell-confirmation.yml layout instead of hardcoded slots
- Sell-to-shop GUI: left-click quick-sells all of that item, shift+left-click opens quantity selector, right-click excludes items from "Sell All"
- InventoryDragEvent now also sets Result.DENY (not just setCancelled)
- DynamicPricingEngine.getOrCreateState uses ConcurrentHashMap.computeIfAbsent (atomic, replaces check-then-put)
