What is NexaAuctions?#
A configurable auction platform for servers that need safe sales, bid handling, mailbox recovery and operator tooling.
NexaAuctions is a Java 25 auction platform for Paper 1.21.x-26.1.x with BIN listings, bidding, bulk sales, SQL storage, Redis-ready cache invalidation, mailbox recovery, staff intelligence menus, configurable Triumph GUI files, economy fees, migration surfaces and public API events.
Product purpose, target audience, system boundaries and quick links.
A configurable auction platform for servers that need safe sales, bid handling, mailbox recovery and operator tooling.
SMP, Lifesteal, Prison, SkyBlock and network owners who need a premium market layer with clear admin recovery paths.
Redis currently handles heartbeat, cache invalidation and lock helpers. SQL remains the authoritative source of auction state.
How the product models listings, prices, durations, categories and lifecycle state.
1k, 2.5m, 1b, 1t.Categories can be matched from item data and used by browsing, limits, fee rules and search filters.
Lifecycle events let external plugins cancel or react before final item and money movement happens.
Money and item movement is split into explicit services so failures can be audited and recovered.
Transaction idempotency records reduce the chance of duplicate processing when commands, menu clicks or network retries overlap.
Transaction and auction locks guard purchase, bid, cancel, expire and claim flows. Redis lock helpers can be used in network mode.
Listings must move from the expected current state into the next state. Invalid movement is rejected instead of silently overwriting state.
Purchases, cancellations, expirations and recovery returns can move through mailbox records that are claimed with /ah claim.
Seller deposits that cannot be completed immediately can be queued and retried when the economy provider is available again.
Admin integrity checks surface pending auctions and stale transactions before they turn into unresolved support cases.
Player-facing commands and menus are designed around repeated marketplace use.
/ah./ah claim is the player recovery path for purchased, returned, expired and staff-recovered items.
Players can remove their own active listings through a confirmation screen. Staff can delist any active listing, while the existing mailbox delivery path protects the seller's remaining item.
LISTED. If a purchase, bid settlement or expiration wins the state race first, the removal is rejected and no duplicate refund is created./ah profile and choose My Listings./ah claim./ahadmin cancel <auctionId> safely force-cancels an active listing./ahadmin delete <auctionId> <reason> records a moderation reason.LISTED
├─ purchase wins → PURCHASE_PENDING → SOLD
├─ expiry wins → EXPIRED → seller mailbox
└─ removal wins → CANCELLED / DELETED_BY_ADMIN → refund mailbox
If the item is sold at the same moment the seller clicks cancel, the first state transition wins. The buyer is compensated if money was withdrawn before a failed purchase transition; the seller receives only the unsold remaining quantity./ah claim after an offline or full-inventory removal.Staff tools follow the same operational style as the other local premium plugins: inspect first, act second, keep recovery visible.
/ahadmin menu/ahadmin hooks/ahadmin storage/ahadmin network/ahadmin performance/ahadmin logs [limit]/ahadmin suspicious [limit]/ahadmin view <player|uuid>/ahadmin integrity/ahadmin cancel <auctionId>/ahadmin delete <auctionId> <reason>/ahadmin recover <auctionId> <player>/ahadmin cleanup/ahadmin logs export <csv|json> gives staff a review artifact for chargebacks, duping reports and support tickets.
Scan, preview and start commands are separated so data can be inspected before any import writes NexaAuctions listings.
Admin overview, logs, suspicious, recovery, player listings, network and performance menus give visual staff entry points.
Installation gets the plugin to boot. First Setup prepares it for production use.
Recommended first configuration pass after the plugin has generated its files.
Each command includes purpose, permission, example and when to use it.
/ahPlayerOpen the auction house menu.
nexaauctions.use
/ah
Default player entry point.
/ah sell <price>PlayerCreate a BIN listing from the full held stack.
nexaauctions.sell
/ah sell 25000
Fast listing flow.
/ah sell <bin|normal|bulk> <price> [amount] [duration]PlayerCreate a specific auction type, with optional amount input when amount trading is enabled.
nexaauctions.sell.bin / .normal / .bulk
/ah sell bulk 10k 8 3d
Bid or bulk workflows.
/ah cancel <auctionId>PlayerOpen the confirmation screen to cancel your own active listing.
nexaauctions.cancel
/ah cancel 6d1...
Remove an unsold listing and receive the remaining item back.
/ah buy <auctionId> [amount] [confirm]PlayerPurchase the full stack, or a partial amount when amount trading is enabled.
nexaauctions.buy
/ah buy 6d1... 8 confirm
BIN and bulk purchases.
/ah bid <auctionId> <price>PlayerPlace a bid on a normal auction.
nexaauctions.bid
/ah bid 6d1... 25k
Competitive listings.
/ah search <query>PlayerSearch listings by text or filters.
nexaauctions.search
/ah search diamond seller:Steve
Find specific listings.
/ah claimPlayerClaim pending mailbox items.
nexaauctions.claim
/ah claim
After purchases, cancels or expirations.
/ahadminAdminAdmin tools for license, storage, network, recovery and migration.
nexaauctions.admin
/ahadmin storage
Operational support and moderation.
/ah browse
/ah category
/ah bids
/ah selling
/ah cancel <auctionId>
/ah sold
/ah purchases
/ah expired
/ah history
/ah stats
/ah help
/ahadmin menu [overview|logs|suspicious|recovery|players|network|performance]
/ahadmin reload
/ahadmin debug
/ahadmin hooks
/ahadmin storage
/ahadmin network
/ahadmin logs [limit]
/ahadmin logs export <csv|json>
/ahadmin suspicious [limit]
/ahadmin view <player|uuid>
/ahadmin cancel <auctionId>
/ahadmin delete <auctionId> <reason>
/ahadmin recover <auctionId> <player|uuid>
/ahadmin integrity
/ahadmin cleanup
/ahadmin performance
/ahadmin performance clear
/ahadmin migrate <scan|preview|start> <source>
/ahadmin migrate rollback
Permission nodes are based on plugin.yml. Assign admin and bypass permissions carefully.
/lp group default permission set nexaauctions.use true/lp group admin permission set nexaauctions.admin trueConfiguration YAML files below contain short bundled default excerpts, not full files.
Main runtime settings, license, storage, network, auction behavior, safety and integrations.
debug: false
license-key: "LICENSE"
color-format: "MINIMESSAGE"
settings:
default-language: "en_US"
default-auction-type: "BIN"
default-duration: "3d"
default-currency: "vault"
confirm-purchases: true
confirm-expensive-sell: true
storage:
type: "sqlite"
sqlite:
file: "storage/nexaauctions.db"
wal: true
network:
enabled: false
server-id: "server-1"
redis:
enabled: false
channel: "nexaauctions:sync"
safety:
transaction-timeout-seconds: 20
startup-integrity-scan: true
ghost-cleanup: true
tps-guard:
enabled: true
minimum-tps: 17.5Top-level keysdebug, license-key, settings, storage, network, auction, input, safety, integrations, license
Production handlingRestart after changing license or storage. Runtime reload can handle messages, menus, hooks and most YAML surfaces.
Defines currency ids, provider mapping, display names and selector materials.
currencies:
vault:
enabled: true
provider: "VAULT"
display-name: "Money"
material: "GOLD_INGOT"
default: true
points:
enabled: true
provider: "PLAYER_POINTS"
display-name: "Points"
material: "EMERALD"Controls listing fees, sale tax, bid fees, price ranges and permission reductions.
fees:
bin:
listing-fee-percent: 2.5
sale-tax-percent: 5.0
normal:
listing-fee-percent: 1.5
sale-tax-percent: 5.0
bid-tax-percent: 1.0
bulk:
listing-fee-percent: 2.0
sale-tax-percent: 5.0
permission-reductions:
vip:
permission: "nexaauctions.tax.vip"
reduction-percent: 25.0Controls active listing count, active bid count, price/duration limits, permission tiers, category limits and world restrictions.
limits:
default:
active-auctions: 10
active-bids: 20
min-price: 1
max-price: 1000000000
min-duration: "10m"
max-duration: "7d"
permissions:
vip:
permission: "nexaauctions.limit.vip"
active-auctions: 25
active-bids: 50
max-duration: "14d"Defines menu categories and material/name matching rules.
categories:
weapons:
enabled: true
display-name: "<red>Weapons"
material: "DIAMOND_SWORD"
slot: 10
match:
materials:
- "DIAMOND_SWORD"
- "BOW"
misc:
enabled: true
display-name: "<gray>Misc"
material: "CHEST"
slot: 15
fallback: trueBlocks dangerous materials and named staff/admin items by default.
item-rules:
mode: "blacklist"
inspect-shulker-contents: true
blacklist:
bedrock:
material: "BEDROCK"
command-blocks:
materials:
- "COMMAND_BLOCK"
- "CHAIN_COMMAND_BLOCK"
staff-items:
name-contains:
- "Admin"
- "Staff"Translation and formatting guidance based on messages.yml.
<auction>, <price> and <currency> intact when translating.Edit the generated messages.yml in the plugin folder, preserve keys and placeholders, then run /ahadmin reload or restart for startup-level changes.
<green>Listed <white><item></white></green>
<gradient:#22d3ee:#a855f7>NexaAuctions</gradient>
&cLegacy color fallbackprefix: "<gradient:#22d3ee:#a855f7>NexaAuctions</gradient> <dark_gray>| "
auction-created:
enabled: true
type: "chat"
text: "<green>Listed <white><item></white> for <gold><price></gold> <yellow><currency></yellow> <gray>(<duration>)</gray>."
purchase-success:
enabled: true
type: "chat"
text: "<green>Purchase transaction completed for <white><amount>x <item></white> at <gold><price></gold> <yellow><currency></yellow>."
storage-status:
enabled: true
type: "chat"
text: "<gray>Storage: <white><type></white> ..."Menus are loaded from menus/*.yml and rendered through Triumph GUI.
[open], [command], [sound] and [close].Main player market menu.
NexaAuctions | MarketListing creation preview and command handoff menu.
NexaAuctions | CreateShared view and buy entry for a listed auction.
NexaAuctions | AuctionSafety screens before purchase, bid or listing removal.
Player-oriented lists for bids, listings, purchases, sold and expired items.
Operator menus for overview, logs, suspicious transactions, recovery, network and performance.
menus/main.yml
menus/categories.yml
menus/auction-detail.yml
menus/create-auction.yml
menus/duration-selector.yml
menus/currency-selector.yml
menus/price-editor.yml
menus/confirm-purchase.yml
menus/confirm-bid.yml
menus/my-listings.yml
menus/my-bids.yml
menus/purchases.yml
menus/sold-items.yml
menus/expired-items.yml
menus/transaction-history.yml
menus/statistics.yml
menus/shulker-preview.yml
menus/admin-overview.yml
menus/admin-network.yml
menus/admin-performance.yml
menus/admin-logs.yml
menus/admin-suspicious.yml
menus/admin-recovery.yml
menus/admin-player-listings.ymlSave real in-game screenshots into showcase/assets/ with these names so the showcase page fills automatically.
showcase/assets/main-market.png
showcase/assets/create-auction.png
showcase/assets/auction-detail.png
showcase/assets/confirm-purchase.png
showcase/assets/admin-overview.png
showcase/assets/admin-network.pngSearch can be text-only or structured. This lets players find real market items without staff-maintained categories for every case.
Free text can match item summary, seller name and category id.
/ah search diamond sword
/ah search spawnerseller:<name|uuid>material:<material>category:<id> or cat:<id>currency:<id> or cur:<id>type:<bin|normal|bulk>enchant:<id>model:<custom model data>custom:<provider item id>min:<price>max:<price>sort:newestsort:oldestsort:highest / sort:price_descsort:lowest / sort:price_ascsort:ending_soonsort:most_bidssort:random/ah search seller:Steve sort:newest
/ah search material:DIAMOND_SWORD max:500k
/ah search category:weapons type:normal sort:most_bids
/ah search custom:mythic_blade currency:vaultThe search command can route into menu views, while category and browse menus keep casual navigation simple for players who do not use filters.
Currencies and fees are independent YAML surfaces.
Seller payouts that cannot be deposited immediately can be queued and retried. This protects offline or temporarily unavailable economy flows.
Safety checks run before auction creation and transaction state changes.
Storage docs explain SQLite, MySQL, MariaDB and backup expectations.
Use SQLite with WAL for a small single server. Use MySQL or MariaDB before enabling network mode, Redis locks or multi-server cache invalidation.
Network mode is designed for SQL-backed multi-server operation.
Publishes server heartbeat data so admins can inspect known network members.
Publishes listing changes so other servers can invalidate cached auction views.
Claim and expiration guards can use Redis lock helpers with token-based release.
network:
enabled: true
server-id: "survival-1"
require-production-database: true
redis:
enabled: true
host: "localhost"
port: 6379
channel: "nexaauctions:sync"
lock-ttl-ms: 5000
Optional hooks are detected and summarized at runtime.
/ahadmin hooks after installing or removing dependencies.Provides auction placeholders for scoreboards, menus and external displays.
%nexaauctions_active_listings%
%nexaauctions_total_listings%
%nexaauctions_transactions%
%nexaauctions_storage%
%nexaauctions_network_mode%
%nexaauctions_player_active%
%nexaauctions_player_sold%
%nexaauctions_player_bought%Can send create, bought, sold, cancel, bid and recover event payloads with retry settings in webhooks.yml.
Vault is the primary money provider, PlayerPoints can be used for point economies and the YAML provider surface is useful for development or simple local balances. Keep the configured currency id aligned between currencies.yml, fees.yml and auction commands.
Resolver hook points exist for ItemsAdder, Oraxen, Nexo, MMOItems, EcoItems, ExecutableItems, ExecutableBlocks, MythicCrucible, Slimefun, HeadDatabase, CraftEngine, Nova and CustomCrafting. Provider-specific ID extraction should be validated per plugin API before marketing it as complete support.
LuckPerms permission facade and LiteBans/AdvancedBan mute hook points are available for safer player messaging and command behavior.
Redis heartbeat, cache invalidation and distributed lock helpers are the documented production-ready network surface. RabbitMQ and proxy sync classes exist as future-ready boundaries and should not be sold as fully configured production sync until implemented and tested for the target network.
Use these PlaceholderAPI values in scoreboards, holograms, menus or external displays.
/ahadmin hooks to confirm registration.%nexaauctions_active_listings%
%nexaauctions_total_listings%
%nexaauctions_transactions%
%nexaauctions_storage%
%nexaauctions_network_mode%%nexaauctions_player_active%
%nexaauctions_player_sold%
%nexaauctions_player_bought%<gray>Market: <white>%nexaauctions_active_listings% active
<gray>Sold: <green>%nexaauctions_player_sold%
<gray>Bought: <aqua>%nexaauctions_player_bought%Show %nexaauctions_storage% and %nexaauctions_network_mode% only to staff or debug panels. Player-facing boards usually only need active listings and personal stats.
Migration and recovery tools are designed for safe review before data changes.
zAuctionHouse, AuctionMaster, DeluxeAuctions, CrazyAuctions, ExcellentAuction, JSON, SQL and CSV providers are registered as migration surfaces.
Admin delete and recover commands can move item data into a player's mailbox, then the player claims it with /ah claim.
Logs, suspicious reports, player views, performance status and integrity scans help staff investigate support cases.
External plugins can consume or extend auction behavior.
NexaAuctionsAPI is registered through Bukkit ServicesManager and AuctionApiProvider.get().Ready-to-follow scenarios reduce support tickets and make the product easier to configure.
Use SQLite, Vault currency, conservative fees, default limits and clear item blacklist rules for community survival servers.
Use higher listing limits for rank groups, PlayerPoints currency if needed and strict suspicious price thresholds.
Use MySQL/MariaDB, Redis cache invalidation, unique server ids and staged duplicate purchase/claim testing.
Start with console logs, config diffs, plugin version and reproduction steps.
Check license-key, placeholder values, SQL credentials and whether network mode requires MySQL/MariaDB.
Verify menu file names, root section names, valid materials and console errors during /ahadmin reload.
Confirm the configured currency provider is available, the buyer has funds and the listing state is still LISTED.
Review permissions, cooldown, TPS guard, ping guard, world restrictions, limits, duration, price and item-rules.yml.
Use MySQL/MariaDB, verify Redis host/port/password/channel and inspect /ahadmin network output.
Short answers for common buyer and staff questions.
This docs page targets Paper 1.21.x-26.1.x with Java 25. Legacy 1.8 support is not part of this product page.
Yes. SQLite is the default and is suitable for development or smaller single-server setups.
Redis publishes heartbeat and cache invalidation while SQL remains authoritative. Test duplicate purchase and claim cases before production marketing.
Yes. Edit files under menus/*.yml. Items support materials, slots, lore, permissions and action strings.
Use this checklist before packaging a release or opening the market on a live server.
Before enabling network mode on production, run two test servers against the same MySQL/MariaDB database and Redis instance. Test duplicate purchase, duplicate claim, expiration and cache invalidation behavior.
Test with the same Vault economy or PlayerPoints version used on production. Verify failed payout retry behavior by temporarily disabling the provider on a staging server.
Open every menu file, verify titles fit, check invalid materials in console, confirm all command/open/sound actions work and capture the showcase screenshots after the final layout is stable.
High-level notes for this local build.
Information to collect before asking for help.
/ahadmin menu
/ahadmin hooks
/ahadmin storage
/ahadmin network
/ahadmin integrity
/ahadmin logs 20
/ahadmin suspicious 20