PlayerAuctions
PlayerAuctions is a modern and feature-rich auction house plugin for PaperMC servers. It provides a robust, intuitive, and scalable platform for players to buy and sell items, fully integrated with Vault-based economies and PlaceholderAPI.

✨ Overview
PlayerAuctions provides a robust, intuitive, and scalable platform for players to buy and sell items securely. Fully integrated with Vault-based economies and the latest Paper 1.21 API, PlayerAuctions brings a premium marketplace experience to your server.
What's new in v3.1.0?
- Mailbox Integration: Canceled auctions and sold item revenues are securely routed to the player's personal mailbox, solving inventory management issues!
- Cloud Command Framework (CCF): Extremely reliable, zero-latency commands with intelligent Tab Completions.
- Adventure MiniMessage: 100% native MiniMessage GUI item formatting including Hex, Gradients, and auto-italic removal.
- Strictly Paper 1.21: Dropped legacy version support for maximum performance and zero bloat.
🚀 Core Features
📬 Mailbox System (NEW)
No more dropped items when a player's inventory is full!
- Canceled Listing Recovery: Canceling an active auction routes the item safely into the Mailbox.
- Revenue Deposit Receipts: Sold items send a "Revenue Notification" to the seller's Mailbox. Claiming it deposits the Vault money—acting as a satisfying transaction receipt.
- Expiration Protection: Items automatically expire after a configurable duration (default: 30 days).
📢 Global Broadcast Notifications
- Keep the economy active! Broadcasts when items are listed and bought.
- Clickable Links: Click "View Auction" right in chat.
- Configurable Range: Broadcast to GLOBAL, WORLD, or NONE.
🎨 Premium GUI Interface
- Native MiniMessage: Fully supports Hex RGB colors and gradients for borders, titles, and formats.
- Smart Category Filtering: Quickly jump between categories like Blocks, Tools, Weapons, etc.
- Dynamic Sorting: Sort auctions by Price (Ascending/Descending), Time Left, and Newest.
- Search Engine: In-game robust search to filter active items.
🛡️ Secure Transactions
- Atomic Locking: Prevents duplicate purchase exploits (race conditions) using optimistic database locking.
- Persistent JSON Storage: Lightweight, concurrent-safe flat-file storage with auto-backups on writes.
⌨️ Commands & Permissions
Command Aliases:
/ah,/auction,/auctionhouse
| Command | Description | Permission | Default |
|---|---|---|---|
/ah |
Opens the main Auction House GUI | playerauctions.use |
true |
/ah sell <price> [buy_now] [time] |
List the item in your hand on the AH | playerauctions.sell |
true |
/ah myauctions |
View and manage your current listings | playerauctions.use |
true |
/ah mailbox |
Open your Mailbox to claim money and items | playerauctions.use |
true |
/ah search <keyword> |
Search for a specific item | playerauctions.search |
true |
/ah categories |
Browse items by predefined categories | playerauctions.categories |
true |
/ah history [player] |
View your (or others') transaction history | playerauctions.history(.others) |
true (op) |
/ah notify <on/off> |
Toggle personal auction notifications | playerauctions.notify |
true |
/ah reload |
Reload configuration files | playerauctions.reload |
op |
Admin Permissions
playerauctions.admin- Grants all administrative commands and bypasses.
🔧 Configuration Guide
PlayerAuctions is highly modular. Check your config.yml to customize the experience:
auction:
max-auctions-per-player: 5
tax-percentage: 5.0 # Removes 5% from all successful sales
broadcast:
enabled: true
on-listing: true
on-purchase: true
range: GLOBAL # GLOBAL, WORLD, NONE
mailbox:
enabled: true
retention-days: 30 # Days before Mailbox items auto-expire
💬 Placeholders (PlaceholderAPI)
Integrate statistics into your scoreboard or tablist!
%playerauctions_total_auctions%- Tracks globally active auctions.%playerauctions_player_listings%- Tracks the viewer's active listing count.
📦 Installation
- Ensure your server is running Paper 1.21+.
- Install Vault and an economy provider (e.g., EssentialsX).
- Drop
PlayerAuctions-3.1.0.jarinto yourplugins/folder. - Restart the server.
- (Optional) Modify
config.ymlandmessages.ymlusing standard<color>MiniMessage syntax!
🤝 Support & Issues
Developed by MinekartaStudio. Found a bug or need support? Please reach out via our GitHub repository issues tab or our Discord server.
All Versions
+ Add Version### Added
- Mailbox Integration for Auctions**: Items and revenues are now safely routed through the Mailbox system!
- Cancelled Auctions**: Instead of forcefully dropping returned items on the ground or cluttering the inventory, cancelling an auction now instantly sends the item to the Mailbox for asynchronous retrieval.
- Auction Sales**: When an item is bought, the revenue is sent to the seller's Mailbox as a distinct money notification instead of spontaneously appearing in the player's balance. Claiming the money notification within the Mailbox deposits the balance seamlessly and serves as a read receipt for the transaction.
### Major Changes
- Migrated to Cloud Command Framework (CCF)**: Rebuilt the entire command system for robust and native Paper command execution, including dynamic tab completions and strict argument parsing.
- Removed Legacy Support**: Discontinued support for Minecraft versions 1.18 to 1.20 to fully standardize compatibility and features with the latest Paper 1.21 API.
- Modernized GUI Formatting**: Fully integrated the Adventure Component API and MiniMessage formatting internally.
### Fixed
- Fixed MiniMessage and Gradient Parsing Issues**: Resolved bugs where MiniMessage and Hex gradients were explicitly stripped down to legacy ampersands, destroying formats in GUIs.
- Removed Default Minecraft Italicization**: Removed forced default italics on GUI item names and lores across all PlayerAuctions menus. Let your configurations shine!
- Fixed My Listings GUI Blank Page Bug**: Fixed a misapplied SQL offset argument that caused active items from an individual player to not load correctly within the player's personal listings interface.
- Resolved
NoSuchMethodErrorfor native component formatting caused by old Maven shade relocations on the Adventure API. - Re-implemented the missing MiniMessage tag checking regex inside
MessageParserto accurately detect Hex tags natively.
- Global Broadcast Notifications** for auction events
- Broadcast when players list items for auction
- Broadcast when players purchase items
- Clickable "View Auction" link in listing broadcasts
- Beautiful hex-colored messages with emojis
- BroadcastManager Service**
- Centralized broadcast management
- Configurable broadcast ranges (GLOBAL, WORLD, NONE)
- Individual toggles for listing and purchase broadcasts
- Smart player name resolution for offline sellers
- World-based broadcasting support
### Configuration Options
``
yaml
auction:
broadcast:
enabled: true # Master toggle
on-listing: true # Broadcast new listings
on-purchase: true # Broadcast purchases
range: GLOBAL # GLOBAL, WORLD, or NONE
``### Broadcast Messages
- Item Listed**: Shows player, item name, quantity, and price with clickable link
- Item Purchased**: Shows buyer, seller, item, quantity, and price
### Technical Implementation
- Integrated BroadcastManager into PlayerAuction main class
- Broadcasts triggered from AuctionCommand (/ah sell)
- Broadcasts triggered from AuctionService (purchase completion)
- MiniMessage support for rich text formatting
- Click events for interactive messages
- Proper thread handling (main thread for Bukkit operations)
### Benefits
- Server Activity**: Players see active marketplace
- Price Discovery**: Players learn market prices
- Engagement**: Encourages trading and competition
- Transparency**: All trades are visible to community
- Configurable**: Can disable per feature or globally
- Fixed NullPointerException in ConfigManager.getMessage()**
- Added null check for replacements parameter to prevent crashes
- Now handles calls with null varargs gracefully
- Fixes GUI opening errors in MainAuctionGui and MailboxGui
- Fixed file I/O errors in JsonAuctionStorage**
- Implemented retry logic with 3 attempts for file rename operations
- Added automatic old file deletion before rename to prevent conflicts
- Improved error logging with detailed diagnostics
- Reduced "Failed to rename temporary file" errors significantly
- Fixed ResourceLocationException for notification sounds**
- Implemented smart sound name handling (supports both enum and resource location formats)
- Added automatic format conversion from enum names to resource locations
- Added fallback to safe default sound (ENTITY_EXPERIENCE_ORB_PICKUP) if playback fails
- Prevents crashes from malformed sound names like "BLOCK_NOTE_BLOCK_PLING"
### Removed
- Removed search feature from auction house menu**
- Deleted SearchManager class and all search-related functionality
- Removed search button from /ah GUI (slot 48 now empty)
- Removed search query parameter from auction methods
- Cleaned up search-related messages from messages.yml
- Removed playerauctions.search permission from plugin.yml
### **🛡️ CRITICAL SECURITY FIX**
- Patched Double Purchase Item Duplication Exploit**
Fixed a critical vulnerability where multiple players could purchase the same auction item simultaneously, allowing item duplication and economic exploitation.
### **What Was Fixed:**
- Multi-purchase exploit**: Players could spam-click to buy the same auction item
- Seller overpayment**: Sellers received multiple payments for a single item
- Item duplication**: Buyers could duplicate items through concurrent purchases
- Economic instability**: Server economy could be unfairly manipulated
### **Technical Changes:**
- Implemented **Atomic Reservation Pattern** - items are reserved before currency transfer
- Added **Optimistic Locking** - prevents concurrent purchases with version checking
- Enhanced **Automatic Rollback** - auctions revert to ACTIVE status if transactions fail
- Improved **Thread-Safe Operations** - inventory operations moved to main thread
- Added **Clear Error Feedback** - users receive explicit messages for failed purchases
- Update Recommendation**: ⚠️ **IMMEDIATE UPDATE REQUIRED** - This fix addresses a severe game-breaking exploit.
## 📋 Summary
- Fixes severe race condition allowing multiple simultaneous purchases of the same auction item, leading to duplicates, multiple payments, and economy exploits.
- Impact: Ensures atomic transactions, preventing economic damage and maintaining server fairness.
## 🔴 Bug Details
- Problem**: Auction remained ACTIVE during money/item transfers, enabling concurrent buys.
- Old Flow: Check → Transfers → Mark FINISHED (vulnerable window).
- Root Cause**: Non-atomic operations in multi-threaded environment.
- Solution**: Atomic reservation with optimistic locking.
- New Flow: Check → Reserve (mark FINISHED) → If fails, abort → Transfers with rollbacks → Log/notify.
- Improvements: Rollbacks on errors; main-thread inventory; enhanced logging/feedback.
## 🔒 Security
- Prevents item duplication, economy drains, and unfair advantages.
- Search Button Functionality**:
- Previously, the search button did not function due to a slot conflict (likely overlapping inventory positions in the GUI, a common Spigot API issue where clicks register incorrectly).
- Solution: Resolved the conflict by adjusting slot mappings or event handlers (e.g., via InventoryClickEvent prioritization).
- Impact: Players can now use the search feature reliably to find auctions, improving efficiency and user experience in large servers.
- Player Profile Statistics Display**:
- Previously, the balance was not displayed correctly (possibly due to Vault economy API mismatches, formatting errors, or async data fetching issues).
- Solution: Updated the display logic to fetch and format balance accurately (e.g., using Economy.getBalance() with proper synchronization and color/hex integration from the modern palette).
- Impact: Provides precise player stats, helping users make informed decisions on bids/purchases and preventing confusion in transactions.
- Release Date**: January 25, 2026
- Build**: PlayerAuctions-2.4.0-Modern.jar
- Status**: ✅ Production Ready
- Compatibility**: Minecraft 1.19 - 1.21; Java 21; Paper API 1.21.8
## 📋 Summary
- Version 2.4.0 adds complete information to auctioned items in
/ah, including starting bid, current bid, buy now price, reserve price, bid count & highest bidder, listed date & time remaining, and item quantity. - Impact: Enhances transparency and player engagement in auctions by providing detailed stats at a glance, reducing guesswork.
## ✨ New Features
- Complete Auction Statistics in Item Lore**:
- Expanded lore display with sections for pricing (start bid, current bid, buy now, reserve), stats (total bids, highest bidder), time (listed date, ends in, duration), and status.
- Before: Basic seller, price, ends in, and status.
- After: Structured with dividers, colors, and small caps for a professional look (e.g., "ᴘʀɪᴄɪɴɢ" headers).
- Impact: Makes auctions more informative, helping players make better bids.
- New Placeholders**:
- Added 17 placeholders for dynamic data, e.g.,
{seller},{quantity},{starting_price},{buy_now_display}(with color),{bid_count},{listed_date},{time_left}with urgency color, and{needed_amount}. - Examples:
{time_color}uses hex based on time left;{status_color}for visual cues. - Impact: Enables customizable messaging in configs, preparing for future bid systems.
- Time Color Coding**:
- Colors based on remaining time: Emerald (#2ECC71) for >24h (plenty), Carrot (#E67E22) for 1-24h (warning), Coral Red (#E74C3C) for <1h or expired (urgent).
- Impact: Provides intuitive visual urgency, improving user awareness without reading full text.
- Context-Aware Action Buttons**:
- For others' auctions: "Buy Now / Place Bid" if affordable; "Insufficient Funds" with needed amount if not.
- For own auctions: "Your Auction - Click to manage".
- Impact: Reduces errors (e.g., failed buys) and streamlines interactions with conditional prompts.
## 📁 Files Changed and Implementation
- messages.yml**:
- Updated
gui.item-lorewith full stats template using hex colors and placeholders. - Added
gui.item-actionfor conditional buttons (can-purchase, insufficient-funds, own-auction).
- MainAuctionGui.java**:
- Added placeholder context, time color coding, own-auction detection, needed_amount calc, and listed_date formatting (~80 lines changed).
- MyListingsGui.java**:
- Aligned with main GUI: Same placeholders, time coding, formatItemName helper, and hex status (~60 lines changed).
- Other**: pom.xml and plugin.yml updated to v2.4.0 (~30 lines in messages.yml).
- Total: 4 files modified; New placeholders: 17; Build size: ~3.83 MB.
## ✅ Testing and Deployment Notes
- Testing Checklist Summary**: Verified seller/quantity/pricing/bids/time/status displays; action buttons for afford/own cases; my listings consistency.
- Deployment Steps**: Stop server, backup/delete old messages.yml (config changed), install new JAR, start, verify with
/version PlayerAuctions. - Future Prep**: Placeholders like
{current_bid}and{bid_count}ready for upcoming bid tracking. - No breaking changes beyond config updates—report issues on GitHub.
- PlayerAuctions v2.4.0 - Complete Auction Statistics is ready!** 🚀✨
- Introduced a consistent, hex-based color scheme to replace outdated legacy Minecraft colors (
&a,&c, etc.), ensuring better visual precision and compatibility with Minecraft 1.16+. - Primary Colors**: Amber Gold (#F5A623) for prices/accents/prefixes; Emerald (#2ECC71) for success/buy buttons; Coral Red (#E74C3C) for errors/affordability checks; Sky Blue (#3498DB) for info/duration/search; Orchid Purple (#9B59B6) for history/special features.
- Neutral Colors**: Cloud White (#ECF0F1) for primary text; Silver (#BDC3C7) for secondary text; Slate Gray (#7F8C8D) for labels/subtle text; Charcoal (#2C3E50) for separators/borders.
- Accent Colors**: Sunflower (#F1C40F) for warnings/attention; Carrot (#E67E22) for secondary accents/my listings.
- Impact: Enhances UI readability and professionalism, making auctions more engaging without relying on deprecated color codes.
## 🐛 Bug Fixes and UI Improvements
- Fixed
{duration}Placeholder Issue**: - Previously, the
{duration}placeholder didn't display in chat during item listings due to missing parameters inAuctionCommand.java(only{item}and{price}were included). - Solution: Added
{duration}to message parameters and formatted it usingTimeUtil.formatDuration(). - Impact: Ensures complete auction info is shown, reducing user confusion during listings.
- Switched to Modern Hex Colors Exclusively**:
- Eliminated all legacy Minecraft color codes (
&a,&c,§6) to avoid inconsistencies. - Solution: Replaced with a unique, modern palette for all elements.
- Impact: Improves cross-client rendering and aligns with current Minecraft standards.
- Enhanced Clean & Professional UI**:
- Overhauled display for a more modern look, addressing previous clutter.
- Changes: Minimal prefix (
PA ›); Consistent icons (●for success,✕for error,○for neutral,★for sold); Modern separators (›and━━━━━━━━━━━━━━━); Small caps GUI text (ᴘʟᴀʏᴇʀᴀᴜᴄᴛɪᴏɴs). - Impact: Makes the plugin feel premium and less intrusive in gameplay, improving overall user experience.