ZRestart is a lightweight Paper-only automatic restart scheduler for Minecraft Java 26.x servers. It schedules native Bukkit.restart() calls, broadcasts configurable countdown warnings across multiple channels, and supports full manual restart control — all while keeping every player, admin, and console-facing message in messages.yml.
Features:
Use Cases:
Commands:
Permissions:
Requirements:
Note: ZRestart targets Paper 26.x and newer only. It does not support Spigot, Folia, Velocity, BungeeCord, proxies, or older Minecraft versions. Bukkit.restart() requires a properly configured settings.restart-script in spigot.yml to actually restart the server — ZRestart will warn you on startup if this looks misconfigured.
Features:
- Automatic restart scheduling using Daily or weekday entries in DAY;HOUR;MINUTE[;REASON] format
- Public read-only API to expose manual and automatic restarts, as well as manual start and stop triggers
- Manual restart countdowns via /zrestart now <interval> [reason]
- Live delay and cancel commands — /zrestart delay <interval> and /zrestart stop
- Player title popups when manual restarts are scheduled or pending restarts are cancelled
- Configurable warning thresholds in flexible formats: 30m, 1:30, 3600, 1h 30m, etc.
- Four warning channels — chat, title, boss bar, and sound — driven from one shared warning list
- Per-warning sound entries with configurable sound name, category, volume, and pitch
- Boss bar with configurable color, overlay, progress, and show-from threshold
- Full MiniMessage support alongside legacy & color codes
- Configurable timezone with proper DST gap/overlap handling and fallback timezone
- Soft PlaceholderAPI support for player-bound messages (optional dependency)
- Versioned config.yml and messages.yml with automatic schema migration
- Timestamped backups created before any auto-update rewrite — config.yml.bak-YYYYMMDD-HHMMSS
- Atomic reload behavior — keeps the previous valid runtime config if a reload fails
- Optional pre-restart console commands with CONTINUE or ABORT failure behavior
- Restart-script diagnostic warning that flags unsafe Bukkit.restart() setups on startup
- Attempts player and world saves before triggering the restart
- Tab-completion for subcommands, interval examples, and configured reasons
- Focused unit tests covering the parser, scheduler, warnings, and reload paths
Use Cases:
- Daily or weekly automated maintenance restarts on a schedule
- One-off manual restarts for hotfixes, plugin reloads, or emergency maintenance
- Network-wide synchronized restarts using a shared timezone configuration
- Run pre-restart console commands (backups, save-all, broadcasts) before every restart
- Display countdown warnings through any combination of chat, title, boss bar, and sound
Commands:
- /zrestart — Show help
- /zrestart time — Show the active or next scheduled restart status
- /zrestart now <interval> [reason] — Start a manual restart countdown
- /zrestart delay <interval> — Delay the active countdown
- /zrestart stop — Cancel the active countdown
- /zrestart reload — Reload config.yml and messages.yml without a server restart
Permissions:
- zrestart.time — Allows /zrestart and /zrestart time (default: true)
- zrestart.admin — Allows manual now/delay/stop actions (default: op)
- zrestart.reload — Allows config and message reload (default: op)
Requirements:
- Paper 26.1.2+
- Java 25+
- (Optional) PlaceholderAPI 2.12.2+ for placeholder support
Note: ZRestart targets Paper 26.x and newer only. It does not support Spigot, Folia, Velocity, BungeeCord, proxies, or older Minecraft versions. Bukkit.restart() requires a properly configured settings.restart-script in spigot.yml to actually restart the server — ZRestart will warn you on startup if this looks misconfigured.
