添加 一个页面够了
commit
b8a8e68266
134
%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E5%A4%9F%E4%BA%86.md
Normal file
134
%E4%B8%80%E4%B8%AA%E9%A1%B5%E9%9D%A2%E5%A4%9F%E4%BA%86.md
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
# 玩家在线时间统计与服务器监控 Mod
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
## 功能概述
|
||||||
|
|
||||||
|
本模组为 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 | 分类在线玩家列表 |
|
||||||
|
|
||||||
|
### 前端监控界面
|
||||||
|

|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 安装与配置
|
||||||
|
|
||||||
|
### 安装步骤
|
||||||
|
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
|
Loading…
x
Reference in New Issue
Block a user