commit b8a8e6826607758ebd744685d469137357cce607 Author: Branulf Date: Sat Apr 19 23:13:59 2025 +0800 添加 一个页面够了 diff --git a/%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E5%A4%9F%E4%BA%86.md b/%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E5%A4%9F%E4%BA%86.md new file mode 100644 index 0000000..dd242a9 --- /dev/null +++ b/%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E5%A4%9F%E4%BA%86.md @@ -0,0 +1,134 @@ +# 玩家在线时间统计与服务器监控 Mod + +![Minecraft Fabric](https://img.shields.io/badge/Minecraft-1.21.4-green?logo=minecraft) +![Mod Loader](https://img.shields.io/badge/Mod%20Loader-Fabric-blueviolet) + +## 功能概述 + +本模组为 Minecraft 服务器提供以下核心功能: + +### 1. 玩家时间追踪系统 +- **精确计时**:记录白名单玩家的累计游戏时长 +- **时间窗口统计**: + - 总时长(自模组安装起) + - 30天滚动窗口 + - 7天滚动窗口 +- **数据持久化**:自动保存至`player_time_data.json` +- **实时更新**:玩家在线时持续累积当前会话时间 + +### 2. 嵌入式 Web 服务 +- **默认端口**:60048(可通过配置文件修改) +- **跨平台仪表盘**:响应式网页界面 +- **数据可视化**:实时图表展示服务器性能指标 + +### 3. 游戏内指令 +- `/onlineTime [页码]`:查看分页统计 +- **交互式界面**:支持点击翻页功能 + +--- + +## 技术架构 + +### 数据追踪模块 (`PlayerTimeTracker.java`) +```java +// 核心数据结构 +public static class PlayerTimeData { + long totalTime = 0; + long lastLogin = 0; + RollingTimeWindow rolling30Days = new RollingTimeWindow(30); + RollingTimeWindow rolling7Days = new RollingTimeWindow(7); +} +``` +- **滚动窗口算法**:自动清理过期数据 +- **线程安全设计**:使用`ConcurrentHashMap`存储数据 +- **异步保存**:通过独立线程执行文件I/O + +### Web 服务模块 (`WebServer.java`) + +#### API 端点列表 +| 端点 | 数据类型 | 描述 | +|-----------------------|----------|---------------------------| +| `/api/stats` | JSON | 全部玩家时间统计 | +| `/api/widget-data` | JSON | 实时在线玩家与排行榜数据 | +| `/api/server-status` | JSON | 服务器硬件性能指标 | +| `/api/online-players` | JSON | 分类在线玩家列表 | + +### 前端监控界面 +![仪表盘示意图](https://branulf.top/files/exampleOnlineTimeMod.png) + +--- + +## 安装与配置 + +### 安装步骤 +1. 将模组文件放入服务端`mods`目录 +2. 启动服务器生成配置文件 +3. 修改`playertime-config.json`: +```json +{ + "webPort": 60048 +} +``` + +### 访问方式 +1. 浏览器输入:`http://服务器IP:端口` +2. 默认凭证:无需认证 + +--- + +## 数据存储格式 + +### 玩家时间数据 (`player_time_data.json`) +```json +{ + "玩家UUID": { + "totalTime": 3600, + "lastLogin": 1713571200, + "rolling30Days": { + "entries": [ + {"timestamp": 1713571200, "seconds": 3600} + ] + }, + "rolling7Days": { ... } + } +} +``` + +--- + +## 开发者文档 + +### 扩展API使用示例 +```javascript +// 获取服务器状态 +fetch('/api/server-status') + .then(res => res.json()) + .then(data => { + console.log('当前TPS:', 1000 / data.server.average_tick_time_ms); + }); +``` + +### 事件监听 +```java +// 玩家加入事件处理 +ServerPlayConnectionEvents.JOIN.register((handler, sender, server) -> { + timeTracker.onPlayerJoin(handler.player); +}); +``` + +--- + +## 常见问题 + +### 数据异常处理 +- 日志路径:`logs/PlayerTimeTracker.log` +- 自动恢复机制:损坏数据文件会自动重建 + +### 性能优化 +- 内存管理:采用时间窗口算法限制数据增长 +- 异步处理:使用`ExecutorService`线程池 + +--- + +## 开源协议 +[MIT License](https://opensource.org/licenses/MIT) © 2025 BRanulf \ No newline at end of file