-
Notifications
You must be signed in to change notification settings - Fork 0
Developer API
Onlysleep provides a public API for other plugins to integrate with. This allows you to check sleep status, query player counts, and hook into sleep events.
Note: Onlysleep does not currently publish artifacts to Maven Central or JitPack. The dependency information below is a template for when publication is configured. For now, add the compiled JAR from Modrinth or GitHub Releases to your project's
libs/directory and depend on it locally.
dependencies {
compileOnly(files("libs/Onlysleep-1.0.0.jar"))
}<dependencies>
<dependency>
<groupId>com.demonzdevelopment</groupId>
<artifactId>onlysleep</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/libs/Onlysleep-1.0.0.jar</systemPath>
</dependency>
</dependencies>softdepend: [Onlysleep]import com.demonzdevelopment.onlysleep.Onlysleep;
import com.demonzdevelopment.onlysleep.manager.SleepManager;
Onlysleep plugin = Onlysleep.getInstance();
SleepManager sleepManager = plugin.getSleepManager();// Check if a player is currently counted as sleeping
boolean sleeping = sleepManager.isPlayerSleeping(player);
// Check if a night skip is scheduled for a world
World world = player.getWorld();
boolean skipping = sleepManager.isSkipScheduled(world);
// Check if a specific player UUID is sleeping in a world
Set<UUID> sleepingPlayers = sleepManager.getSleepingPlayers(world);
boolean isSleeping = sleepingPlayers != null && sleepingPlayers.contains(player.getUniqueId());// Get how many players are needed to skip night in this world
int required = sleepManager.getRequiredSleepingCount(world);
// Get how many are currently sleeping in this world
int sleeping = sleepManager.getSleepingCount(world);
// Get the total number of eligible players in this world
int total = sleepManager.getTotalPlayerCount(world);import com.demonzdevelopment.onlysleep.config.ConfigManager;
ConfigManager config = plugin.getConfigManager();
// Check settings
int sleepPercentage = config.getSleepPercentage();
boolean perWorld = config.isPerWorldSleep();
boolean bossBarEnabled = config.isShowBossBar();
// Check if a world is enabled
boolean worldEnabled = config.isWorldEnabled("world");
// Build a progress bar
String bar = config.buildProgressBar(current, max);
// Get formatted messages
String message = config.getMessage("sleep.enough-sleeping", Map.of(
"player", player.getDisplayName()
));import com.demonzdevelopment.onlysleep.util.PlatformAdapter;
// Get the server platform
PlatformAdapter.ServerPlatform platform = plugin.getPlatform();
String platformName = platform.getDisplayName(); // "Folia", "Paper", "Spigot", "Bukkit"
// Static checks
boolean isFolia = PlatformAdapter.isFolia();
boolean isPaper = PlatformAdapter.isPaper();
boolean isSpigot = PlatformAdapter.isSpigot();
// Version info
String minecraftVersion = PlatformAdapter.getMinecraftVersion(); // "1.21.4"
int majorVersion = PlatformAdapter.getMinecraftMajorVersion(); // 21
String apiVersion = PlatformAdapter.getAPIVersion(); // "1.21.4-R0.1-SNAPSHOT"import com.demonzdevelopment.onlysleep.util.AfkTracker;
// Check if a player is AFK
boolean isAfk = AfkTracker.isAfk(player);
// Update a player's activity timestamp (useful for custom triggers)
AfkTracker.updateActivity(player);
// Remove a player from tracking (e.g., on quit)
AfkTracker.removePlayer(player);import com.demonzdevelopment.onlysleep.util.UpdateChecker;
UpdateChecker checker = plugin.getUpdateChecker();
if (checker != null) {
// Trigger an async update check
checker.checkAsync().thenAccept(result -> {
if (result.isUpdateAvailable()) {
getLogger().info("New version: " + result.getLatestVersion());
}
});
}package com.example.myplugin;
import com.demonzdevelopment.onlysleep.Onlysleep;
import com.demonzdevelopment.onlysleep.config.ConfigManager;
import com.demonzdevelopment.onlysleep.manager.SleepManager;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
public class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
getServer().getPluginManager().registerEvents(new MyListener(), this);
}
public void printSleepStatus(Player player) {
Onlysleep onlysleep = Onlysleep.getInstance();
if (onlysleep == null) {
player.sendMessage("Onlysleep is not installed!");
return;
}
SleepManager sm = onlysleep.getSleepManager();
ConfigManager cm = onlysleep.getConfigManager();
World world = player.getWorld();
int sleeping = sm.getSleepingCount(world);
int required = sm.getRequiredSleepingCount(world);
int total = sm.getTotalPlayerCount(world);
boolean skipping = sm.isSkipScheduled(world);
player.sendMessage("ยง8=== ยงbSleep Status ยง8===");
player.sendMessage("ยง7Sleeping: ยงb" + sleeping);
player.sendMessage("ยง7Required: ยงb" + required);
player.sendMessage("ยง7Total eligible: ยงb" + total);
player.sendMessage("ยง7Skipping: " + (skipping ? "ยงaYes" : "ยงcNo"));
player.sendMessage("ยง7Enabled: " + (cm.isWorldEnabled(world.getName()) ? "ยงaYes" : "ยงcNo"));
player.sendMessage("ยง8=====================");
}
}Onlysleep fires standard Bukkit events when game states change. You can listen for:
-
PlayerBedEnterEventโ When a player enters a bed (cancellable, Onlysleep uses HIGHEST priority) -
PlayerBedLeaveEventโ When a player leaves a bed -
PlayerQuitEventโ When a player disconnects
Onlysleep doesn't currently fire custom events, but you can observe these standard events to detect sleep-related state changes.
To properly depend on Onlysleep without making it required:
name: MyPlugin
version: 1.0.0
main: com.example.myplugin.MyPlugin
softdepend: [Onlysleep]
api-version: '1.16'@Override
public void onEnable() {
if (getServer().getPluginManager().getPlugin("Onlysleep") != null) {
getLogger().info("Hooked into Onlysleep!");
Onlysleep onlysleep = Onlysleep.getInstance();
// Use the API
} else {
getLogger().info("Onlysleep not found - sleep integration disabled");
}
}For developers who want to understand the plugin's structure:
com.demonzdevelopment.onlysleep/
โโโ Onlysleep.java # Main plugin class
โโโ config/
โ โโโ ConfigManager.java # Configuration management
โโโ command/
โ โโโ OnlysleepCommand.java # Command execution
โโโ listener/
โ โโโ SleepListener.java # Event handling
โโโ manager/
โ โโโ SleepManager.java # Core sleep logic
โโโ util/
โโโ AfkTracker.java # Built-in AFK detection
โโโ OfflinePlayerTracker.java # Offline player caching
โโโ PlatformAdapter.java # Server platform detection
โโโ SchedulerAdapter.java # Folia-compatible scheduler
โโโ SleepPlaceholderExpansion.java # PAPI expansion
โโโ UpdateChecker.java # Version checking
The plugin uses a SchedulerAdapter pattern to work on both Bukkit/Spigot/Paper and Folia servers. All world-specific tasks go through the region scheduler on Folia, while global tasks use the global region scheduler. On non-Folia servers, it falls back to the standard Bukkit scheduler.
Onlysleep โ Developed by Demonz Development with โค๏ธ for the Minecraft community.
Licensed under the MIT License.
Links:
๐ Website ยท ๐ป GitHub ยท ๐ฎ Modrinth
๐ฆ Twitter/X ยท ๐ฅ YouTube ยท ๐ธ Instagram
๐ Discord ยท ๐ Reddit ยท ๐ demonzdevelopment@gmail.com