# Frequently Asked Questions

## General
### What Java version do I need?
- **Bukkit-family servers** (1.9–1.16): Java 8+
- **Modern servers** (1.17+), Folia, Fabric, Forge, NeoForge: Java 17+
- **Building from source**: Java 21+ (required by the NeoForge module toolchain)
### Does RedstoneReboot support Folia?
Yes. The Bukkit build includes an automatic Folia scheduler bridge that detects Folia at runtime and switches to the region-threaded `GlobalRegionScheduler`. There is also a dedicated `RedstoneReboot-Folia` jar for explicit Folia deployments.
---
## Configuration
### My timezone isn't working
Use a valid Java `ZoneId` string such as `Europe/London`, `America/New_York`, or `UTC`. Short abbreviations like `IST` or `EST` are ambiguous and may not resolve correctly. Run `/reboot status` after startup to confirm the active timezone.
### Can I change the backend without restarting the server?
Yes. Edit `restart-backends.properties` and then run `/reboot reload`. The engine re-reads the backend configuration and re-initializes the active backend live.
### What does `metrics-enabled` do?
When set to `true` in `config.yml`, RedstoneReboot reports anonymous usage statistics to [bStats](https://bstats.org/plugin/bukkit/RedstoneReboot/30751). This helps the development team understand which platforms and features are most used. You can opt out by setting it to `false`.
---
## Commands
### Commands are not appearing
- **Plugin builds**: Check that the plugin loaded by running `/plugins`. Verify `plugin.yml` registered the `reboot` command.
- **Mod builds**: Confirm the dedicated server finished startup and the Brigadier command tree was registered. Check the server log for `RedstoneReboot command registered`.
### What does `/reboot doctor` do?
It runs a diagnostic that shows:
- The active restart backend and its verification state
- The detected server environment (Systemd, Docker, Pterodactyl, or generic)
- Any mismatches between your chosen backend and the detected environment
- Whether a lockout is currently active
---
## PlaceholderAPI
### My placeholders aren't working in MOTD
Make sure you are running RedstoneReboot **v1.3.3+**, which includes null-safety fixes for MOTD compatibility. Earlier versions could fail silently when MOTD plugins requested placeholders during server-list pings before the server fully started.
Also verify that `placeholders.enabled` is set to `true` in `config.yml` and that PlaceholderAPI is installed.
### What placeholders are available?
See the full list on the [Placeholders](Placeholders.md) wiki page.
---
## Backends
### `/reboot doctor` says "Potential Mismatch"
This means the backend you configured in `restart-backends.properties` does not match the environment RedstoneReboot detected. For example, selecting `SYSTEMD` while running inside a Docker container. Review the [Backend Guide](Backends.md) and adjust your `active-backend` value.
### `/reboot doctor` shows DEPEND_ON_HOST but restarts work fine
This is expected if your server is **managed by an external process supervisor** (systemd with `Restart=always`, Docker with `restart: always`, Pterodactyl panel, etc.).
Here is what happens:
1. `ShutdownOnlyBackend.execute()` returns `ACCEPTED` — the shutdown sequence runs normally
2. The server process stops gracefully
3. Your host environment detects the exit and starts a new process
The doctor output reports `DEPEND_ON_HOST` because RedstoneReboot hands off process ownership to the host environment after shutdown.
Check the **Detected Env** line in `/reboot doctor`. If it displays SYSTEMD, DOCKER, or PTERODACTYL alongside DEPEND_ON_HOST, your setup is healthy. You can configure the matching backend in `restart-backends.properties` if you prefer direct API control.
### What is the lockout?
When a backend returns an uncertain result (e.g., a Pterodactyl API timeout), RedstoneReboot enforces a temporary lockout period (`lockout-duration-seconds` in backend config) to prevent conflicting restart calls.
---
## bStats
### How do I opt out of bStats?
Set `metrics-enabled: false` under the `advanced:` section in `config.yml`. Alternatively, you can disable bStats globally through the bStats config file at `plugins/bStats/config.yml`.