All versions
3.2.1
Release
KeyAllZ 3.2.12 months ago 159
Compatibility
Minecraft: Java Edition
26.1.2
1.21.x
Platforms
Folia
Paper
Purpur
Changes
Changelog
[3.2.1]
Added
- Periodic timer autosave (every 30 seconds) to reduce data loss on crashes/restarts.
- Immediate timer persistence on admin actions:
/keyallz start/keyallz stop/keyallz loop/keyallz remind/keyallz reload- Saved timer timestamp (
savedAtEpochMillis) for accurate restart recovery.
Fixed
- Fixed timers becoming
Inactiveafter restart in common restart/crash scenarios. - Fixed looped timers restoring with wrong timing after downtime.
- Fixed expired non-loop timers incorrectly restoring after long downtime.
- Fixed reminder interval updates not being respected by runtime timer ticks.
- Fixed reward dedupe reset edge case caused by key-name casing differences.
- Fixed locale-sensitive lowercasing issues by using
Locale.ROOTfor key normalization.
Changed
- Timer restore now compensates for offline time:
- Non-loop timers that expired while offline are skipped.
- Loop timers resume at the correct point in the current cycle.
- Saved timer file is no longer deleted on load; stale files are removed only when no active timers remain.
- Added stronger command input validation:
- Timer duration must be greater than
0. - Reminder interval cannot be negative.
Performance
- Reduced allocation/object churn in reward batch command execution.
- Removed repeated
RewardExecutor/FoliaLibconstruction inside player-batch command paths. - Optimized placeholder timer lookup from map scan to direct normalized lookup.
- Reduced repeated
Bukkit.getOnlinePlayers()calls within the same timer tick/end cycle.
Internal Refactor
- Cleaned up timer persistence flow with explicit persistence entrypoint.
- Refactored player batch console command handling into instance-level execution for reuse and lower overhead.
Notes
- No config format migration required.
- Existing commands and placeholders remain compatible.
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:l4N6FnhK:T6P6OYmK"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:l4N6FnhK:T6P6OYmK"
}

