From eef2bbebadeee798bbee54e78dfa4f21435dd7a4 Mon Sep 17 00:00:00 2001 From: BRanulf Date: Sat, 7 Jun 2025 14:48:03 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AEbug=E4=BF=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../com/example/playertime/ModConfig.java | 17 +---- .../com/example/playertime/PlayerTimeMod.java | 64 ++---------------- .../example/playertime/PlayerTimeTracker.java | 23 ------- .../assets/playertime/web/favicon.ico | Bin 0 -> 41328 bytes .../assets/playertime/web/index.html | 1 + 6 files changed, 8 insertions(+), 99 deletions(-) create mode 100644 src/main/resources/assets/playertime/web/favicon.ico diff --git a/gradle.properties b/gradle.properties index a6aa206..c701e7c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ minecraft_version=1.21.4 yarn_mappings=1.21.4+build.8 loader_version=0.16.10 # Mod Properties -mod_version=1.14.514.131 +mod_version=1.14.514.132 maven_group=org.example1 archives_base_name=ServerPlayerOnlineTracker # Dependencies diff --git a/src/main/java/com/example/playertime/ModConfig.java b/src/main/java/com/example/playertime/ModConfig.java index e59a1f5..e98d1c4 100644 --- a/src/main/java/com/example/playertime/ModConfig.java +++ b/src/main/java/com/example/playertime/ModConfig.java @@ -9,7 +9,6 @@ public class ModConfig { private final Path configPath; private int webPort = 60048; private String language = "zh_cn"; - private long autoSaveSeconds = 300; public ModConfig(Path configDir) { this.configPath = configDir.resolve("playertime-config.json"); @@ -37,19 +36,13 @@ public class ModConfig { if (json.has("webPort")) { webPort = json.get("webPort").getAsInt(); } else { - PlayerTimeMod.LOGGER.info("[在线时间] 配置文件缺少“webPort”字段,添加默认值'%s'并保存", webPort); + PlayerTimeMod.LOGGER.info("[在线时间] 配置文件缺少webPort字段,添加默认值'%s'并保存", webPort); saveConfig(); } if (json.has("language")) { language = json.get("language").getAsString(); } else { - PlayerTimeMod.LOGGER.info("[在线时间] 配置文件缺少“language”字段,添加默认值'%s'并保存", language); - saveConfig(); - } - if (json.has("autoSaveSeconds")) { - autoSaveSeconds = json.get("autoSaveSeconds").getAsLong(); - } else { - PlayerTimeMod.LOGGER.info("[在线时间] 配置文件缺少“autoSaveSeconds”字段,添加默认值'%s'并保存", autoSaveSeconds); + PlayerTimeMod.LOGGER.info("[在线时间] 配置文件缺少language字段,添加默认值'%s'并保存", language); saveConfig(); } @@ -64,7 +57,6 @@ public class ModConfig { JsonObject json = new JsonObject(); json.addProperty("webPort", webPort); json.addProperty("language", language); - json.addProperty("autoSaveSeconds", autoSaveSeconds); try { Files.createDirectories(configPath.getParent()); @@ -86,9 +78,4 @@ public class ModConfig { public String getLanguage() { return language; } - - // 获取保存间隔 - public long getSeconds() { - return autoSaveSeconds; - } } diff --git a/src/main/java/com/example/playertime/PlayerTimeMod.java b/src/main/java/com/example/playertime/PlayerTimeMod.java index 72314f4..01c024a 100644 --- a/src/main/java/com/example/playertime/PlayerTimeMod.java +++ b/src/main/java/com/example/playertime/PlayerTimeMod.java @@ -19,10 +19,6 @@ import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; import java.util.concurrent.CompletableFuture; -import java.util.concurrent.Executors; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; public class PlayerTimeMod implements ModInitializer { @@ -30,29 +26,16 @@ public class PlayerTimeMod implements ModInitializer { private static PlayerTimeTracker timeTracker; private static WebServer webServer; private static ModConfig config; - public static LocalizationManager localizationManager; // 新增本地化管理器 - - // TODO 定时保存配置文件没整,暂时硬编码 - private ScheduledExecutorService scheduler; - private ScheduledFuture saveTask; - private static long AUTO_SAVE_INTERVAL_SECONDS; - - // 后续还是想把logger改成英文 + public static LocalizationManager localizationManager; @Override public void onInitialize() { - config = new ModConfig(FabricLoader.getInstance().getConfigDir()); localizationManager = new LocalizationManager(config.getLanguage()); - scheduler = Executors.newSingleThreadScheduledExecutor(); - - try { LOGGER.info("[在线时间] 初始化 玩家在线时长视奸Mod"); - AUTO_SAVE_INTERVAL_SECONDS = config.getSeconds(); - ServerLifecycleEvents.SERVER_STARTING.register(server -> { timeTracker = new PlayerTimeTracker(server); try { @@ -62,21 +45,6 @@ public class PlayerTimeMod implements ModInitializer { } catch (Exception e) { LOGGER.error("[在线时间] 无法启动Web服务器", e); } - - LOGGER.info("[在线时间] 每{}秒({}分钟)安排自动保存任务。", - AUTO_SAVE_INTERVAL_SECONDS, AUTO_SAVE_INTERVAL_SECONDS / 60); - saveTask = scheduler.scheduleAtFixedRate( - () -> { - if (timeTracker != null) { - LOGGER.info("[在线时间] 自动保存玩家数据中..."); - timeTracker.saveAll(); - LOGGER.info("[在线时间] 自动保存完成。"); - } - }, - AUTO_SAVE_INTERVAL_SECONDS, - AUTO_SAVE_INTERVAL_SECONDS, - TimeUnit.SECONDS - ); }); ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { @@ -94,24 +62,6 @@ public class PlayerTimeMod implements ModInitializer { ServerLifecycleEvents.SERVER_STOPPING.register(server -> { LOGGER.info("[在线时间] 服务器停止 - 正在保存数据"); - if (saveTask != null) { - saveTask.cancel(false); - LOGGER.info("[在线时间] 自动保存任务已取消。"); - } - if (scheduler != null && !scheduler.isShutdown()) { - scheduler.shutdown(); - try { - if (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) { - LOGGER.warn("[在线时间] 调度程序未在5秒内终止。"); - } - } catch (InterruptedException e) { - LOGGER.error("[在线时间] 调度程序终止被中断", e); - Thread.currentThread().interrupt(); - } - LOGGER.info("[在线时间] 调度程序关闭"); - } - - if (webServer != null) { webServer.stop(); } @@ -123,12 +73,8 @@ public class PlayerTimeMod implements ModInitializer { } }); - } catch (Exception e) { - LOGGER.error("[在线时间] Mod出屎化失败", e); - if (scheduler != null && !scheduler.isShutdown()) { - scheduler.shutdownNow(); - } + LOGGER.error("[在线时间] Mod初始化失败", e); throw new RuntimeException("[在线时间] Mod初始化失败 ", e); } registerCommands(); @@ -146,12 +92,11 @@ public class PlayerTimeMod implements ModInitializer { return localizationManager; } - public static void registerCommands() { CommandRegistrationCallback.EVENT.register((dispatcher, registryAccess, environment) -> { dispatcher.register(CommandManager.literal("onlineTime") .requires(source -> source.hasPermissionLevel(0)) - .executes(context -> showOnlineTime(context.getSource(), 1)) // 默认第一页 + .executes(context -> showOnlineTime(context.getSource(), 1)) .then(CommandManager.argument("page", IntegerArgumentType.integer(1)) .executes(context -> showOnlineTime( context.getSource(), @@ -172,7 +117,7 @@ public class PlayerTimeMod implements ModInitializer { Map stats = tracker.getWhitelistedPlayerStats(); List sorted = stats.entrySet().stream() - .sorted((a, b) -> comparePlayTime(b.getValue(), a.getValue())) + .sorted((a, b) -> comparePlayTime(a.getValue(), b.getValue())) .map(entry -> formatPlayerTime(entry.getKey(), entry.getValue())) .collect(Collectors.toList()); @@ -249,5 +194,4 @@ public class PlayerTimeMod implements ModInitializer { player.sendMessage(footer, false); } - } diff --git a/src/main/java/com/example/playertime/PlayerTimeTracker.java b/src/main/java/com/example/playertime/PlayerTimeTracker.java index 6e04a9d..fb85f41 100644 --- a/src/main/java/com/example/playertime/PlayerTimeTracker.java +++ b/src/main/java/com/example/playertime/PlayerTimeTracker.java @@ -27,16 +27,6 @@ public class PlayerTimeTracker { loadData(); } - // 没用了,但是先保留吧 - // private boolean isWhitelisted(String playerName) { - // MinecraftServer server = this.server; - // if (server == null) return false; - // - // return server.getPlayerManager().getWhitelist() - // .isAllowed(server.getUserCache().findByName(playerName).orElse(null)); - // } - - public void onPlayerJoin(ServerPlayerEntity player) { PlayerTimeData data = playerData.computeIfAbsent(player.getUuid(), uuid -> new PlayerTimeData()); data.lastLogin = Instant.now().getEpochSecond(); @@ -202,17 +192,6 @@ public class PlayerTimeTracker { PlayerTimeMod.LOGGER.info("[在线时间] 开始保存所有玩家数据..."); JsonObject root = new JsonObject(); playerData.forEach((uuid, data) -> { - if (data.lastLogin > 0) { - long now = Instant.now().getEpochSecond(); - long sessionTime = now - data.lastLogin; - if (sessionTime > 0) { - data.totalTime += sessionTime; - data.rolling30Days.addPlayTime(now, sessionTime); - data.rolling7Days.addPlayTime(now, sessionTime); - PlayerTimeMod.LOGGER.debug("[在线时间] 累积当前会话时间 {} 秒,保存期间玩家 {}", sessionTime, getPlayerName(uuid)); - } - data.lastLogin = 0; - } root.add(uuid.toString(), GSON.toJsonTree(data)); }); @@ -254,7 +233,6 @@ public class PlayerTimeTracker { try (Writer writer = Files.newBufferedWriter(dataFile)) { GSON.toJson(root, writer); - // PlayerTimeMod.LOGGER.debug("[在线时间] Async save successful for player {}", getPlayerName(uuid)); } catch (Exception e) { PlayerTimeMod.LOGGER.error("[在线时间] 无法异步保存玩家的在线时间数据 " + getPlayerName(uuid) + " (UUID: " + uuid + ")", e); } @@ -325,5 +303,4 @@ public class PlayerTimeTracker { public Path getDataFile() { return this.dataFile; } - } diff --git a/src/main/resources/assets/playertime/web/favicon.ico b/src/main/resources/assets/playertime/web/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..1037c10f53ce2722d7ec22bfd91940d805b4846f GIT binary patch literal 41328 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/playertime/web/index.html b/src/main/resources/assets/playertime/web/index.html index 99b5cd1..b4f122b 100644 --- a/src/main/resources/assets/playertime/web/index.html +++ b/src/main/resources/assets/playertime/web/index.html @@ -6,6 +6,7 @@ 玩家在线及状态统计 +