The Endex
1.5.8-JAN80235The Endex is a Minecraft plugin that turns resources into a dynamic stock market driven by player supply and demand.
1.5.8-JAN80235latestThe Endex 1.5.8-JAN80235Jan 7, 2026 [1.5.8-JAN80235] - 2026-01-08
Added
- 🛡️ Comprehensive Anti-Exploit Protection System (4 Layers): - 6% Buy/Sell Spread: 3% markup on purchases + 3% markdown on sales (default: enabled) - Price Mean Reversion: Gradually pulls prices toward base during idle periods at 2% per cycle (default: enabled) - 60-Second Sell Cooldown: Blocks instant buy→sell flipping after purchases (default: enabled) - Fast 60-Second Update Cycles: Prices correct manipulation 2x faster (default: 60s) - Performance Impact: <0.01% CPU overhead - negligible impact on server performance - Config Auto-Update System: - Automatic version detection on plugin startup (config-version: 2) - Preserves ALL user settings during upgrades - Adds missing configuration keys automatically - Creates timestamped backups (config.yml.bak-YYYYMMDD-HHMMSS) - Detailed migration logging with counts of preserved/added keys - Informative header explaining anti-exploit features in migrated configs - New Anti-Arbitrage Configuration Section: -anti-arbitrage.sell-cooldown.enabled- Enable/disable sell cooldown (default: true) -anti-arbitrage.sell-cooldown.duration-seconds- Cooldown duration (default: 60) - Full documentation with trade-offs and performance notes - Cooldown Error Messages (10 Languages): - Addedmarket.sell.cooldown-activekey to all language files - Displays remaining cooldown time when blocked - Translated into: English, German, Spanish, French, Japanese, Korean, Polish, Portuguese, Russian, Chinese - Security-Focused Config Header: - Clear documentation of anti-exploit features at top of config.yml - Performance impact information for each protection layer - Warnings about disabling protections - Balanced recommendations for different server types - Comprehensive Documentation: -ANTI_EXPLOIT_SUMMARY.md- Complete 500+ line technical guide - Exploit explanation and testing procedures - Configuration examples for different security levels - Player experience analysis - Performance metrics and success criteriaChanged
- Config Version: Bumped from 1 to 2 for anti-arbitrage system - Default Spread Values: Updated from 1.5% to 3.0% each side for better protection - Default Update Interval: Changed from 120s to 60s for faster correction - Config Header: Replaced "Optimized for Minimal Resources" with "Anti-Exploit Protection + Minimal Resources"Technical
- New Class:AntiArbitrageCooldowns.kt- In-memory cooldown tracking with ConcurrentHashMap - Modified:MarketCommand.kt- Added cooldown checks to sell/sellHoldings, timestamp recording to buy - Modified:MarketManager.kt- Price reversion system (already implemented in JAN70109) - Modified:Endex.kt- EnhancedcheckAndMigrateConfig()with detailed merge logic and reporting - Build Version: Updated to 1.5.8-JAN80235Fixed
- Economic Exploit: Infinite money generation through buy-sell arbitrage completely blocked - Price Manipulation: Sustained price manipulation prevented by layered defenses - Instant Flipping: Buy→sell loops blocked by mandatory cooldown periodPerformance
- Spread System: <0.001ms per transaction (simple arithmetic) - Price Reversion: ~0.1ms per update cycle (60s intervals) - Sell Cooldown: <0.01ms per check (HashMap lookup) - Total Overhead: ~0.003% CPU usage per player per minute - Memory: ~100 bytes per active player (cooldown tracking)Security
- Exploit Blocking Rate: 100% (all arbitrage loops prevented) - False Positives: Minimal (legitimate mining unaffected) - Attack Vectors Closed: 4 (spread, cooldown, reversion, timing) - Default Security: Maximum (all protections enabled)Migration Notes
- Old config (version 1) automatically migrates to version 2 - All user settings preserved during migration - New anti-arbitrage section added automatically - Backup created before any changes - No manual intervention required1.5.8-JAN70109The Endex 1.5.8-JAN70109Jan 7, 2026 Version 1.5.8-JAN70109 — January 7, 2026
Completed implementation of previously non-functional shop editor features: - Delete Category — Now properly removes categories from custom shops (was showing "coming soon" message) - Save Shop Changes — Now properly persists changes to shop config files (was only playing sound) - Removed misleading TODO —Shop Editor Fixes
saveCategoryItems()had a TODO comment despite being fully implemented
Added missing translation keys and permissions: - 4 Language Files Updated — Added completeLanguage & Permission Fixes
shop-editorsection (~60 keys) to Korean, Russian, Portuguese, and Chinese language files - Missing Permissions — Added 4 permission nodes to plugin.yml that were used in code but not declared: -endex.shop.editor— Shop editor GUI access -endex.shop.admin— Admin actions in custom shops -endex.web.trade— Web dashboard trading -endex.web.admin— View other players' holdings <Warning> If you were experiencing issues with category deletion or shop saving in the editor, upgrade to this version. </Warning>1.5.8-JAN60132The Endex 1.5.8-JAN60132Jan 6, 2026 [1.5.8-JAN60132] - 2026-01-06
Fixed
- Custom Shop Category Creation: 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. - AddedCREATE_CATEGORYstate to EditorState enum for proper state tracking. - ImplementedhandleCreateCategoryClick()handler with full click handling flow. - AddedstartCategoryCreation()helper method for the text input flow. - AddedaddCategory()andremoveCategory()methods to CustomShopManager for persistence.Technical
-EditorState.CREATE_CATEGORYtracks when the create category dialog is open. -openCreateCategoryDialog()now sets session state before displaying the GUI. - Category creation flow: click icon → enter ID → enter name → select filter (if FILTER mode) → save to config. - New categories persist to shop YAML files immediately.1.5.8The Endex 1.5.8Jan 4, 2026 [1.5.8] - 2026-01-04
Added
- Inflation System: New configurable market inflation/deflation system that adjusts prices over time. -inflation.enabled- Toggle the inflation system on/off -inflation.base-rate- Base inflation rate per price update cycle (positive = inflation, negative = deflation) -inflation.variance- Random variance for realistic market simulation -inflation.apply-to-base- Option to permanently adjust base prices -inflation.category-rates- Per-category inflation rate overrides (e.g., ORES, FOOD, BUILDING) - Market Items Manager: New "Market Items" button in/market editorshowing all items from items.yml with pagination. - View all vanilla and custom market items in one place - Left-click to edit prices, Middle-click to toggle enabled/disabled, Shift+Right-click to remove - Full persistence to both items.yml and market.dbFixed
- Market Item Price Editor: Fixed editor not saving prices for vanilla market items. - Created separateMARKET_ITEM_PRICEstate with proper slot layout (11, 13, 15 for base/min/max) - Added dedicated input handlers for market item prices - Now properly syncs to bothitems.ymlandmarket.db- /market remove: Now properly removes items from bothitems.ymlANDmarket.db(previously only removed from items.yml) - /market disable: Now properly syncs disabled state to market manager (no longer requires restart) - /market setbase/setmin/setmax: Now properly persists price changes to SQLite databaseTechnical
- AddedEditorState.MARKET_ITEM_PRICEfor vanilla market item editing - AddedInputType.MARKET_BASE_PRICE,MARKET_MIN_PRICE,MARKET_MAX_PRICE- AddedcurrentMarketMaterialto EditorSession for tracking edited material - AddedhandleMarketItemPriceClick()and related input handlers - AddedgetInflationRateForMaterial()helper in MarketManager - Inflation delta integrated into existing price update cycle1.5.7-DEC1038The Endex 1.5.7-DEC1038Dec 31, 2025 [1.5.7-dec1038] - 2025-12-31
Added
- Polish Language Support: Complete Polish (Polski) translation for both plugin and documentation. - Newlang/pl.ymllanguage file with full Polish translations - Newconfig_translations/config_pl.ymlwith Polish config comments - Complete Polish documentation indocs/mintlify/pl/(18 translated pages) - Documentation navigation updated with Polish language option - Config Translations Auto-Extraction: Translated config files are now automatically extracted toplugins/TheEndex/config_translations/on first run - 10 language configs available: English, Chinese, Spanish, French, German, Japanese, Korean, Portuguese, Russian, Polish - Users can copy their preferred language config toconfig.ymlChanged
- Optimized Default Configuration: Config now ships with minimal resource usage settings by default. - World storage scanning DISABLED by default (biggest CPU saver) - 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) - Added prominent optimization guide at top of config.yml - All performance-intensive features clearly marked and documentedConfiguration
New default values (optimized for minimal resource usage):
To enable full features, set these back to their previous values. See config.yml header for guidance.update-interval-seconds: 120 # Was 60 save-on-each-update: false # Was true price-inventory.enabled: false # Was true price-world-storage.enabled: false # Was true1.5.7-DEC1022The Endex 1.5.7-DEC1022Dec 30, 2025 [1.5.7-dec1022] - 2025-12-30
Added
- Web Dashboard Translation: Google Translate integration for 26+ languages in the web dashboard - Language selector dropdown in header (between player name and theme toggle) - Supports: English, Chinese, Spanish, French, German, Japanese, Korean, Portuguese, Russian, Italian, Thai, Vietnamese, Indonesian, Turkish, Polish, Dutch, Swedish, Danish, Finnish, Czech, Romanian, Ukrainian, Hindi, Bengali, Tagalog, Arabic - Styled to match dark theme with visible text - Config Performance Indicators: Added[PERF: LOW/MEDIUM/HIGH]tags to config.yml options to help server owners understand performance impact - Translated Config Files: Pre-translated config files in 9 languages available inresources/translations/- Chinese (Simplified), Spanish, French, German, Japanese, Korean, Portuguese, Russian, ArabicFixed
- Market GUI ArrayIndexOutOfBoundsException: Fixed "Index 33 out of bounds for length 27" error when middle-clicking items in the market details panel - Root cause:openDetails()created a 27-slot inventory but placed buttons at slots 33 and 35 - Solution: Increased inventory size from 27 to 36 slots to accommodate all buttonsChanged
- Web Dashboard: Replaced broken AutoTranslate.js library (ES6 module incompatibility) with reliable Google Translate widgetTechnical
- MarketGUIopenDetails()now uses 36-slot inventory (was 27) - Holdings sell buttons remain at slots 33 (Sell 1) and 35 (Sell All) - Google Translate widget initialization viagoogleTranslateElementInit()callback - CSS styling for.goog-te-combodropdown to match dark theme1.5.7The Endex 1.5.7Dec 29, 2025 [1.5.7] - 2025-12-29
Added
- Sell from Holdings: Players can now sell items directly from their virtual holdings without withdrawing to inventory first. - Market GUI: Item details panel now displays "Inventory: X | Holdings: Y" and includes new "Sell 1 Holdings" and "Sell All Holdings" buttons. - Custom Shop GUI: Vanilla items can now be sold from holdings when inventory is empty or insufficient. - Web API: NewPOST /api/sell-holdingsendpoint for selling holdings via web dashboard. - Command: New/market sellholdings <material> <amount>command for direct holdings sales.1.5.6-DEC0759The Endex 1.5.6-DEC0759Dec 28, 2025 [1.5.6-DEC0759] - 2025-12-28
Fixed
- Minecraft 1.20.1 Compatibility: Loweredapi-versionfrom'1.21'to'1.20'to restore support for 1.20.1+ servers - This was preventing the plugin from loading on Arclight and other 1.20.x servers1.5.6-DEC0338The Endex 1.5.6-dec0338Dec 21, 2025 [1.5.6-DEC0338] - 2025-12-22
Fixed
- Plugin Data Folder: Reverted plugin name back toTheEndexto keep data folder asplugins/TheEndex/- Previous snapshot accidentally changed folder toplugins/Endex/, breaking existing configs1.5.6-DEC0252The Endex 1.5.6-dec0252Dec 21, 2025 [1.5.6-DEC0252] - 2025-12-22
Fixed
- `/shop` Command: Fixed/shopnot working — command now properly registered as alias for/market- GUI Conflict with Other Plugins: Fixed issue where The Endex would intercept inventory clicks in other plugins' GUIs - Added title verification to click/drag handlers to prevent intercepting non-Endex inventories - Improved inventory close handler to properly clean up tracking when another plugin opens a GUI - Command Alias Registration: FixedCommandAliasManagernot reading theshortcutssection fromcommands.yml- Now properly parses nested shortcut config (target, permission, description)Changed
- Plugin Namespace: Changed fromTheEndextoEndexfor cleaner command namespacing - Commands now useendex:prefix (e.g.,/endex:shop,/endex:market) - Data folder remainsplugins/TheEndex/for backwards compatibility - Command Aliases: Added built-in aliases in plugin.yml for better Bukkit registration -/marketaliases:shop,m,trade,exchange,bazaar-/endexaliases:ex1.5.6The Endex 1.5.6Dec 20, 2025 [1.5.6] - 2025-12-21
Added
- In-Game Layout Editor: Complete visual GUI editor for custom shop layouts — no config editing required! - Open with/endex shop editor <shop-id>(e.g.,/endex shop editor main) - 5 Editor Modes: Place Category, Place Decoration, Place Button, Edit Slot, Remove Slot - Custom Items Support: Add any material as decoration or custom items with personalized names and lores - Visual Preview: See changes in real-time before saving - Right-Click Editing: Right-click any placed item to customize its display name and lore - Chained Prompts: Edit name then lore in sequence via chat input - State Preservation: Navigate between editor dialogs without losing unsaved changes - One-Click Save: Save button writes layout directly to shop config file - Custom Category Icons: Categories can now have fully customized display names and lores - Set via layout editor or directly in shop config - Custom names/lores display correctly in/marketplayer viewTechnical
-TITLE_PREFIX = "§4§l⚙ "distinguishes editor GUIs from player shop GUIs -reopenLayoutEditor()preservestempLayoutandunsavedChangesstate across dialogs - Mode priority system ensures Edit/Remove modes work on existing items - Chained text input viapendingInputTypefor name → lore flow1.5.5The Endex 1.5.5Dec 19, 2025 [1.5.5] - 2025-12-20
Fixed
- 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 tosoftdependlist to improve load orderTechnical
- Expandedsoftdependin plugin.yml to include: Essentials, EssentialsX, CMI, SimpleEconomy, Economy, iConomy, Fe, XConomy, PlayerPoints, TokenManager, CoinsEngine, GemsEconomy, RoyaleEconomy, TheNewEconomy - Scheduled delayed economy check runs 40 ticks (2 seconds) after server finishes loading1.5.4The Endex 1.5.4Dec 18, 2025 [1.5.4] - 2025-12-19
Added
- bStats Metrics Integration: Plugin analytics for tracking usage patterns. - Plugin ID: 28421 - Custom charts: storage mode, shop mode, web UI status, holdings status, tracked items count - Fully anonymized data collection via bStats platform - Custom Shop GUI Enhancements: - Holdings Button: View your virtual holdings directly from category pages (slot 45) - Sort Button: Cycle through sorting options (Name, Price, Change) in category pages (slot 53) - Filter-Based Auto-Population: Categories now usefilterproperty to automatically populate items - Items matching category filters are dynamically included without manual listing - Default Market GUI Improvements: - Removed Amount button from main market view for cleaner interface - Sort button moved to slot 49 for better layout - Sort order fixed: Price and Change now sort descending (highest first)Fixed
- Hotbar Click Blocking: Fixed issue where players couldn't interact with their hotbar while market GUI was open - Sort Order: Price and Change sorting now correctly shows highest values first (descending order) - Holdings Button: Holdings icon in Custom Shop GUI now properly opens the holdings panel - `/ex market` Command: Now correctly opens DEFAULT or CUSTOM shop based onshop.modeconfig settingTechnical
- bStats dependency added with proper Shadow relocation (org.bstats→org.lokixcz.theendex.bstats) -MarketGUI.openHoldings()made public for cross-GUI access - Improved click event handling with proper cancellation placement1.5.3## [1.5.3] - 2025-12-18Dec 17, 2025 Added
- PlaceholderAPI Integration: Full support for PlaceholderAPI with 30+ placeholders for scoreboards, holograms, and other plugins. - Market data:%endex_price_<MATERIAL>%,%endex_trend_<MATERIAL>%,%endex_supply_<MATERIAL>%,%endex_demand_<MATERIAL>%- Top items:%endex_top_price_<1-10>%,%endex_bottom_price_<1-10>%,%endex_top_gainer_<1-10>%,%endex_top_loser_<1-10>%- Holdings:%endex_holdings_total%,%endex_holdings_count%,%endex_top_holdings_<1-10>%- Statistics:%endex_total_items%,%endex_total_volume%,%endex_average_price%,%endex_active_events%- Update Checker: Automatic update notifications for server administrators. - Checks Spigot and Modrinth for new versions on startup. - Console banner when updates are available. - OP players notified on join when updates available. - Configurable viaupdate-checker.enabledandupdate-checker.notify-ops. - GUI Customization System: Full GUI layout and appearance customization. - Per-GUI config files inguis/folder:market.yml,details.yml,holdings.yml,deliveries.yml. - Customizable titles, sizes, and slot positions. - Category definitions with custom icons and materials. - Background filler and navigation button customization. - Command Aliases System: Custom command alias registration. - Configure aliases incommands.ymlfor any market subcommand. - Example:/shop→/market,/stock→/market holdings. - Supports tab completion inheritance.Configuration
New config files added:# config.yml additions update-checker: enabled: true notify-ops: true # guis/market.yml, details.yml, holdings.yml, deliveries.yml # commands.yml for aliasesDependencies
- PlaceholderAPI added as soft dependency (optional but recommended).Technical
-EndexExpansionclass for PlaceholderAPI expansion. -UpdateCheckerclass with Spigot API and Modrinth API integration. -GuiConfigManagerfor loading and managing GUI configurations. -CommandAliasManagerfor dynamic command alias registration. -SqliteStore.getAllPlayersHoldings()method for leaderboard placeholders.1.5.2The Endex 1.5.2Dec 17, 2025 Added
- Optimized World Storage Scanner: Complete rewrite with intelligent chunk caching and dirty tracking. - Chunk-level caching with configurable expiry (default: 600 seconds). - Event-driven dirty tracking — only re-scans chunks where containers were modified. - Disk persistence for cache data across server restarts. - Empty inventory skip optimization for faster scanning. - Material set-based O(1) container type filtering.Fixed
- GUI Click Handling (MC 1.21+): Fixed critical bug where market GUI items could be taken and clicks weren't registering on Minecraft 1.21+ servers. - Root cause: MC 1.21 changedInventoryViewfrom a class to an interface, breaking reflection-based title extraction. - Solution: Implemented UUID-based GUI state tracking withGuiTypeenum instead of unreliable title matching. - All GUI types (Market, Details, Deliveries, Holdings) now properly track player state.Configuration
New cache settings underprice-world-storage:price-world-storage: cache: enabled: true chunk-expiry-seconds: 600 full-refresh-cycles: 5 persist-to-disk: trueTechnical
-GuiTypeenum:MARKET,DETAILS,DELIVERIES,HOLDINGS,NONE-openGuis: MutableMap<UUID, GuiType>tracks which GUI each player has open -ChunkScanCachedata class for per-chunk scan results - Event listeners forInventoryCloseEvent,BlockPlaceEvent,BlockBreakEvent,ChunkUnloadEvent- Cache file:plugins/TheEndex/scanner-cache.jsonPerformance
- Reduced redundant container scanning by 80-90% on stable servers - Chunk caching eliminates repeated full scans of unchanged areas - Dirty tracking ensures only modified chunks are re-scanned - Memory-efficient with automatic cache cleanup on chunk unload1.5.1[1.5.1] - 2025-12-17Dec 16, 2025 Added
- World Storage Scanner: Scans ALL containers (chests, barrels, shulker boxes, etc.) across loaded chunks to provide truly dynamic, server-wide pricing based on global item scarcity/abundance. - Global Item Tracking: Prices now react to total items stored across the entire server, not just player inventories or trades. - Anti-Manipulation Protection: Per-chunk item caps, per-material caps, and suspicious activity logging prevent storage farm exploits. - TPS-Aware Throttling: Scanner automatically skips or aborts if server TPS drops below threshold (default 18.0). - Double Chest Deduplication: Ensures double chests are only counted once, preventing inflation. - Configurable Container Types: Enable/disable scanning for chests, barrels, shulker boxes, hoppers, droppers, dispensers, furnaces, and brewing stands. - Nested Shulker Scanning: Optionally counts items inside shulker boxes stored in other containers. - World Exclusion: Skip creative, minigame, or spawn worlds from scanning.Configuration
Newprice-world-storagesection in config.yml:price-world-storage: enabled: true scan-interval-seconds: 300 sensitivity: 0.01 global-baseline: 1000 max-impact-percent: 5.0 chunks-per-tick: 50 containers: chests: true barrels: true shulker-boxes: true hoppers: false droppers: false dispensers: false furnaces: false brewing-stands: false scan-shulker-contents: true excluded-worlds: [] anti-manipulation: per-chunk-item-cap: 10000 per-material-chunk-cap: 5000 min-tps: 18.0 log-suspicious: trueSecurity
- Storage farm manipulation mitigated via per-chunk caps - Coordinated price manipulation reduced through proportional contribution limits - Admin alerts for suspicious storage patterns (chunks exceeding item caps)Technical
- NewWorldStorageScannerservice with async batch processing - Integrated intoMarketManager.updatePrices()alongside existing inventory scanning - Uses daemon thread with configurable scan intervals - Location-based double chest tracking prevents double-countingUpgrade Notes
- World Storage Scanner is enabled by default for new installations - Existing configs will use defaults; addprice-world-storagesection to customize - Performance impact is minimal due to batched async processing and TPS monitoring[1.4.0] - 2025-10-30
Added
- Virtual Delivery System: Overflow purchases now route into a per-player pending deliveries queue backed by SQLite, protecting against item loss and duplication. Includes FIFO claims, optional auto-claim on login, and configurable per-player caps. - Market GUI Integration: Ender Chest button exposes deliveries with badges, per-material claim buttons, and a "Claim All" option for quick retrieval. - Delivery Commands:/market delivery list|claim|claim-all|guiprovide complete console/player management for pending items. - Web API Endpoints: Added/api/deliveriesand/api/deliveries/claimplus updated docs payloads so the web dashboard reflects deliveries in real time. - Documentation Enhancements: Expandedconfig.ymlinline comments covering delivery settings with recommendations and gotchas.Fixed
- Resolved the long-standing bug where/market buy <material> 64occasionally delivered just a single item on 1.20.1 servers; delivery loop now respects stack sizes and correctly routes overflow.Security
- Delivery storage uses atomic transactions and consistent rollback handling to guard against race conditions and duplication attempts.Technical
- AddedDeliveryManagerwith SQLite backend, capped iterations in buy loop, and centralised inventory capacity checks shared with the web tier.Upgrade Notes
- New config keys underdelivery.*enable/disable deliveries, auto-claim, and cap pending counts. - A newdeliveries.dbis generated on first launch when deliveries are enabled; no migration required from 1.3.x. - Existing behavior remains unchanged when the delivery system is disabled.1.4.0## [1.4.0] - 2025-10-30Oct 30, 2025 Added
- Virtual Delivery System: When purchasing items that exceed inventory capacity, overflow items are automatically sent to a pending delivery queue instead of being lost. - SQLite-based delivery storage (deliveries.db) with transaction safety to prevent race conditions and duplication exploits. - FIFO (First-In-First-Out) claiming with per-material tracking. - Automatic database-first claiming approach prevents item duplication on logout/crash. - Configurable settings:delivery.enabled,delivery.auto-claim-on-login,delivery.max-pending-per-player. - Market GUI Integration: Access deliveries directly from the market interface. - Ender Chest button in slot 51 displays pending item count badge. - Full deliveries panel with material breakdown and claim buttons. - Left-click to claim all of a material, right-click to claim one stack. - "Claim All" button (slot 49) for bulk claiming with progress feedback. - Delivery Commands: Console and command-block support for delivery system. -/market delivery list- View pending deliveries with formatted output. -/market delivery claim <material> [amount]- Claim specific items. -/market delivery claim-all- Claim all pending deliveries. -/market delivery gui- Open market GUI directly to deliveries panel. - Web API Endpoints: Full delivery system integration for web dashboard. -GET /api/deliveries- List pending deliveries (returns{enabled, deliveries, total}). -POST /api/deliveries/claim- Claim deliveries (body:{material?, amount?}for specific or all). - Updated/docsendpoint with delivery API documentation. - Enhanced Configuration Documentation: Comprehensive inline comments inconfig.ymlexplaining delivery system settings with pros/cons and recommendations (200+ lines of documentation).Fixed
- Critical: Fixed buy loop bug where purchasing 64 items would only deliver 1 on 1.20.1 servers. Buy logic now properly calculates overflow and sends all excess items to delivery in a single operation.Security
- Race Condition Protection: Atomic transactions inaddPending()withconn.autoCommit=falseprevent concurrent purchases from exceedingmax-pending-per-playerlimit. - Duplication Prevention: Database-first approach inclaimMaterial()removes items from database before giving to player, preventing logout duplication exploits. - Transaction Safety: All delivery database operations wrapped in explicit try-catch with rollback to prevent data corruption on errors.Technical
-DeliveryManagerclass (426 lines) handles all delivery operations with SQLite backend. - Per-player delivery limits with atomic transaction checks. - Inventory capacity calculation accounts for partial stacks and empty slots. - Delivery system fully integrated into existing buy/sell flow inMarketCommandandWebServer.Upgrade Notes
- Database: Newdeliveries.dbcreated automatically on first launch with delivery system enabled. - Config: Three new keys added with defaults (seeconfig.ymlfor full documentation): -delivery.enabled: true- Enable/disable delivery system. -delivery.auto-claim-on-login: false- Automatically attempt to claim deliveries on player join. -delivery.max-pending-per-player: 100000- Maximum items that can be pending per player. - No Breaking Changes: Existing functionality unchanged. Delivery system activates only when inventory is full during purchase. - Migration: Update from 1.3.1 is seamless. No data migration required.Acknowledgments
- Continued thanks to ChunkCraft server for detailed bug reporting and testing feedback throughout v1.4.0 development!1.3.0## [1.3.0] - 2025-09-26Oct 30, 2025 Security / Hardening
- Removed all reflective private field access (replaced with explicit getters and helper methods) to improve transparency and reduce maintenance risk. - Web session auth now migrates?session=token intoAuthorization: Bearer <session>header; SPA strips token from the URL (prevents accidental leakage via history/referrer). - Added hashed API token support (web.api.token-hashes) using SHA-256 lowercase hex digests with constant-time comparison. - Plainweb.api.tokensstill accepted for backward compatibility; one-time deprecation warning when hashes also configured.1.2.0The Endex 1.2.0Sep 25, 2025 [1.2.0] - 2025-09-25
Added
- Custom Web UI override (web.custom.*): externalindex.html& static assets, auto-export starter file, optional reload bypass. - Admin commands:/endex webui export,/endex webui reloadfor managing exported UI. - Unified web market view with advanced filters (category, price bounds, trend, sort fields & direction) and collapsible persistent filter panel. - Category auto-population & improved watchlist/group toggles.Changed
- Removed legacy Addons tab and/api/addonsusage; addons now integrate as items or custom routes. - Simplified live update flow (single item stream via WS/SSE/polling). - Refactored layout (two-row search + filters) for clarity and responsiveness. - Copy tasks marked untracked to prevent Gradle state errors with transient DB journal files.Fixed
- UI tab reversion issue resolved by removing tab abstraction. - Async misuse (awaitin sync render) eliminated; stabilized frontend rendering. - Ensured Vault economy deductions occur on main thread; corrected SELL handling logic.Removed
- Addons navigation UI and related frontend logic.Documentation
- Addeddocs/CUSTOM_WEBUI.mdand updated config withweb.custom.*keys.Compatibility
- Built against Paper API 1.20.1; expected to operate on 1.21.x.Upgrade Notes
- If you relied on Addons tab navigation, migrate to item-based representation or custom web routes. - Enableweb.custom.enabledto customize UI; restart to export default scaffold.1.1.0The Endex 1.1.0Aug 29, 2025 [1.1.0] - 2025-08-29
Added
- Web UI item icons served from resource packs with/icon/{material}endpoint (public, ETag caching) - Resource pack extraction/usage viaweb.icons.*with support for bothitem/itemsandblock/blocksfolders - Aliases for tricky materials (e.g., PUMPKIN, CACTUS) to reduce 404s across pack variations - Addons tab in the UI and/api/addonsendpoint (auth required) - Developer HTTP API documentation (docs/API.md) and reverse proxy guide (docs/REVERSE_PROXY.md)Changed
- Improved client error fallback for missing icons (initials badge) - More informative server logs (actual paths tried for missing icons whenlogging.verbose=true)Fixed
- Kotlin string interpolation in logs and headers (no longer prints$varsliterally) - Javalin route syntax for path params (now uses/icon/{material})Compatibility
- Built against Paper API 1.20.1; expected to work on newer Paper versionsHighlights
- HTTP API reference: seedocs/API.md- Reverse proxy examples (HTTPS):docs/REVERSE_PROXY.md- Config keys for icons and addons:docs/CONFIG.md1.0.0The Endex 1.0.0Aug 28, 2025 [1.0.0] - 2025-08-28
Initial releaseAdded
- Demand-driven dynamic pricing with clamping and rolling history - Full-featured market GUI (pagination, sorting, category filters, text search, details view) - Vault economy integration with configurable transaction tax - Market events system (stackable multipliers with cap, broadcasts, persistence across restarts) - Investments (buy, list, redeem-all) - YAML storage (default) and optional SQLite store with automatic seeding from YAML - Player preference persistence (amount, sort, category, search, last page) - ASCII sparkline trends and CSV history export - Config versioning and automated migration on startup/reload - Admin commands, safe reload, item blacklist, and CSV export command - /endex version command to report plugin version and storage modeCompatibility
- Server: Paper/Spigot 1.20.1 to latest (built against API 1.20.1) - Java 17 runtime - Economy: Vault (soft dependency)Notes
- On Paper, the SQLite driver is fetched automatically viaplugin.ymllibraries (smaller plugin JAR). On plain Spigot, use YAML storage by default or install the SQLite driver manually if enabling SQLite.
Similar projects
Plugin →VeinMiner
Mine the whole vein on mining a single ore/block. Make the tedious mining experience to something satisfying and fun! FTB Ultimine alternative
99.3MSueta
Let Me Despawn
Improves performance by tweaking mob despawn rules. Say bye to pesky unintentional persistent mobs.
25MSueta
VeinMiner Enchantment
Veinminer Addon - Adds vineminer enchantment to enchanting tables. Only tools with the enchantment can veinmine
18MSueta
JourneyMap
Real-time map used for mapping in-game or your browser as you explore.
14.7MSueta
Emotecraft
Create your own emotes in Minecraft.
7.5MSueta
Simple Tpa
A simple tpa plugin which sends requests
5.4MSueta