feat: 完善插件稳定性与兼容性
Build / build (push) Has been cancelled

This commit is contained in:
2026-08-01 00:36:17 +08:00
parent 5c760b26c6
commit 18cfbc2002
44 changed files with 1523 additions and 471 deletions
@@ -74,10 +74,12 @@ public final class MaintenanceListener implements Listener {
return;
}
String address = "";
InetAddress inetAddress = event.getAddress();
if (inetAddress != null) {
address = inetAddress.getHostAddress();
String address = EssentialsC.getLangManager().getString("maintenance.status.address-hidden");
if (maintenanceManager.shouldIncludeAddressInNotification()) {
InetAddress inetAddress = event.getAddress();
if (inetAddress != null) {
address = inetAddress.getHostAddress();
}
}
String message = EssentialsC.getLangManager().getPrefixedString("maintenance.messages.login-blocked",
@@ -1,6 +1,8 @@
package cn.infstar.essentialsC.maintenance;
import cn.infstar.essentialsC.EssentialsC;
import cn.infstar.essentialsC.util.AtomicYamlWriter;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.boss.BarColor;
import org.bukkit.boss.BarStyle;
@@ -10,7 +12,6 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
@@ -44,6 +45,7 @@ public final class MaintenanceManager {
config.addDefault("bypass-permission", "essentialsc.maintenance.bypass");
config.addDefault("notify.enabled", true);
config.addDefault("notify.permission", "essentialsc.maintenance.notify");
config.addDefault("notify.include-address", false);
config.addDefault("whitelist.uuids", List.of());
config.addDefault("whitelist.names", List.of());
config.addDefault("motd.enabled", true);
@@ -55,8 +57,10 @@ public final class MaintenanceManager {
config.addDefault("bossbar.style", "SOLID");
config.addDefault("bossbar.progress", 1.0D);
config.options().copyDefaults(true);
save();
refreshBossBar();
if (isEnabled()) {
kickUnauthorizedPlayers();
}
}
public boolean isEnabled() {
@@ -67,6 +71,9 @@ public final class MaintenanceManager {
config.set("enabled", enabled);
save();
refreshBossBar();
if (enabled) {
kickUnauthorizedPlayers();
}
}
public String getBypassPermission() {
@@ -81,6 +88,10 @@ public final class MaintenanceManager {
return config.getString("notify.permission", "essentialsc.maintenance.notify");
}
public boolean shouldIncludeAddressInNotification() {
return config.getBoolean("notify.include-address", false);
}
public boolean canJoin(Player player) {
return player != null && (player.hasPermission(getBypassPermission()) || isWhitelisted(player));
}
@@ -105,6 +116,11 @@ public final class MaintenanceManager {
return addWhitelistUuid(uuid.toString());
}
Player onlinePlayer = Bukkit.getPlayerExact(normalized);
if (onlinePlayer != null) {
return addWhitelistUuid(onlinePlayer.getUniqueId().toString());
}
return addWhitelistName(input);
}
@@ -119,6 +135,11 @@ public final class MaintenanceManager {
return removeWhitelistUuid(uuid.toString());
}
Player onlinePlayer = Bukkit.getPlayerExact(normalized);
if (onlinePlayer != null && removeWhitelistUuid(onlinePlayer.getUniqueId().toString())) {
return true;
}
return removeWhitelistName(input);
}
@@ -168,10 +189,6 @@ public final class MaintenanceManager {
if (bossBar == null || player == null || !player.isOnline()) {
return;
}
if (canJoin(player)) {
bossBar.removePlayer(player);
return;
}
bossBar.addPlayer(player);
}
@@ -181,6 +198,15 @@ public final class MaintenanceManager {
}
}
private void kickUnauthorizedPlayers() {
String message = getKickMessage();
for (Player player : List.copyOf(plugin.getServer().getOnlinePlayers())) {
if (!canJoin(player)) {
player.kickPlayer(message);
}
}
}
public void shutdown() {
clearBossBar();
}
@@ -255,6 +281,9 @@ public final class MaintenanceManager {
config.set(path, new ArrayList<>(entries));
save();
refreshBossBar();
if (isEnabled()) {
kickUnauthorizedPlayers();
}
}
return changed;
}
@@ -313,8 +342,8 @@ public final class MaintenanceManager {
private void save() {
try {
config.save(configFile);
} catch (IOException e) {
AtomicYamlWriter.save(config, configFile);
} catch (Exception e) {
plugin.getLogger().warning("保存 maintenance.yml 失败: " + e.getMessage());
}
}