Skip to content

Commit 642d638

Browse files
committed
feat(api): 新增玩家数据查询API
新增了用于获取玩家详细信息的RESTful API端点,支持在线和离线玩家数据查询。 该功能提供包括玩家位置、生命值、背包、装备和游戏统计在内的完整信息。 同时更新了API文档和README,添加了相关使用示例和说明。 feat(backup): 实现数据库备份管理功能 新增备份管理器,支持手动备份、备份列表查看和备份恢复功能。 通过命令 `/ca backup` 可执行相关操作,并在配置文件中添加了备份相关的配置项。 增强了数据安全性与可维护性。 docs(api): 更新API文档结构与内容 为API文档添加快速导航目录,优化结构并新增玩家数据查询API的详细说明。 补充了响应示例、字段说明及使用场景等信息,提升开发者使用体验。 docs(readme): 更新核心功能介绍与性能指标 在README中更新核心功能列表,新增玩家数据查询功能描述。 优化高性能架构、API接口和同步机制等内容的表述,使项目特性更加清晰易懂。
1 parent 3343ab3 commit 642d638

9 files changed

Lines changed: 1360 additions & 46 deletions

File tree

API.md

Lines changed: 246 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@
1515

1616
ConvenientAccess 提供了一套简洁的 RESTful API,用于管理 Minecraft 1.20.1 Arclight 服务器的白名单系统。基于 WhitelistPlus 设计理念,极大简化了白名单管理流程。所有 API 端点都返回 JSON 格式的数据,专注于核心功能和服务器监控。
1717

