Added custom restart cmd with an event and a bar
This commit is contained in:
parent
3285380ece
commit
7c3971aa59
2 changed files with 98 additions and 0 deletions
|
@ -0,0 +1,71 @@
|
|||
package buttondevteam.core;
|
||||
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.boss.BarColor;
|
||||
import org.bukkit.boss.BarFlag;
|
||||
import org.bukkit.boss.BarStyle;
|
||||
import org.bukkit.boss.BossBar;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
|
||||
import buttondevteam.lib.ScheduledServerRestartEvent;
|
||||
import buttondevteam.lib.chat.TBMCCommandBase;
|
||||
|
||||
public class ScheduledRestartCommand extends TBMCCommandBase {
|
||||
private static volatile int restartcounter;
|
||||
private static volatile BukkitTask restarttask;
|
||||
private static volatile BossBar restartbar;
|
||||
|
||||
@Override
|
||||
public boolean OnCommand(CommandSender sender, String alias, String[] args) {
|
||||
int ticks = 20 * 60;
|
||||
try {
|
||||
if (args.length > 0)
|
||||
ticks = Integer.parseInt(args[0]);
|
||||
} catch (NumberFormatException e) {
|
||||
}
|
||||
if (ticks < 20) {
|
||||
sender.sendMessage("§cError: Ticks must be more than 20.");
|
||||
return false;
|
||||
}
|
||||
final int restarttime = restartcounter = ticks;
|
||||
restartbar = Bukkit.createBossBar("Server restart in " + ticks / 20f, BarColor.RED, BarStyle.SOLID,
|
||||
BarFlag.DARKEN_SKY);
|
||||
restartbar.setProgress(1);
|
||||
Bukkit.getOnlinePlayers().stream().forEach(p -> restartbar.addPlayer(p));
|
||||
sender.sendMessage("Scheduled restart in " + ticks / 20f);
|
||||
ScheduledServerRestartEvent e = new ScheduledServerRestartEvent(ticks);
|
||||
Bukkit.getPluginManager().callEvent(e);
|
||||
restarttask = Bukkit.getScheduler().runTaskTimerAsynchronously(MainPlugin.Instance, () -> {
|
||||
if (restartcounter < 0) {
|
||||
restarttask.cancel();
|
||||
restartbar.getPlayers().stream().forEach(p -> restartbar.removePlayer(p));
|
||||
Bukkit.spigot().restart();
|
||||
}
|
||||
if (restartcounter % 200 == 0)
|
||||
Bukkit.broadcastMessage("§c-- The server is restarting in " + restartcounter);
|
||||
restartbar.setProgress(restartcounter / restarttime);
|
||||
restartcounter--;
|
||||
}, 1, 1);
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] GetHelpText(String alias) {
|
||||
return new String[] { //
|
||||
"§6---- Scheduled restart ----", //
|
||||
"This command restarts the server 1 minute after it's executed, warning players every 10 seconds.", //
|
||||
"You can optionally set the amount of ticks to wait before the restart." //
|
||||
};
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean GetPlayerOnly() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean GetModOnly() {
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,27 @@
|
|||
package buttondevteam.lib;
|
||||
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
public class ScheduledServerRestartEvent extends Event {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
|
||||
private int restartticks;
|
||||
|
||||
public ScheduledServerRestartEvent(int restartticks) {
|
||||
this.restartticks = restartticks;
|
||||
}
|
||||
|
||||
public int getRestartTicks() {
|
||||
return restartticks;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue