This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user