Tags
Creators
Details
Licensed MIT
Published 3 months ago
Updated 4 hours ago
All versions
1.2.0
Release
OnlySleep 1.2.03 months ago 292
Uploaded by
Compatibility
Minecraft: Java Edition
26.1.x
1.21.x
1.20.x
1.19.x
1.18.x
1.17.x
1.16.x
Platforms
Bukkit
Folia
Paper
Purpur
Spigot
Changes
For the full changelog, visit the Onlysleep Wiki.
[1.2.0] - 2026-05-21
This release fixes critical bugs across the sleep skip system, AFK detection, config handling, and more.
🐛 Bug Fixes
- Fixed Gradual & Speed Skip Completing Instantly:
- Rewrote the time-advance logic using a distance-traveled approach that correctly handles the night→midnight→morning wrap-around. Previously, both modes behaved identically to instant skip because
newTime >= 0was always true on the first tick.
- Rewrote the time-advance logic using a distance-traveled approach that correctly handles the night→midnight→morning wrap-around. Previously, both modes behaved identically to instant skip because
- Fixed "Good Morning" Message Appearing During Night:
- Deferred all completion effects (sounds, titles, messages, cleanup) into a callback that only fires after the gradual/speed timer actually finishes.
- Speed vs Gradual Now Visually Distinct:
- Speed mode (150 ticks/tick, ~2-3s timelapse) and gradual mode (default 30 ticks/tick, ~6-8s sunrise) now feel genuinely different.
- Fixed Bed Leave Unconditionally Cancelling Skip:
- Previously, any single player leaving their bed cancelled the skip for everyone, even if enough players were still sleeping. Now only cancels when the sleeping count drops below the threshold.
- Fixed Spurious "Cancelled" Message During Gradual Skip:
- When vanilla kicked players out of bed at dawn during a gradual transition, a "Player has stopped sleeping" message appeared right before "Good Morning!". Bed-leave events during active transitions are now ignored.
- Fixed Player Quit Not Rechecking Sleep Status:
- When a non-sleeping player quit, the total player count decreased but the sleep threshold wasn't rechecked. Now properly triggers a skip if the remaining sleepers meet the new lower threshold.
- Fixed CMI AFK Detection Always Failing:
- The CMI integration was calling
getCMIPlayer()on the BukkitPlayerclass (which doesn't have that method). Now uses CMI's correct static API:CMI.getInstance().getPlayerManager().getUser(player).
- The CMI integration was calling
- Fixed Config Values Containing
#Being Stripped:- The
ConfigUpdaternaively stripped everything after#as an inline comment, breaking values likesymbol: "■#test". Now respects quoted strings.
- The
- Fixed Misleading "No one needs to sleep" Message:
- When a skip is already in progress, players now see "The night is already being skipped!" instead of the confusing "No one needs to sleep right now."
- Removed Duplicate "Monsters Nearby" Message:
- Vanilla Minecraft already shows its own "You can't sleep — monsters are nearby" message. The plugin's custom message stacked on top, causing players to see it twice.
🛠️ Technical Improvements
- Gradual/speed timer tasks stored in
skipTasksfor proper mid-transition cancellation. activeTransitionsset tracks worlds currently in mid-transition to prevent spurious cancel/message events.HttpURLConnectioninUpdateCheckernow properly disconnected in afinallyblock (prevents socket leaks on 4-hour recurring checks).- Update checker recurring task is now stored and cancelled on
onDisable(). handleUpdatecommand dispatches async update results back to the main thread.AfkTracker.onPlayerMovenow null-checksevent.getTo()(is@Nullableon Paper).WorldUnloadEventlistener cleans up world state from maps to prevent memory leaks.- Added
SleepManager.cleanupWorld()for explicit per-world state cleanup.
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:Tr6srgFS:sBKM9IYL"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:Tr6srgFS:sBKM9IYL"
}

