A production Skript plugin for Paper/Folia Minecraft servers that limits solo playtime to encourage multiplayer co-op. Players receive 30 minutes of daily solo playtime; when a second player joins, both get unlimited time. Built for a private network with cross-server presence tracking, real-time bossbar HUD, abuse prevention, and a midnight reset system.
- Each player gets 30 minutes of solo playtime per day
- When 2+ players are online, everyone gets unlimited playtime
- Solo time counts down in real time with a color-coded bossbar HUD
- When time runs out, a 60-second matchmaking grace window opens — if a friend joins in time, the session continues
- At midnight, all timers reset automatically
The system is designed to reward co-op play while giving solo players a meaningful daily time bank.
- Real-time MM:SS bossbar display
- Color transitions: green (>15 min) → yellow (>6 min) → red (<6 min)
- Packet deduplication filter — bossbar commands only fire when values actually change, minimizing server overhead
- Automatically detects when 2+ players are online (cross-server aware)
- Switches all players to a blue "Co-op active — infinite playtime!" bossbar
- Resets grace abuse counters when a legitimate second player joins
- 60-second countdown when solo time expires, giving time to find a friend
- Abuse prevention: capped at 3 grace uses per hour per player
- Hourly counter resets automatically at the top of each hour
- Counter resets immediately when a real second player joins (legitimate co-op)
- Daily timer wipe at 00:00 server time
- Latch namespace isolation — reset latch stored in
{clock::*}namespace soclear {solotime::*}cannot silently destroy it - Online players immediately receive a fresh 30-minute credit without needing to relog
- Tracks players across survival and lobby server instances via synced presence arrays
- Headcount aggregates both servers for accurate solo/co-op detection
- Falls back to local player count if proxy sync drops
| Command | Permission | Description |
|---|---|---|
/solotime |
All players | Check your remaining solo time balance |
/resettime |
server.admin |
Reset your own timer |
/resettime <player> |
server.admin |
Reset a specific online player's timer |
/resettime all |
server.admin |
Wipe the full timer database |
/resettime info |
server.admin |
Dump all online player time balances to console |
The system runs on a 1-second master tick engine that:
- Aggregates cross-server headcount from synced presence arrays
- Routes each player to solo countdown or co-op mode
- Manages grace window state and abuse detection
- Pushes bossbar updates only when values change (dedup filter)
- Color thresholds corrected to match documented 15min/6min breakpoints (previously used percentage-based thresholds that were ~9min off)
- Midnight latch moved to
{clock::midnight_latch}namespace to preventclear {solotime::*}from silently destroying it - Online players now receive immediate midnight refill without needing to relog
- Grace bossbar fill accuracy fixed by switching
maxto 60 during grace countdown /resettime <name>fixed invalidplayer arg-1expression that caused parse crashes- Solo time floor clamped to 0 to prevent negative display artifacts
| Namespace | Purpose |
|---|---|
{solotime::*} |
Player time balances and grace state |
{clock::*} |
Midnight and hourly reset latches (isolated from daily wipe) |
{network::survival::*} |
Cross-server survival presence tracking |
{network::lobby::*} |
Cross-server lobby presence tracking |
- Paper or Folia 1.17+ (BossBar API required)
- Skript with SkriptBee/SkBee addon
- Multi-server setup requires a shared variable backend (e.g. SkriptDB or equivalent) for cross-server presence sync
- Drop
solo_timer.skinto your server'splugins/Skript/scripts/folder - Run
/skript reload solo_timerin-game or restart the server - For multi-server setups, configure your shared variable backend to sync
{network::*}variables across instances
The only user-configurable value is the daily time limit, set at the top of the file:
variables:
{solotime::default} = 1800 # seconds (default: 30 minutes)
Change 1800 to any value in seconds to adjust the daily solo time bank.
- Real-time event-driven system design in Skript
- State machine architecture (solo / grace / co-op modes)
- Abuse prevention and edge case handling
- Cross-server presence tracking and fallback logic
- Performance optimization via packet deduplication
- Production debugging and v2.0 regression fixes
MIT