SleepSkipUltra is a Minecraft sleep plugin for Paper and Folia-compatible servers running 1.20.1+. The plugin jar is built as Java 17 bytecode; the Java runtime requirement follows your server version (for example, Paper/Folia 1.21.x requires Java 21, and 26.1.x requires Java 25+). It replaces rough instant night skips with a cleaner sleep flow: players go to bed, the night accelerates, and the world transitions into morning with overlay/bossbar feedback, sunrise titles, and day tracking.
If you want a Paper sleep plugin or Folia sleep plugin that feels polished instead of abrupt, this is the goal of the project.
Verified in this repository: Paper 1.21.1 / 1.21.11 and Folia 1.20.1 / 1.20.6 / 1.21.11 / 26.1.2.
Declared compatibility target: Paper/Folia 1.20.1 - 26.1.x.
The plugin keeps
api-version: '1.20'and Folia-safe scheduler paths for Paper/Folia-compatible 1.20.1+ servers. Validate your exact server build before production rollout.
Built on Adventure APIs, so a Paper-based server (Paper, Folia, Purpur, etc.) is required. Pure Spigot is not supported.
Plugin folder:
plugins/SleepSkip
- Smooth sunrise transition instead of a hard instant time jump
- Unified sleep flow:
IDLE -> ACCELERATING -> FULL_SKIP - Configurable night acceleration
- Overlay (title) progress UI
- Bossbar UI with configurable color/style, server toggle, and per-player toggle (
/sleep bossbar) - Day counter with sunrise title and
%sleepskip_day_count% - AFK-aware sleep counting with Essentials and CMI hooks
- Thunderstorm daytime sleep support
- Per-world support
- PlaceholderAPI integration (status, progress, state, speed, day count)
- Anti-troll limits: minimum players online, per-world skip cooldown, world whitelist/blacklist
- Weighted sleep via
sleepskip.weight.<n>(a player can count as several sleepers) - Optional sleep rewards (potions, heal, feed, XP, commands, message) for players who slept
- Developer API:
SleepSkipStartEvent(cancellable),SleepSkipCompleteEvent,SleepSkipCancelEvent - Built-in update checker (GitHub Releases) with admin join notifications
- Locales:
en,ru,ua,de,es,fr,pl,pt,zh,it,cs,hi,tr,id,fi - Paper/Folia verified runtime with Folia-safe scheduling paths (1.20.1+)
- Download the latest release from Releases
- Put
SleepSkip-1.10.0.jarinto your serverpluginsfolder - Restart the server
- Configure
plugins/SleepSkip/config.yml
- Better sleep UX for SMP servers
- Smooth night skipping with visible progress
- Folia-safe support for modern server setups
- Flexible config, placeholders, and per-world behavior
| Command | Description |
|---|---|
/sleep reload |
Reload config and locale files |
/sleep status |
Show current sleep status |
/sleep broadcaststatus |
Broadcast current sleep progress |
/sleep forceskip [world] [--instant] |
Force a smooth or instant skip |
/sleep bossbar <on|off|toggle|status> |
Toggle your own sleep bossbar |
Admin commands require sleepskip.admin. /sleep bossbar only needs sleepskip.bossbar.toggle.
sleepskip.admin- access to admin commandssleepskip.bypass- exclude a player from sleep counterssleepskip.bossbar.toggle- allows a player to toggle their own sleep bossbar (default: false)sleepskip.weight.<n>- counts the player asnsleepers whenlimits.weighted-sleepis enabled
| Placeholder | Description |
|---|---|
%sleepskip_sleeping% |
Current sleeping players |
%sleepskip_needed% |
Required players to skip |
%sleepskip_active_players% |
Counted active players |
%sleepskip_remaining% |
Players still needed to skip |
%sleepskip_percent% |
Progress toward the requirement (0-100) |
%sleepskip_state% |
Night state: IDLE, ACCELERATING, FULL_SKIP |
%sleepskip_speed% |
Current night acceleration multiplier |
%sleepskip_is_night% |
true if it is currently night |
%sleepskip_world% |
Current world name |
%sleepskip_day_count% |
Current world day count |
Guards against a single player skipping nights solo, and per-world world filtering. All default to
off, so behaviour is unchanged unless you opt in. Read live, so /sleep reload applies them.
limits:
min-players-online: 0 # require at least N eligible players online before a natural skip (0 = off)
skip-cooldown-seconds: 0 # minimum seconds between skips per world (0 = off); /sleep forceskip ignores it
weighted-sleep: false # honor sleepskip.weight.<n> (a player counts as N sleepers)
world-whitelist: [] # if non-empty, ONLY these worlds are managed (by name)
world-blacklist: [] # these worlds are never managed (wins over the whitelist)With weighted-sleep: true, grant e.g. sleepskip.weight.3 to make a VIP count as three sleepers
(the highest numeric node a player holds wins). Admin /sleep forceskip bypasses the limits.
An optional reward layer for the players who actually slept when a skip completes. Disabled by
default — it does nothing until you opt in. Rewards can include potion effects, full heal, full
feed, experience, a personal message, and console commands (with {player}). Everything is read
once and re-read on /sleep reload, and is applied Folia-safely on each player's region thread.
rewards:
enabled: false # master switch (OFF by default)
only-natural-skips: false # true = no rewards when an admin used /sleep forceskip
heal: false # restore each sleeper to full health
feed: false # restore each sleeper's hunger and saturation
experience: 0 # experience points granted to each sleeper (0 = none)
message: "" # optional MiniMessage sent to each rewarded sleeper
potion-effects: [] # e.g. - { type: REGENERATION, duration-seconds: 10, amplifier: 0 }
commands: [] # e.g. - "give {player} minecraft:bread 4"On startup (and every interval-hours afterwards) the plugin asks the GitHub Releases API whether a
newer version exists, fully off the main thread. When an update is found it logs a notice and, on
join, messages players with sleepskip.admin. Everything is configurable under update-checker:
update-checker:
enabled: true # check GitHub Releases for a newer version on startup
notify-admins-on-join: true # message players with sleepskip.admin when an update is available
interval-hours: 6 # how often to re-check while running (0 disables periodic re-checks)SleepSkipUltra fires Bukkit events around every skip so other plugins can react (rewards, logging, Discord relays, etc.). Events are fired on the thread that owns the affected world (main thread on Paper, the owning region/global thread on Folia), so handlers may touch that world's state directly.
| Event | When | Notes |
|---|---|---|
SleepSkipStartEvent |
A skip is about to begin | Cancellable; exposes sleeping/required counts, recipients, and isForced() |
SleepSkipCompleteEvent |
A skip finished (morning reached) | Exposes getSleepers() (reward targets) and isInstant() |
SleepSkipCancelEvent |
An in-progress skip was aborted | Exposes a Reason |
@EventHandler
public void onSleepComplete(SleepSkipCompleteEvent event) {
for (UUID id : event.getSleepers()) {
Player player = Bukkit.getPlayer(id);
if (player != null) {
player.addPotionEffect(new PotionEffect(PotionEffectType.REGENERATION, 200, 0));
}
}
}Events live in me.Erotoro.sleepskip.api.event; the public SleepSkipType enum is in
me.Erotoro.sleepskip.api. Add SleepSkipUltra as a softdepend/depend in your plugin.yml and
compile against the plugin jar.
SleepSkipUltra targets Paper-compatible server APIs and requires a modern Java runtime. Declared
compatibility is Paper/Folia 1.20.1 - 26.1.x. The current codebase is compiled against the
minimum Folia API 1.20.1 with Java 17 bytecode and keeps api-version: '1.20' for broad 1.20.1+
compatibility.
Do not treat compatibility as a promise that every fork/build combination is identical. Test the exact server build you deploy, especially on Folia or forks with custom sleep behavior.
| Platform | Support |
|---|---|
| Paper/Folia 1.20.1 - 26.1.x | Declared compatibility target |
| Paper 1.21.1 | Verified with automated tests and local server smoke testing |
| Paper 1.21.11 | Verified with local server startup, plugin load, reload, OP/RCON, and bot sleep smoke testing |
| Folia 1.20.1 | Verified startup, plugin load, /plugins, /sleep reload, /sleep status, and shutdown through console stdin |
| Folia 1.20.6 | Verified startup, plugin load, RCON /plugins, /sleep reload, /sleep status, and shutdown |
| Folia 1.21.11 | Verified startup, plugin load, RCON /plugins, /sleep reload, /sleep status, and shutdown |
| Folia 26.1.2 | Verified startup on JDK 25, plugin load, RCON /plugins, /sleep reload, /sleep status, and shutdown |
| Paper-compatible 1.20.1+ | Designed to run via api-version: '1.20'; validate your exact build |
| Folia-compatible 1.20.1+ | folia-supported: true with Folia-safe scheduling paths; validate your exact build |
| Spigot | Not supported; use Paper or a Paper-compatible fork |
Latest local verification pass: 2026-06-24.
./gradlew clean test shadowJar- Paper 1.21.11 build 69 startup with the built plugin jar
- Folia 1.20.1 build 17, Folia 1.20.6 build 6, Folia 1.21.11 build 6, and Folia 26.1.2 build 8 startup/load smoke tests
- Folia 26.1.2 build 8 was tested on JDK 25; Java 21 is rejected by that server line before plugin loading
/sleep reloadsmoke test without bundled-locale save warnings- Natural sleep skip smoke test with bots, including sleeper reward targeting
- RCON administration smoke test (
opcommand) against the 1.21.11 test server
- Paper 1.21.x requires Java 21 at runtime; older 1.20.1-compatible servers may run on their own supported Java baseline.
- Folia/Paper 26.1.x requires Java 25+ at runtime.
- The plugin jar is built as Java 17 bytecode so old Folia 1.20.1 remapping can read it.
- Main verified targets in this pass: Paper 1.21.1/1.21.11 and Folia 1.20.1/1.20.6/1.21.11/26.1.2
- Plugin data folder:
plugins/SleepSkip - Bossbar mode is set via
overlay.mode(title,bossbar,both) and styled underoverlay.bossbar
- Discord: SleepSkipUltra Discord
- Issues: GitHub Issues