The Endex
The Endex is a Minecraft plugin that turns resources into a dynamic stock market driven by player supply and demand.
Quick challenge
How far can you run before the mobs catch you?
Minecraft check
Confirm your run
Complete the quick check to get your code.
The Endex
The Endex 1.5.8-JAN80235 | Dynamic Market & Addons [1.20.1 - 1.21.x]

*Bring a living economy to your server. Prices move with player demand and supply, with a slick Market GUI, timed events, optional web dashboard, virtual holdings system, and an addon framework.*
---
The Endex is a dynamic economy plugin that brings realistic market mechanics to your Minecraft server. Prices fluctuate based on player trading activity, server-wide item storage, and random market events.
🆕 Version 1.5.8-JAN80235 Highlights:
- ⚡ Zero Performance Impact — 4-layer defense prevents infinite money exploits! - ⚡ Zero Performance Impact — Creates friction cost that blocks profitable arbitrage loops! - ⚡ Zero Performance Impact — Prevents instant buy→sell flipping after purchases! - ⚡ Zero Performance Impact — Manipulated prices drift back to base during idle periods! - ⚡ Zero Performance Impact — Automatically migrates old configs while preserving your settings! - ⚡ Zero Performance Impact — All protections use <0.01% CPU overhead!
Your Economy - ✅ Your Economy — Can't buy low and sell high for instant profit - ✅ Your Economy — Prices automatically correct when manipulation stops - ✅ Your Economy — Must wait 60 seconds after buying before selling - ✅ Your Economy — Fair, balanced gameplay for all players
🔐 Permissions Fix - 🔐 Permissions Fix — Fixed deleteCategory() and saveShopChanges() not working properly! - 🔐 Permissions Fix — Added shop-editor language section to Korean, Russian, Portuguese, and Chinese translations! - 🔐 Permissions Fix — Added missing shop editor and web dashboard permissions to plugin.yml!
Admin Commands Fixed - Admin Commands Fixed — New configurable inflation/deflation system with per-category rates! - Admin Commands Fixed — New editor button to view/edit all market items in one place! - Admin Commands Fixed — Fixed vanilla item price editing in the market editor! - Admin Commands Fixed — `/market remove`, `disable`, `setbase`, `setmin`, `setmax` now persist properly!
---
💰 Dynamic Pricing
Prices react to demand/supply with configurable sensitivity, EMA smoothing, and per-item min/max caps.
🌍 World Storage Scanner
Prices adapt to global item quantities across ALL server storage. Abundant items drop in price; scarce items rise.
📦 Virtual Holdings
Buy items into virtual storage with average cost tracking and profit/loss display. Withdraw when ready.
🖥️ Market GUI
Beautiful interface with categories, search, sorting, quick buy/sell buttons, and real-time price charts.
📸 Screenshots
⚡ Market Events
Time-boxed price multipliers (Ore Rush, Market Crash, etc.) with server broadcasts.
🌐 Web Dashboard
Optional REST API with live updates, charts, item icons, and trading from your browser.
🔌 Addon Framework
Extensible API for custom addons with command routing and web integration.
📬 Delivery System
Overflow protection when inventory or holdings are full. Claim items anytime.
🔗 PlaceholderAPI Support
30+ placeholders for scoreboards, holograms, tab lists, and more. Display prices, trends, holdings, leaderboards, and market stats anywhere.
📊 bStats Metrics
Anonymous usage statistics to help improve the plugin.
---
``` /endex help - Show help menu /endex version - Display plugin version
/market - Open market GUI /shop - Alias for /market /m, /trade, /exchange - Additional market aliases
/market buy <item> <amt> - Purchase items /market sell <item> <amt>- Sell items /market price <item> - Check current price /market top - View top traded items
/market holdings - View your virtual holdings /market withdraw <item> - Withdraw items to inventory /market withdraw all - Withdraw everything /market sellholdings <item> <amt> - Sell directly from holdings
/market delivery list - View pending deliveries /market delivery claim - Claim delivered items /market delivery gui - Open delivery GUI
/market invest buy <item> <amount> /market invest list /market invest redeem-all
/market event list - View active events /market event <name> - Start an event (admin) /market event end <name> - End an event (admin) /market event clear - Clear all events (admin)
Namespaced commands also work:
/endex:shop, /endex:market, /endex:m ```
---
``` theendex.market - Access market GUI (default: true) theendex.buy - Purchase items (default: true) theendex.sell - Sell items (default: true) theendex.holdings - Access holdings system (default: true) theendex.withdraw - Withdraw from holdings (default: true) theendex.invest - Use investments (default: true) theendex.admin - Admin commands (default: op) endex.shop.editor - Access shop editor (default: op) endex.shop.admin - Shop admin commands (default: op) endex.web.trade - Web dashboard trading (default: true) endex.web.admin - View other players' holdings (default: op) ```
---
📋 Requirements
- Economy: Paper/Spigot 1.20.1 - 1.21.x - Economy: 17 or higher - Economy: Vault + Economy plugin (EssentialsX, CMI, etc.)
💾 Storage Options
- YAML (default) or SQLite database - Automatic backups and safe reloads - CSV price history export
---
Configuration Highlights
Virtual Holdings:
```yaml holdings: enabled: true max-per-player: 10000 max-materials-per-player: 100 mode: VIRTUAL ```
World Storage Scanner:
```yaml price-world-storage: enabled: true scan-interval-seconds: 300 sensitivity: 0.01 global-baseline: 1000 containers: chests: true barrels: true shulker-boxes: true anti-manipulation: per-chunk-item-cap: 10000 per-material-chunk-cap: 5000 min-tps: 18.0 ```
Inventory-aware pricing:
```yaml price-inventory: enabled: true sensitivity: 0.02 per-player-baseline: 64 max-impact-percent: 10.0 ```
Web combined holdings:
```yaml web: roles: default: TRADER trader-permission: endex.web.trade admin-view-permission: endex.web.admin holdings: inventory: enabled: true include-enderchest: false cache-seconds: 15 ```
---
Compatibility
- Economy: Paper/Spigot 1.20.1 to 1.21.x - Economy: 17 runtime - Economy: Vault (soft dependency)
Data & Reliability
- YAML storage in the plugin folder by default; optional SQLite database - Periodic backups and orderly saves; safe reload reschedules tasks cleanly - Atomic CSV export to `plugins/TheEndex/history` - Holdings operations use atomic transactions to prevent duplication exploits
API & Addons
- Public API service for other plugins: `org.lokixcz.theendex.api.EndexAPI` - Addon loader with command routing and aliasing - Customizable Web UI override (`web.custom.*`) – export default index.html and modify
---
Changelog
📜 Full Changelog
New in 1.5.8-JAN70109:
- Permissions Fix: Delete category button now properly calls `CustomShopManager.removeCategory()` instead of showing "coming soon" - Permissions Fix: Save button now properly calls `CustomShopManager.reload()` instead of only playing a sound - Permissions Fix: Added shop-editor language section (~60 keys) to Korean, Russian, Portuguese, and Chinese translations - Permissions Fix: Added missing permissions to plugin.yml: `endex.shop.editor`, `endex.shop.admin`, `endex.web.trade`, `endex.web.admin`
New in 1.5.8-JAN60132:
- Shop Editor Category Fix: Fixed "Create Category" dialog in the shop editor not responding to clicks - Clicking compass (Filter mode) or chest (Manual mode) icons now properly creates new categories - Added `CREATE_CATEGORY` state tracking and proper click handling flow - Categories now persist immediately to shop YAML config files
New in 1.5.7-dec1038:
- Polish Language Support: Complete Polish (Polski) translation for plugin and documentation - Config Translations Auto-Extract: 10 language configs now auto-extract to `plugins/TheEndex/config_translations/` on first run - Optimized Default Configuration: Ships with minimal resource usage settings by default - World storage scanning DISABLED by default (easily re-enabled for full features) - Inventory-based pricing DISABLED by default - Save-on-each-update DISABLED by default (reduced disk I/O) - Update interval increased to 120 seconds (was 60) - Prominent optimization guide added to top of config.yml
New in 1.5.7-dec1022:
- Web Dashboard Translation: Google Translate integration for 26+ languages - GUI Bug Fix: Fixed ArrayIndexOutOfBoundsException when middle-clicking items in market details - Performance Indicators: Config options now show `[PERF: LOW/MEDIUM/HIGH]` impact tags - Translated Configs: Pre-translated config files in 9 languages (Chinese, Spanish, French, German, Japanese, Korean, Portuguese, Russian, Arabic) - Market GUI: Increased details inventory size from 27 to 36 slots to fix button placement
New in 1.5.7:
- Sell from Holdings: Sell items directly from virtual holdings without withdrawing to inventory first - Arclight/Hybrid Server Compatibility: Fixed plugin recognition, SLF4J logging, ServiceLoader, and clickable chat links - Market GUI: Item details now shows "Inventory: X | Holdings: Y" with new sell buttons (slots 33 & 35) - Custom Shop GUI: Vanilla items can now be sold from holdings when inventory is insufficient - Web API: New `POST /api/sell-holdings` endpoint for web dashboard selling - New Command: `/market sellholdings <material> <amount>`
New in 1.5.6:
- Minecraft 1.20.1+ Compatibility: Lowered api-version from '1.21' to '1.20' to restore support for 1.20.1+ servers (Arclight, etc.) - In-Game Layout Editor: Complete visual GUI editor for custom shop layouts — no config editing required! - Custom Items Support: Add any material as decoration with personalized names and lores - 5 Editor Modes: Place Category, Place Decoration, Place Button, Edit Slot, Remove Slot - Right-Click Editing: Customize item names and lores via chat prompts - Real-Time Preview: See changes instantly before saving - One-Click Save: Save layouts directly to shop config file - Custom Category Icons: Categories display custom names/lores in /market
New in 1.5.5:
- Economy Plugin Compatibility: Fixed "Economy unavailable" error with late-loading economy plugins (SimpleEconomy, etc.) - Added delayed retry (2 seconds) for economy provider detection - Economy plugins that register with Vault after TheEndex loads are now properly detected - Added common economy plugins to softdepend list to improve load order
New in 1.5.4:
- bStats Metrics: Plugin analytics with custom charts (storage mode, shop mode, web UI, holdings, item count) - Custom Shop Enhancements: Holdings button (slot 45) and Sort button (slot 53) in category pages - Filter-Based Categories: Auto-populate shop categories using material filters instead of manual item lists - Default GUI Improvements: Removed Amount button, Sort moved to slot 49, cleaner layout - Fixed: Hotbar interaction no longer blocked while GUI is open - Fixed: Sort order now correctly shows highest prices/changes first (descending) - Fixed: Holdings button in Custom Shop now properly opens holdings panel - Fixed: `/ex market` command respects `shop.mode` config setting
New in 1.5.3:
- PlaceholderAPI Integration: 30+ placeholders for prices, trends, holdings, leaderboards, and stats - Update Checker: Automatic notifications on startup and OP join when updates available - GUI Customization: Per-GUI config files for layout, colors, slot positions, and categories - Command Aliases: Create custom shortcuts (e.g., `/shop` → `/market`) via commands.yml - Full documentation available at https://lokixcz-plugins.kagsystems.tech/
New in 1.5.2:
- Optimized World Storage Scanner: Complete rewrite with intelligent chunk caching and dirty tracking - Chunk-level caching with configurable expiry — 80-90% reduction in redundant scanning - Event-driven dirty tracking — only re-scans chunks where containers were modified - Disk persistence for cache data across server restarts - GUI Fix (MC 1.21+): Fixed critical bug where market items could be taken and clicks weren't registering - UUID-based GUI state tracking replaces unreliable title matching
New in 1.5.1:
- World Storage Scanner: Prices now react to ALL items stored on your server (chests, barrels, shulker boxes, etc.) - Global item tracking for true server-wide scarcity economics - Anti-manipulation protection: per-chunk caps, per-material limits, suspicious activity logging - TPS-aware throttling: scanner skips if server is under load - Double chest deduplication prevents double-counting - Nested shulker content scanning (items inside shulkers in chests) - Configurable container types and world exclusions
New in 1.5.0:
- Virtual Holdings System: Complete redesign where purchased items go into virtual holdings instead of inventory - Holdings GUI: New panel showing all holdings with quantity, avg cost, current price, and profit/loss - Holdings Commands: `/market holdings` to view, `/market withdraw <item> [amount]` to claim items - Web UI Withdraw: Withdraw buttons on each holding row plus "Withdraw All" button - Minecraft 1.21 Support: Full compatibility with Minecraft 1.21.x servers - New permissions: `theendex.holdings` and `theendex.withdraw` (both default: true) - Configurable limits: `holdings.max-per-player` (default 10,000) and `holdings.max-materials-per-player` (default 100)
New in 1.4.0:
- Virtual Delivery System: overflow purchases now enter a pending delivery queue - Delivery Commands: `/market delivery list|claim|claim-all|gui` - Web + API updates: new `/api/deliveries` endpoints - Fixed buy loop issue on 1.20.1 servers
New in 1.3.x:
- Inventory capacity checked before charging; oversized orders capped - Security hardening: removed reflective access, session token moved to Authorization header - Hashed API token support via `web.api.token-hashes` (SHA-256)
See CHANGELOG.md for full release notes.
---
⚠️ Disclaimer
This plugin was created with the help of AI. While thoroughly tested, please expect potential bugs or issues. Report problems on Discord or GitHub.
Join our Discord!

