feat: add maintenance mode

This commit is contained in:
2026-06-11 00:19:54 +08:00
parent c0289c55d3
commit 113ae24afe
14 changed files with 490 additions and 3 deletions
@@ -42,6 +42,7 @@ public final class CommandRegistry {
register("repair", "essentialsc.command.repair", ModuleManager.PLAYER, "cn.infstar.essentialsC.commands.RepairCommand", "rep");
register("tpsbar", "essentialsc.command.tpsbar", ModuleManager.TPSBAR, "cn.infstar.essentialsC.commands.TpsBarCommand");
register("mobdrops", "essentialsc.mobdrops.enderman", ModuleManager.MOB_DROPS, "cn.infstar.essentialsC.commands.MobDropCommand");
register("maintenance", "essentialsc.command.maintenance", ModuleManager.MAINTENANCE, "cn.infstar.essentialsC.commands.MaintenanceCommand", "maint");
registerSubCommand("admin", "essentialsc.command.admin", ModuleManager.ADMIN_MODE, "cn.infstar.essentialsC.commands.AdminCommand");
}
@@ -37,6 +37,9 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
EssentialsC.getLangManager().reload();
plugin.getModuleManager().reload();
CommandRegistry.clearCache();
if (plugin.getMaintenanceManager() != null && plugin.getModuleManager().isEnabled(ModuleManager.MAINTENANCE)) {
plugin.getMaintenanceManager().reload();
}
TpsBarService tpsBarService = plugin.getTpsBarManager();
if (tpsBarService != null) {
if (plugin.getModuleManager().isEnabled(ModuleManager.TPSBAR)) {
@@ -65,6 +68,9 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
EssentialsC.getLangManager().reload();
plugin.getModuleManager().reload();
CommandRegistry.clearCache();
if (plugin.getMaintenanceManager() != null && plugin.getModuleManager().isEnabled(ModuleManager.MAINTENANCE)) {
plugin.getMaintenanceManager().reload();
}
TpsBarService tpsBarService = plugin.getTpsBarManager();
if (tpsBarService != null) {
if (plugin.getModuleManager().isEnabled(ModuleManager.TPSBAR)) {
@@ -201,6 +207,10 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
otherCommands.append(lang.getString("help.commands.tpsbar")).append("\n");
hasOtherCommands = true;
}
if (CommandRegistry.isAvailable("maintenance") && player.hasPermission("essentialsc.command.maintenance")) {
otherCommands.append(lang.getString("help.commands.maintenance")).append("\n");
hasOtherCommands = true;
}
if (hasOtherCommands) {
sendPrefixed(player, lang.getString("help.section-other"));
@@ -272,6 +282,8 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
{"repair", "essentialsc.command.repair"},
{"rep", "essentialsc.command.repair"},
{"tpsbar", "essentialsc.command.tpsbar"},
{"maintenance", "essentialsc.command.maintenance"},
{"maint", "essentialsc.command.maintenance"},
{"mobdrops", "essentialsc.mobdrops.enderman"},
{"admin", "essentialsc.command.admin"},
{"version", null},
@@ -324,6 +336,11 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
}
return players;
}
if ((subCmd.equals("maintenance") || subCmd.equals("maint"))
&& sender.hasPermission("essentialsc.command.maintenance")) {
return completeMaintenanceArgs(args[1]);
}
}
return new ArrayList<>();
@@ -339,4 +356,15 @@ public class HelpCommand extends BaseCommand implements TabCompleter {
}
return completions;
}
private List<String> completeMaintenanceArgs(String partialInput) {
List<String> completions = new ArrayList<>();
String partial = partialInput.toLowerCase();
for (String option : List.of("on", "off", "status", "reload")) {
if (option.startsWith(partial)) {
completions.add(option);
}
}
return completions;
}
}
@@ -0,0 +1,86 @@
package cn.infstar.essentialsC.commands;
import cn.infstar.essentialsC.maintenance.MaintenanceManager;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import java.util.ArrayList;
import java.util.List;
public class MaintenanceCommand extends BaseCommand implements TabCompleter {
public MaintenanceCommand() {
super("essentialsc.command.maintenance");
}
@Override
protected boolean execute(Player player, String[] args) {
return executeCommand(player, args);
}
@Override
protected boolean executeConsole(CommandSender sender, String[] args) {
return executeCommand(sender, args);
}
private boolean executeCommand(CommandSender sender, String[] args) {
MaintenanceManager maintenanceManager = plugin.getMaintenanceManager();
if (maintenanceManager == null) {
sender.sendMessage(getLang().getPrefixedString("messages.module-disabled"));
return true;
}
if (args.length == 0 || args[0].equalsIgnoreCase("status")) {
sendStatus(sender, maintenanceManager);
return true;
}
switch (args[0].toLowerCase()) {
case "on", "enable", "enabled" -> {
maintenanceManager.setEnabled(true);
sender.sendMessage(getLang().getPrefixedString("maintenance.messages.enabled"));
return true;
}
case "off", "disable", "disabled" -> {
maintenanceManager.setEnabled(false);
sender.sendMessage(getLang().getPrefixedString("maintenance.messages.disabled"));
return true;
}
case "reload" -> {
maintenanceManager.reload();
sender.sendMessage(getLang().getPrefixedString("maintenance.messages.reloaded"));
return true;
}
default -> {
sender.sendMessage(getLang().getPrefixedString("maintenance.messages.usage"));
return true;
}
}
}
private void sendStatus(CommandSender sender, MaintenanceManager maintenanceManager) {
String status = getLang().getString(maintenanceManager.isEnabled()
? "maintenance.status.enabled"
: "maintenance.status.disabled");
sender.sendMessage(getLang().getPrefixedString("maintenance.messages.status",
java.util.Map.of("status", status)));
}
@Override
public List<String> onTabComplete(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 1 || !sender.hasPermission(getPermission())) {
return List.of();
}
String partial = args[0].toLowerCase();
List<String> completions = new ArrayList<>();
for (String option : List.of("on", "off", "status", "reload")) {
if (option.startsWith(partial)) {
completions.add(option);
}
}
return completions;
}
}