Tags
Creators
Details
All versions
3.0.0
Release
Vault3 3.0.03 months ago 180
Uploaded by
Compatibility
Minecraft: Java Edition
26.2
26.1.x
1.21.x
Platforms
Bukkit
Paper
Purpur
Spigot
Changes
3.0.0
Focused on performance and data safety under load.
Storage
- Transactions no longer perform any I/O on the main thread. Changes are marked dirty and written asynchronously, debounced, and only for balances that actually changed.
- Batch writes are chunked at 500 rows to stay under
max_allowed_packet. - New:
storage.transaction_flush_delay_tickscontrols the debounce window. - New:
storage.recover_emergency_dumpsre-applies balances left by a shutdown that could not reach the database.
Correctness
withdrawPlayer/depositPlayerare now atomic per account, so concurrent callers cannot overwrite each other.- A deposit that would overflow now saturates instead of resetting the account to zero.
- A transfer whose credit leg fails now refunds the sender.
- The in-memory balance map is concurrent; the autosave task can no longer abort partway.
Shutdown and recovery
- Shutdown saves every balance synchronously and retries a failed database write three times.
- If the database cannot be reached, balances are written to
balances-emergency-<timestamp>.ymland applied automatically on the next start. - Console now reports
Saved N player balances before shutdown.
Performance
- Player name lookups no longer scan the entire player-data directory on every call. Resolution now goes through an in-memory cache, the server user cache, and only falls back to a full scan at most once a minute.
- Pending charge requests are fetched off the main thread on join.
- Per-player menu state is released on disconnect.
Configuration
storage.save_on_transaction,storage.autosave_secondsandstorage.transaction_flush_delay_ticksare now documented inconfig.yml.
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:cnhB6cw9:9X5O4XoX"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:cnhB6cw9:9X5O4XoX"
}

