修复启动崩溃 + Banner升级为Spring Boot彩色版

- AntiNoInteractService: 删除Set.of()中重复的LOOM元素导致java.lang.IllegalArgumentException
- banner.txt: 替换旧v1.0.0纯文本Banner为Spring Boot ANSI彩色版
  ALUER红色+绿色 / ServerGuard金色+青色 / V5.0.0紫色
- ServerGuardService.printBanner(): 简化为补充信息行,Banner由banner.txt统一管理
This commit is contained in:
Peijun Zhao
2026-05-16 20:11:52 +08:00
parent f1f292a520
commit 7e55676775
3 changed files with 21 additions and 52 deletions
@@ -78,8 +78,7 @@ public class AntiNoInteractService {
"BREWING_STAND", "BEACON", "SMITHING_TABLE", "GRINDSTONE", "BREWING_STAND", "BEACON", "SMITHING_TABLE", "GRINDSTONE",
"CARTOGRAPHY_TABLE", "LOOM", "STONECUTTER", "CARTOGRAPHY_TABLE", "LOOM", "STONECUTTER",
"HOPPER", "DISPENSER", "DROPPER", "HOPPER", "DISPENSER", "DROPPER",
"JUKEBOX", "NOTE_BLOCK", "BELL", "LECTERN", "JUKEBOX", "NOTE_BLOCK", "BELL", "LECTERN", "FLETCHING_TABLE",
"LOOM", "FLETCHING_TABLE",
"OAK_DOOR", "IRON_DOOR", "SPRUCE_DOOR", "BIRCH_DOOR", "JUNGLE_DOOR", "OAK_DOOR", "IRON_DOOR", "SPRUCE_DOOR", "BIRCH_DOOR", "JUNGLE_DOOR",
"ACACIA_DOOR", "DARK_OAK_DOOR", "CRIMSON_DOOR", "WARPED_DOOR", "ACACIA_DOOR", "DARK_OAK_DOOR", "CRIMSON_DOOR", "WARPED_DOOR",
"OAK_TRAPDOOR", "IRON_TRAPDOOR", "OAK_TRAPDOOR", "IRON_TRAPDOOR",
@@ -201,43 +201,14 @@ public class ServerGuardService implements CommandLineRunner {
// ─── Banner ──────────────────────────────────────── // ─── Banner ────────────────────────────────────────
private void printBanner() { private void printBanner() {
// Banner 已由 src/main/resources/banner.txt 提供(Spring Boot 启动时自动渲染)
// 此处仅输出补充信息
boolean hasAgent = agentServer != null; boolean hasAgent = agentServer != null;
// ANSI 颜色码 logger.info("Web Console: http://0.0.0.0:{}/", serverPort);
final String GOLD = "";
final String CYAN = "";
final String GRAY = "";
final String GREEN = "";
final String PURP = "";
final String RST = "";
logger.info("");
logger.info("{}╔══════════════════════════════════════════════════════════════╗{}", GRAY, RST);
logger.info("{}║{} {}█████╗ ██╗ ██╗███████╗██████╗ {}███████╗██████╗ {} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}██╔══██╗██║ ██║██╔════╝██╔══██╗ {}██╔════╝██╔══██╗{} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}███████║██║ ██║█████╗ ██████╔╝ {}███████╗██████╔╝{} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}██╔══██║██║ ██║██╔══╝ ██╔══██╗ {}╚════██║██╔══██╗{} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}██║ ██║╚██████╔╝███████╗██║ ██║ {}███████║██║ ██║{} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}╚═╝ ╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ {}╚══════╝╚═╝ ╚═╝{} {}║{}", GRAY, GOLD, CYAN, GRAY, RST);
logger.info("{}║{} {}║{}", GRAY, RST);
logger.info("{}║{} {}AI-Powered Minecraft PaperMC Server Protection {}V5.0.0 {}║{}", GRAY, GREEN, PURP, GRAY, RST);
logger.info("{}║{} {}135+ Security Modules │ 100% Anti-Cheat Coverage {}║{}", GRAY, PURP, GRAY, RST);
logger.info("{}╠══════════════════════════════════════════════════════════════╣{}", GRAY, RST);
logger.info("{}║{} Java: {} {}║{}", GRAY, String.format("%-36s", System.getProperty("java.version")), GRAY, RST);
logger.info("{}║{} Available CPUs: {}{} {}║{}", GRAY, String.format("%-32s", Runtime.getRuntime().availableProcessors()), GRAY, RST);
logger.info("{}║{} Max Memory: {}{} {}║{}", GRAY, String.format("%-32s", (Runtime.getRuntime().maxMemory() / (1024 * 1024)) + " MB"), GRAY, RST);
if (hasAgent) { if (hasAgent) {
logger.info("{}║{} Agent WS: ws://0.0.0.0:{}/agent{} {}║{}", GRAY, serverPort, " ", GRAY, RST); logger.info("Agent WS: ws://0.0.0.0:{}/agent", serverPort);
} }
logger.info("{}║{} Web Console: http://0.0.0.0:{}{} {}║{}", GRAY, serverPort, " ", GRAY, RST); logger.info("Type 'help' in the shell for full command reference.");
logger.info("{}║{} DeepSeek AI: {}{} {}║{}", GRAY,
deepSeekClient.isEnabled() ? "enabled (" + config.getAi().getDeepseek().getModel() + ")" : "disabled",
deepSeekClient.isEnabled() ? "" : " ", GRAY, RST);
logger.info("{}║{} Mode: {} {}║{}", GRAY,
String.format("%-36s", hasAgent ? "Agent Server (WebSocket)" : "External Monitor"), GRAY, RST);
logger.info("{}╚══════════════════════════════════════════════════════════════╝{}", GRAY, RST);
logger.info("");
logger.info(" {}Type 'help' in the shell for full command reference.{}", GOLD, RST);
logger.info(" {}Access the web console at http://localhost:{}/{}", GOLD, serverPort, RST);
logger.info(""); logger.info("");
} }
+15 -16
View File
@@ -1,18 +1,17 @@
${AnsiColor.BRIGHT_CYAN} ╔════════════════════════════════════════════════════════════╗ ${AnsiColor.BRIGHT_YELLOW} ╔══════════════════════════════════════════════════════════════╗
║ ║ ║ ║
║ █████╗ ██╗ ██╗ ██╗███████╗██████╗ ║ ║ ${AnsiColor.BRIGHT_RED}█████╗ ${AnsiColor.BRIGHT_GREEN}██╗ ██╗${AnsiColor.BRIGHT_YELLOW}███████╗${AnsiColor.BRIGHT_CYAN}██████╗ ${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}███████╗${AnsiColor.BRIGHT_CYAN}██████╗ ${AnsiColor.BRIGHT_YELLOW} ║
║ ██╔══██╗██║ ██║ ██║██╔════╝██╔══██╗ ║ ║ ${AnsiColor.BRIGHT_RED}██╔══██╗${AnsiColor.BRIGHT_GREEN}██║ ██║${AnsiColor.BRIGHT_YELLOW}██╔════╝${AnsiColor.BRIGHT_CYAN}██╔══██╗${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}██╔════╝${AnsiColor.BRIGHT_CYAN}██╔══██╗${AnsiColor.BRIGHT_YELLOW} ║
║ ███████║██║ ██║ ██║█████╗ ██████╔╝ ║ ║ ${AnsiColor.BRIGHT_RED}███████║${AnsiColor.BRIGHT_GREEN}██║ ██║${AnsiColor.BRIGHT_YELLOW}█████╗ ${AnsiColor.BRIGHT_CYAN}██████╔╝${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}███████╗${AnsiColor.BRIGHT_CYAN}██████╔╝${AnsiColor.BRIGHT_YELLOW} ║
║ ██╔══██║██║ ██║ ██║██╔══╝ ██╔══██╗ ║ ║ ${AnsiColor.BRIGHT_RED}██╔══██║${AnsiColor.BRIGHT_GREEN}██║ ██║${AnsiColor.BRIGHT_YELLOW}██╔══╝ ${AnsiColor.BRIGHT_CYAN}██╔══██╗${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}╚════██║${AnsiColor.BRIGHT_CYAN}██╔══██╗${AnsiColor.BRIGHT_YELLOW} ║
║ ██║ ██║███████╗╚██████╔╝███████╗██║ ██║ ║ ║ ${AnsiColor.BRIGHT_RED}██║ ██║${AnsiColor.BRIGHT_GREEN}╚██████╔╝${AnsiColor.BRIGHT_YELLOW}███████╗${AnsiColor.BRIGHT_CYAN}██║ ██║${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}███████║${AnsiColor.BRIGHT_CYAN}██║ ██║${AnsiColor.BRIGHT_YELLOW} ║
║ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ║ ║ ${AnsiColor.BRIGHT_RED}╚═╝ ╚═╝${AnsiColor.BRIGHT_GREEN} ╚═════╝ ${AnsiColor.BRIGHT_YELLOW}╚══════╝${AnsiColor.BRIGHT_CYAN}╚═╝ ╚═╝${AnsiColor.BRIGHT_YELLOW} ${AnsiColor.BRIGHT_RED}╚══════╝${AnsiColor.BRIGHT_CYAN}╚═╝ ╚═╝${AnsiColor.BRIGHT_YELLOW} ║
║ ║ ║ ║
║ ServerGuard v1.0.0 ║ ║ ${AnsiColor.BRIGHT_GREEN}AI-Powered Minecraft PaperMC Server Protection${AnsiColor.BRIGHT_YELLOW} ║
║ AI-Powered Minecraft Server Protection ║ ║ ${AnsiColor.BRIGHT_MAGENTA}V5.0.0 ${AnsiColor.BRIGHT_WHITE}|${AnsiColor.BRIGHT_MAGENTA} 135+ Security Modules ${AnsiColor.BRIGHT_WHITE}|${AnsiColor.BRIGHT_MAGENTA} 100% Anti-Cheat${AnsiColor.BRIGHT_YELLOW} ║
║ ║ ║ ║
╚════════════════════════════════════════════════════════════╝${AnsiStyle.NORMAL} ╚══════════════════════════════════════════════════════════════╝${AnsiStyle.NORMAL}
${AnsiColor.BRIGHT_GREEN}:: DeepSeek AI Powered ::${AnsiStyle.NORMAL} ${AnsiColor.BRIGHT_WHITE}Autonomous Defense Engine${AnsiStyle.NORMAL} ${AnsiColor.BRIGHT_GREEN}Type 'help' in the shell for full command reference.${AnsiStyle.NORMAL}
${AnsiColor.BRIGHT_GREEN}:: Multi-Layer Kernel ::${AnsiStyle.NORMAL} ${AnsiColor.BRIGHT_WHITE}Signal Fusion + Threat Mesh${AnsiStyle.NORMAL} ${AnsiColor.BRIGHT_CYAN}Web Console: http://0.0.0.0:${server.port}/${AnsiStyle.NORMAL}
${AnsiColor.BRIGHT_GREEN}:: Mirage Shield ::${AnsiStyle.NORMAL} ${AnsiColor.BRIGHT_WHITE}4-Mode Adaptive Protection${AnsiStyle.NORMAL}