All versions
1.5.2
Release
The Endex 1.5.210 months ago 11
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Spigot
Changes
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 changed
InventoryViewfrom a class to an interface, breaking reflection-based title extraction. - Solution: Implemented UUID-based GUI state tracking with
GuiTypeenum instead of unreliable title matching. - All GUI types (Market, Details, Deliveries, Holdings) now properly track player state.
- Root cause: MC 1.21 changed
Configuration
New cache settings under price-world-storage:
price-world-storage:
cache:
enabled: true
chunk-expiry-seconds: 600
full-refresh-cycles: 5
persist-to-disk: true
Technical
GuiTypeenum:MARKET,DETAILS,DELIVERIES,HOLDINGS,NONEopenGuis: MutableMap<UUID, GuiType>tracks which GUI each player has openChunkScanCachedata class for per-chunk scan results- Event listeners for
InventoryCloseEvent,BlockPlaceEvent,BlockBreakEvent,ChunkUnloadEvent - Cache file:
plugins/TheEndex/scanner-cache.json
Performance
- 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 unload
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:KXwEZ1KS:hLwZKdeC"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:KXwEZ1KS:hLwZKdeC"
}

