Add 'queuerestart' command
All checks were successful
SteamWarCI Build successful

This commit is contained in:
2025-06-10 17:26:20 +02:00
parent edec84c60a
commit 428c63429c

View File

@@ -24,9 +24,11 @@ import com.google.inject.Inject;
import com.google.inject.Module; import com.google.inject.Module;
import com.google.inject.name.Names; import com.google.inject.name.Names;
import com.mojang.brigadier.Command; import com.mojang.brigadier.Command;
import com.mojang.brigadier.context.CommandContext;
import com.velocitypowered.api.command.BrigadierCommand; import com.velocitypowered.api.command.BrigadierCommand;
import com.velocitypowered.api.command.CommandManager; import com.velocitypowered.api.command.CommandManager;
import com.velocitypowered.api.command.CommandMeta; import com.velocitypowered.api.command.CommandMeta;
import com.velocitypowered.api.command.CommandSource;
import com.velocitypowered.api.event.EventManager; import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.event.Subscribe; import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
@@ -71,12 +73,20 @@ public class Persistent {
private final Logger logger; private final Logger logger;
private final Path directory; private final Path directory;
private boolean restartQueued = false;
@Inject @Inject
public Persistent(ProxyServer proxy, Logger logger, @DataDirectory Path dataDirectory) { public Persistent(ProxyServer proxy, Logger logger, @DataDirectory Path dataDirectory) {
instance = this; instance = this;
this.proxy = proxy; this.proxy = proxy;
this.logger = logger; this.logger = logger;
this.directory = dataDirectory; this.directory = dataDirectory;
proxy.getScheduler().buildTask(instance, () -> {
if (!restartQueued) return;
if (!proxy.getAllPlayers().isEmpty()) return;
proxy.shutdown();
}).repeat(10, TimeUnit.SECONDS).schedule();
} }
@Subscribe @Subscribe
@@ -89,6 +99,14 @@ public class Persistent {
.build() .build()
) )
); );
proxy.getCommandManager().register(
new BrigadierCommand(
BrigadierCommand.literalArgumentBuilder("queuerestart")
.requires(commandSource -> commandSource.hasPermission("bungeecore.softreload"))
.executes(this::queueRestart)
.build()
)
);
} }
@Subscribe @Subscribe
@@ -97,6 +115,7 @@ public class Persistent {
} }
public int softreload() { public int softreload() {
restartQueued = false;
PluginContainer container = null; PluginContainer container = null;
ReloadablePlugin plugin = null; ReloadablePlugin plugin = null;
try { try {
@@ -200,4 +219,10 @@ public class Persistent {
ResourceBundle.clearCache(classLoader); ResourceBundle.clearCache(classLoader);
classLoader.close(); classLoader.close();
} }
public int queueRestart(CommandContext<CommandSource> context) {
restartQueued = true;
context.getSource().sendRichMessage("§eRestart queued§8.");
return Command.SINGLE_SUCCESS;
}
} }