All versions
1.5.1
Release
[1.5.1] - 2025-12-1710 months ago 21
Compatibility
Minecraft: Java Edition
1.21.x
Platforms
Paper
Purpur
Spigot
Changes
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
New price-world-storage section 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: true
Security
- 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
- New
WorldStorageScannerservice with async batch processing - Integrated into
MarketManager.updatePrices()alongside existing inventory scanning - Uses daemon thread with configurable scan intervals
- Location-based double chest tracking prevents double-counting
Upgrade Notes
- World Storage Scanner is enabled by default for new installations
- Existing configs will use defaults; add
price-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: Expanded
config.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
- Added
DeliveryManagerwith SQLite backend, capped iterations in buy loop, and centralised inventory capacity checks shared with the web tier.
Upgrade Notes
- New config keys under
delivery.*enable/disable deliveries, auto-claim, and cap pending counts. - A new
deliveries.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.
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:jcNfSs4e"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:KXwEZ1KS:jcNfSs4e"
}

