-
Notifications
You must be signed in to change notification settings - Fork 1
Developer API
Integration guide for Bukkit-side plugins that need to interact with RedstoneReboot state or trigger restart actions.
The documented integration path accesses the RedstoneRebootPlugin instance exposed at runtime on Bukkit, Paper, and Folia servers.
Add RedstoneReboot as a soft dependency in your plugin.yml:
softdepend: [RedstoneReboot]Fetch the plugin instance at runtime:
import dev.demonz.redstonereboot.bukkit.RedstoneRebootPlugin;
import org.bukkit.plugin.java.JavaPlugin;
public final class MyPlugin extends JavaPlugin {
@Override
public void onEnable() {
if (!getServer().getPluginManager().isPluginEnabled("RedstoneReboot")) {
return;
}
RedstoneRebootPlugin reboot = (RedstoneRebootPlugin) getServer()
.getPluginManager()
.getPlugin("RedstoneReboot");
if (reboot != null) {
getLogger().info("Hooked into RedstoneReboot " + reboot.getDescription().getVersion());
}
}
}RedstoneRebootPlugin#getRestartManager() provides access to the shared restart controller.
import dev.demonz.redstonereboot.common.manager.RestartReason;
RedstoneRebootPlugin reboot = getRebootPlugin();
boolean scheduled = reboot.getRestartManager().scheduleRestart(
300,
RestartReason.API,
"MyPlugin"
);boolean cancelled = reboot.getRestartManager().cancelRestart();boolean inProgress = reboot.getRestartManager().isRestartInProgress();
int secondsLeft = reboot.getRestartManager().getSecondsUntilRestart();
var nextRestart = reboot.getRestartManager().getNextScheduledRestart();
var info = reboot.getRestartManager().getRestartInfo();Available reasons include:
SCHEDULEDSCHEDULED_APIMANUALEMERGENCY_TPSEMERGENCY_MEMORYAPIUNKNOWN
RedstoneRebootPlugin#getServerLoadMonitor() exposes the health monitor when monitoring is enabled.
var monitor = reboot.getServerLoadMonitor();
if (monitor != null) {
double tps = monitor.getLastTPS();
double memory = monitor.getLastMemoryUsage();
boolean healthy = monitor.isHealthy();
}RedstoneRebootPlugin#getAlertManager() can be used to send player-facing notifications.
import dev.demonz.redstonereboot.common.manager.RestartReason;
var alerts = reboot.getAlertManager();
alerts.sendRestartAlert(60, RestartReason.API);
alerts.sendFinalRestartAlert(RestartReason.API);
alerts.sendRestartCancelledAlert();
alerts.sendEmergencyAlert("Custom emergency condition");
alerts.sendAlert(
"§cCustom warning message",
"§cRestart Alert",
"§eCustom subtitle"
);RedstoneRebootPlugin#getPermissionManager() exposes permission check helpers.
var permissions = reboot.getPermissionManager();
boolean canRestartNow = permissions.canRestartNow(player);
boolean canSchedule = permissions.canScheduleRestart(player);
boolean canCancel = permissions.canCancelRestart(player);
boolean canReload = permissions.canReloadConfig(player);
boolean canViewStatus = permissions.canViewStatus(player);
boolean isAdmin = permissions.hasAdminPermission(player);
boolean receivesNotifications = permissions.shouldReceiveNotifications(player);
boolean hasLuckPerms = permissions.isLuckPermsAvailable();RedstoneRebootPlugin#getConfigManager() exposes the plugin configuration wrapper.
var config = reboot.getConfigManager();
String timezone = config.getTimezone();
boolean monitoringEnabled = config.isMonitoringEnabled();
boolean emergencyEnabled = config.isEmergencyRestartEnabled();
int warningTime = config.getScheduledWarningTime();All platforms now expose RedstoneRebootAPI (no Bukkit cast needed):
import dev.demonz.redstonereboot.common.api.RedstoneRebootAPI;
import dev.demonz.redstonereboot.common.api.RestartListener;
import dev.demonz.redstonereboot.common.api.MessageContext;
import dev.demonz.redstonereboot.common.manager.RestartReason;
if (!RedstoneRebootAPI.isAvailable()) return;
RedstoneRebootAPI api = RedstoneRebootAPI.getInstance();
// listen to lifecycle
api.registerListener(new RestartListener() {
@Override public void onRestartScheduled(int seconds, RestartReason reason, String initiator) {
getLogger().info("restart in " + seconds + "s via " + initiator);
}
@Override public void onRestartCancelled(String prevReason, String prevInitiator) {
getLogger().info("restart cancelled");
}
});
// fire restarts without touching RestartManager directly
api.scheduleRestart(120, RestartReason.API, "MyPlugin");
api.cancelRestart();
api.getSecondsUntilRestart();import dev.demonz.redstonereboot.common.api.MessageAdapter;
import dev.demonz.redstonereboot.common.api.MessageContext;
import dev.demonz.redstonereboot.common.api.DiscordWebhookAdapter;
// 1) lambda adapter (e.g. your JDA/Dis4J bot)
api.registerMessageAdapter(context -> {
String plain = context.toPlainText(); // legacy codes stripped
String platform = context.getPlatformName();
// yourBot.sendEmbed(platform, plain, context.getReason());
myDiscordChannel.sendMessage("[" + platform + "] " + plain).queue();
});
// 2) built-in webhook — no bot needed, add to config.yml instead:
// integrations:
// discord:
// enabled: true
// webhook-url: "https://discord.com/api/webhooks/123/abc"
// username: "RedstoneReboot"
// Or register programmatically:
api.registerDiscordWebhook("https://discord.com/api/webhooks/...", "MyBot");
api.registerMessageAdapter(new DiscordWebhookAdapter(logger, webhookUrl));
// 3) filter if needed
api.registerMessageAdapter(new MessageAdapter() {
public void onMessage(MessageContext ctx) {
if (ctx.getType() == MessageContext.Type.FINAL_ALERT) {
// only final
}
}
});MessageContext.getType() values: SCHEDULED_ALERT, FINAL_ALERT, CANCELLED, EMERGENCY, POSTPONED, GENERIC_CHAT. Use LegacyTextUtil.stripLegacyFormatting() or ctx.toPlainText() for Discord-safe text.
import dev.demonz.redstonereboot.common.api.DumpGenerator;
var core = RedstoneRebootAPI.getInstance().getCore();
Path dump = DumpGenerator.generate(core, core.getDataFolder());
// dump-20260829-140533.txt contains sanitized config, backend, env, history, adaptersOr in-game: /reboot dump (perm redstonereboot.dump) creates plugins/RedstoneReboot/dump-*.txt and mirrors a preview to Discord adapters if registered. Tokens are masked (p***ab, ${env.*} left intact).
- The API is available on all platforms (Bukkit/Paper/Folia/Fabric/Forge/NeoForge) via
RedstoneRebootAPI.getInstance()afteronEnable. - Bukkit
RedstoneRebootPlugin#getCore()/#getRestartManager()etc. remain but preferRedstoneRebootAPI. - Fabric, Forge, NeoForge: obtain
api.getCore().getPlatform()for platform-agnostic checks. - Always null-check
RedstoneRebootAPI.isAvailable()if RedstoneReboot is an optional soft dependency.
RedstoneReboot · Multi-Platform Minecraft Server Restart Engine
Maintained by DemonZ Development