18+
## 快速导航
19+
20+
- [基础信息](#基础信息) - API基础配置和认证说明
21+
- [认证系统](#-认证系统) - API认证方式和安全配置
22+
- [白名单管理API](#白名单管理-api) - 白名单增删改查操作
23+
- [用户注册API](#用户注册-api) - 用户自助注册功能
24+
- [玩家数据查询API](#玩家数据查询-api) - 获取玩家详细信息 **[新增]**
25+
- [服务器监控API](#服务器监控-api) - 服务器状态和性能监控
26+
- [UUID自动补充机制](#-uuid自动补充机制) - 简化白名单管理流程
27+
- [响应格式](#响应格式) - 统一的响应格式说明
28+
1829
## 基础信息
1930

2031
- **基础URL**: `http://your-server:22222/api/v1`
@@ -118,6 +129,11 @@ auth:
118129

119130
*注:虽然是公开端点,但需要管理员密码验证
120131

132+
### 玩家数据查询 API
133+
| 端点 | 方法 | 描述 | 认证要求 |
134+
|------|------|------|----------|
135+
| `/api/v1/player/{playerName}` | GET | 获取玩家详细数据 | API Token |
136+
121137
### 服务器监控 API
122138
| 端点 | 方法 | 描述 | 认证要求 |
123139
|------|------|------|----------|
@@ -592,6 +608,236 @@ X-Admin-Password: your-admin-password
592608
}
593609
```
594610

611+
### 玩家数据查询 API
612+
613+
#### `GET /api/v1/player/{playerName}`
614+
615+
获取指定玩家的详细数据,包括基本信息、位置、生命值、背包、装备等完整信息。
616+
617+
**路径参数:**
618+
- `playerName` (string, 必需): 玩家名称
619+
620+
**请求示例:**
621+
```bash
622+
curl -H "X-API-Key: sk-your-api-token-here" \
623+
-X GET http://your-server:22222/api/v1/player/PlayerName
624+
```
625+
626+
**响应示例(在线玩家):**
627+
```json
628+
{
629+
"success": true,
630+
"data": {
631+
"playerName": "PlayerName",
632+
"uuid": "550e8400-e29b-41d4-a716-446655440000",
633+
"isOnline": true,
634+
"hasPlayedBefore": true,
635+
"firstPlayed": 1640995200000,
636+
"lastPlayed": 1640995200000,
637+
"lastLogin": 1640995200000,
638+
"gameMode": "SURVIVAL",
639+
"location": {
640+
"world": "world",
641+
"x": 123.45,
642+
"y": 64.0,
643+
"z": -67.89,
644+
"yaw": 90.0,
645+
"pitch": 0.0,
646+
"dimension": "NORMAL"
647+
},
648+
"bedSpawnLocation": {
649+
"world": "world",
650+
"x": 100.0,
651+
"y": 65.0,
652+
"z": -50.0
653+
},
654+
"health": 20.0,
655+
"maxHealth": 20.0,
656+
"foodLevel": 20,
657+
"saturation": 5.0,
658+
"exhaustion": 0.0,
659+
"level": 30,
660+
"exp": 0.5,
661+
"totalExperience": 825,
662+
"remainingAir": 300,
663+
"maximumAir": 300,
664+
"fireTicks": 0,
665+
"isFlying": false,
666+
"allowFlight": false,
667+
"isInvulnerable": false,
668+
"isSneaking": false,
669+
"isSprinting": false,
670+
"isSwimming": false,
671+
"isGliding": false,
672+
"isBlocking": false,
673+
"walkSpeed": 0.2,
674+
"flySpeed": 0.1,
675+
"potionEffects": [
676+
{
677+
"type": "SPEED",
678+
"amplifier": 1,
679+
"duration": 600,
680+
"isAmbient": false,
681+
"hasParticles": true,
682+
"hasIcon": true
683+
}
684+
],
685+
"inventory": {
686+
"mainInventory": [
687+
{
688+
"type": "DIAMOND_SWORD",
689+
"amount": 1,
690+
"damage": 0,
691+
"maxDurability": 1561,
692+
"slot": "0",
693+
"displayName": "§6传奇之剑",
694+
"enchantments": {
695+
"sharpness": 5,
696+
"unbreaking": 3
697+
}
698+
}
699+
],
700+
"armor": [
701+
{
702+
"type": "DIAMOND_HELMET",
703+
"amount": 1,
704+
"damage": 10,
705+
"maxDurability": 363,
706+
"slot": "head",
707+
"enchantments": {
708+
"protection": 4
709+
}
710+
}
711+
],
712+
"mainHand": {
713+
"type": "DIAMOND_PICKAXE",
714+
"amount": 1,
715+
"damage": 50,
716+
"maxDurability": 1561,
717+
"enchantments": {
718+
"efficiency": 5,
719+
"fortune": 3
720+
}
721+
},
722+
"offHand": {
723+
"type": "TORCH",
724+
"amount": 64
725+
}
726+
},
727+
"enderChest": [
728+
{
729+
"type": "DIAMOND",
730+
"amount": 64,
731+
"slot": "0"
732+
}
733+
],
734+
"statistics": {
735+
"playTime": 360000,
736+
"deaths": 5,
737+
"mobKills": 1234,
738+
"playerKills": 10,
739+
"timeSinceRest": 72000,
740+
"damageTaken": 150.5,
741+
"damageDealt": 5234.5
742+
}
743+
},
744+
"message": "成功获取玩家数据(在线)",
745+
"timestamp": "2025-10-02T12:00:00"
746+
}
747+
```
748+
749+
**响应示例(离线玩家):**
750+
```json
751+
{
752+
"success": true,
753+
"data": {
754+
"playerName": "PlayerName",
755+
"uuid": "550e8400-e29b-41d4-a716-446655440000",
756+
"isOnline": false,
757+
"hasPlayedBefore": true,
758+
"firstPlayed": 1640995200000,
759+
"lastPlayed": 1640995200000,
760+
"lastLogin": 1640995200000,
761+
"gameMode": "UNKNOWN",
762+
"bedSpawnLocation": {
763+
"world": "world",
764+
"x": 100.0,
765+
"y": 65.0,
766+
"z": -50.0
767+
}
768+
},
769+
"message": "成功获取玩家数据(离线)",
770+
"timestamp": "2025-10-02T12:00:00"
771+
}
772+
```
773+
774+
**错误响应示例:**
775+
```json
776+
{
777+
"success": false,
778+
"error": "玩家不存在或从未登录过服务器",
779+
"code": 404,
780+
"timestamp": "2025-10-02T12:00:00"
781+
}
782+
```
783+
784+
**数据字段说明:**
785+
786+
| 字段 | 类型 | 说明 |
787+
|------|------|------|
788+
| `playerName` | string | 玩家名称 |
789+
| `uuid` | string | 玩家UUID |
790+
| `isOnline` | boolean | 是否在线 |
791+
| `hasPlayedBefore` | boolean | 是否曾经登录过 |
792+
| `firstPlayed` | long | 首次登录时间戳(毫秒) |
793+
| `lastPlayed` | long | 最后登录时间戳(毫秒) |
794+
| `lastLogin` | long | 最后登录时间戳(毫秒) |
795+
| `gameMode` | string | 游戏模式 (SURVIVAL/CREATIVE/ADVENTURE/SPECTATOR/UNKNOWN) |
796+
| `location` | object | 当前位置信息(仅在线) |
797+
| `location.world` | string | 世界名称 |
798+
| `location.x/y/z` | double | 坐标 |
799+
| `location.yaw/pitch` | float | 视角方向 |
800+
| `location.dimension` | string | 维度 (NORMAL/NETHER/THE_END) |
801+
| `bedSpawnLocation` | object | 重生点位置 |
802+
| `health` | double | 当前生命值(仅在线) |
803+
| `maxHealth` | double | 最大生命值(仅在线) |
804+
| `foodLevel` | int | 饥饿值(仅在线) |
805+
| `saturation` | float | 饱和度(仅在线) |
806+
| `level` | int | 经验等级(仅在线) |
807+
| `exp` | float | 当前等级经验进度(仅在线) |
808+
| `totalExperience` | int | 总经验值(仅在线) |
809+
| `remainingAir` | int | 剩余空气值(仅在线) |
810+
| `fireTicks` | int | 火焰剩余时间(仅在线) |
811+
| `isFlying` | boolean | 是否正在飞行(仅在线) |
812+
| `allowFlight` | boolean | 是否允许飞行(仅在线) |
813+
| `walkSpeed` | float | 行走速度(仅在线) |
814+
| `flySpeed` | float | 飞行速度(仅在线) |
815+
| `potionEffects` | array | 药水效果列表(仅在线) |
816+
| `inventory` | object | 背包信息(仅在线) |
817+
| `inventory.mainInventory` | array | 主背包物品 |
818+
| `inventory.armor` | array | 装备栏物品 |
819+
| `inventory.mainHand` | object | 主手物品 |
820+
| `inventory.offHand` | object | 副手物品 |
821+
| `enderChest` | array | 末影箱物品(仅在线) |
822+
| `statistics` | object | 游戏统计数据(仅在线) |
823+
| `statistics.playTime` | long | 游戏时长(秒) |
824+
| `statistics.deaths` | int | 死亡次数 |
825+
| `statistics.mobKills` | int | 生物击杀数 |
826+
| `statistics.playerKills` | int | 玩家击杀数 |
827+
828+
**使用场景:**
829+
- 查看玩家当前状态和位置
830+
- 监控玩家背包和装备
831+
- 分析玩家游戏数据
832+
- 开发自定义管理工具
833+
- 生成玩家数据报告
834+
835+
**注意事项:**
836+
- 离线玩家只能获取有限的基本信息
837+
- 在线玩家可以获取完整的实时数据
838+
- 需要 API Token 认证才能访问
839+
- 玩家名称区分大小写
840+
595841
### 服务器监控 API
596842

597843
#### `GET /api/v1/server/status`

README.md

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -4,38 +4,40 @@
44

55
## 核心功能
66

7-
### 🎯 白名单管理系统
7+
### 白名单管理系统
88
- **完整的CRUD操作** - 增加、删除、修改、查询白名单条目
99
- **批量操作支持** - 批量添加、删除、导入、导出白名单
1010
- **高级查询功能** - 支持分页、搜索、排序和多条件筛选
1111
- **智能同步机制** - 数据库与JSON文件双向同步,支持冲突解决
1212
- **实时统计信息** - 白名单数量、操作历史、同步状态等
13+
- **玩家数据查询** - 获取玩家完整数据,包括位置、背包、装备、统计等
1314

14-
### 🔐 多层安全认证
15+
### 多层安全认证
1516
- **API密钥认证** - 基础API访问控制
1617
- **JWT令牌系统** - 管理员身份认证和会话管理
1718
- **角色权限控制** - 细粒度的权限管理系统
1819
- **频率限制保护** - 防止API滥用和暴力破解攻击
1920
- **安全监控系统** - 实时检测异常行为和潜在威胁
2021

21-
### 🛡️ 高级安全防护
22+
### 高级安全防护
2223
- **智能威胁检测** - 自动识别暴力破解、API滥用、可疑IP等
2324
- **实时安全监控** - 记录和分析所有安全事件
2425
- **自动防护机制** - 自动封禁可疑IP和异常行为
2526
- **安全事件日志** - 完整的安全审计和追踪能力
2627

27-
### 🚀 高性能架构
28-
- **异步任务处理** - 所有操作均为异步执行,不影响服务器性能
29-
- **智能缓存系统** - 多层缓存机制,提升响应速度
30-
- **任务队列管理** - 优先级调度和重试机制
31-
- **数据库优化** - 索引优化和查询性能调优
28+
### 高性能架构
29+
- **异步任务处理** - 所有数据库操作和I/O操作均为异步执行,确保不阻塞主线程
30+
- **智能缓存系统** - 实现多层缓存策略,显著降低数据库访问频率,提升响应速度
31+
- **任务队列管理** - 采用优先级队列和重试机制,保障任务执行的可靠性
32+
- **数据库优化** - 建立合理索引结构,优化SQL查询语句,减少查询时间
3233

33-
### 🌐 完整的API接口
34-
- **RESTful API设计** - 标准的HTTP API接口
35-
- **白名单管理API** - 完整的白名单操作接口
36-
- **管理员认证API** - 登录、登出、会话验证等
37-
- **系统监控API** - 统计信息、状态查询等
38-
- **跨域访问支持** - 支持Web前端集成
34+
### 完整的API接口
35+
- **RESTful API设计** - 遵循标准的HTTP API接口规范
36+
- **白名单管理API** - 提供完整的白名单CRUD操作接口
37+
- **玩家数据查询API** - 获取玩家详细信息,包括位置、背包、装备、统计等
38+
- **管理员认证API** - 支持登录、登出、会话验证等功能
39+
- **系统监控API** - 提供统计信息、状态查询等监控接口
40+
- **跨域访问支持** - 支持CORS,便于Web前端集成
3941

4042
## 安装要求
4143

@@ -200,7 +202,11 @@ curl -X POST http://localhost:8080/api/v1/whitelist \
200202
-H "Content-Type: application/json" \
201203
-d '{"uuid":"550e8400-e29b-41d4-a716-446655440000","username":"player1","reason":"新玩家加入"}'
202204

203-
# 4. 获取系统统计信息
205+
# 4. 获取玩家详细数据
206+
curl -H "X-API-Key: your-api-key" \
207+
http://localhost:8080/api/v1/player/PlayerName
208+
209+
# 5. 获取系统统计信息
204210
curl -H "X-API-Key: your-api-key" \
205211
http://localhost:8080/api/v1/whitelist/stats
206212
```
@@ -266,31 +272,32 @@ curl -H "X-API-Key: your-api-key" \
266272

267273
## 性能优化
268274

269-
### 高性能设计
270-
- **异步处理** - 所有操作均为异步执行,不阻塞主线程
271-
- **智能缓存** - 多层缓存机制,提升响应速度
272-
- **连接池** - 数据库连接池优化
273-
- **索引优化** - 数据库查询性能优化
275+
### 高性能设计
276+
- **异步处理架构** - 采用CompletableFuture实现异步操作,所有数据库查询和I/O操作均不阻塞主线程,确保服务器TPS稳定
277+
- **多层缓存机制** - 实现内存缓存、查询结果缓存和会话缓存,有效减少重复计算和数据库访问次数
278+
- **连接池管理** - 使用HikariCP数据库连接池,优化连接获取和释放,提高并发处理能力
279+
- **索引优化策略** - 对高频查询字段建立索引,优化JOIN操作,显著降低查询延迟
274280

275-
### 📈 性能指标
276-
- **API响应时间** - 平均响应时间 < 50ms
277-
- **数据库查询** - 索引优化,查询时间 < 10ms
278-
- **内存使用** - 智能缓存管理,内存占用 < 100MB
279-
- **并发处理** - 支持高并发API请求
281+
### 性能指标
282+
- **API响应时间** - 平均响应延迟低于50ms,95%请求在100ms内完成
283+
- **数据库查询** - 通过索引优化实现单次查询时间低于10ms
284+
- **内存使用** - 智能缓存策略控制内存占用,运行时内存使用通常低于100MB
285+
- **并发处理** - 线程池配置支持高并发场景,可处理每秒数百次API请求
286+
- **主线程影响** - 异步架构确保对服务器主线程零影响,维持稳定TPS
280287

281288
## 同步机制
282289

283-
### 🔄 智能同步
284-
- **双向同步** - 数据库 ↔ JSON文件
285-
- **冲突解决** - 自动处理数据冲突
286-
- **增量同步** - 只同步变更的数据
287-
- **重试机制** - 失败自动重试
288-
289-
### 📋 任务队列
290-
- **优先级调度** - 重要任务优先处理
291-
- **批量处理** - 批量操作优化
292-
- **状态跟踪** - 完整的任务状态管理
293-
- **错误处理** - 智能错误恢复机制
290+
### 智能同步
291+
- **双向同步** - 数据库与JSON文件之间保持双向同步
292+
- **冲突解决** - 自动检测并解决数据冲突
293+
- **增量同步** - 仅同步变更数据,减少I/O开销
294+
- **重试机制** - 同步失败时自动重试
295+
296+
### 任务队列
297+
- **优先级调度** - 按任务优先级进行调度处理
298+
- **批量处理** - 优化批量操作的执行效率
299+
- **状态跟踪** - 提供完整的任务状态管理
300+
- **错误处理** - 实现智能错误恢复机制
294301

295302
## 开发信息
296303

0 commit comments

Comments
 (0)