Files
AuroraContainerLog/README.md
2026-06-05 03:56:17 +08:00

223 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# AuroraContainerLog
AuroraContainerLog 是一个面向 Spigot 1.12.2 的箱子容器日志插件,用于记录指定世界内玩家对箱子类容器的物品放入和取出行为,适合地皮服排查箱子物品被盗问题。
当前插件版本:`1.1.5`
## 1. 功能概览
- 支持指定世界监听箱子容器。
- 支持普通箱子、陷阱箱、大箱子记录与查询。
- 支持记录玩家名称和 UUID。
- 支持记录容器坐标:`world/x/y/z`
- 支持记录动作:`TAKE``PUT`
- 支持记录物品类型、数量、展示名、lore、附魔和完整 ItemStack Base64。
- 支持 SQLite 存储。
- 支持自动清理超过指定保留天数的历史数据。
- 支持按玩家、指定箱子、附近范围分页查询。
- 数据库写入和查询通过异步队列执行,避免阻塞主线程。
## 2. 运行环境
```text
Java: 8
服务端: Spigot 1.12.2
构建工具: Maven
数据库: SQLite
```
运行依赖:
```text
HikariCP
sqlite-jdbc
```
插件 JAR 不内置 `HikariCP``sqlite-jdbc`。运行环境必须通过服务端公共依赖、启动 classpath、依赖插件或统一依赖加载方案提供这两个依赖。
## 3. 安装方式
构建插件:
```bash
mvn package
```
构建完成后,将生成的插件包放入服务端:
```text
plugins/AuroraContainerLog-1.1.5.jar
```
启动服务端后,插件会生成默认配置文件:
```text
plugins/AuroraContainerLog/config.yml
```
## 4. 配置文件
默认配置:
```yml
listen-worlds:
- world
query:
page-size: 8
chest-recent-days: 30
max-near-radius: 50
default-page: 1
database:
file: containerlog.db
cleanup:
enabled: true
retention-days: 60
interval-hours: 24
message-prefix: "&8[&bACL&8] &7"
```
配置说明:
- `listen-worlds`:启用箱子日志监听的世界列表。
- `query.page-size`:每页显示的日志数量。
- `query.chest-recent-days``/acl chest` 默认查询最近多少天的记录。
- `query.max-near-radius``/acl near` 允许的最大查询半径。
- `query.default-page`:未填写页码时使用的默认页。
- `database.file`SQLite 数据库文件名。
- `cleanup.enabled`:是否启用过期日志自动清理。
- `cleanup.retention-days`:日志保留天数,超过后自动清理。
- `cleanup.interval-hours`:自动清理执行间隔。
- `message-prefix`:命令消息前缀。
## 5. 记录内容
每条日志会记录以下字段:
```text
时间
世界
容器坐标 x/y/z
玩家名称
玩家 UUID
动作 TAKE / PUT
物品 material
物品 amount
物品 displayName
物品 lore
物品 enchantments
完整 ItemStack Base64
```
插件采用打开容器时快照、关闭容器时对比差异的方式记录变化,只记录箱子容器库存变化,不记录玩家背包自身变化。
## 6. 命令
管理命令需要权限:
```text
auroracontainerlog.admin
```
重载配置:
```text
/acl reload
```
查询指定玩家最近记录:
```text
/acl player <玩家名> [天数] [页码]
```
查询当前看着的箱子最近记录:
```text
/acl chest [页码]
```
查询附近箱子记录:
```text
/acl near <半径> [天数] [页码]
```
命令别名:
```text
/aclog
```
## 7. 权限
```text
auroracontainerlog.admin
```
默认权限:
```text
op
```
## 8. 数据库说明
当前版本仅支持 SQLite。
SQLite 使用 HikariCP 单连接池:
```text
maximumPoolSize: 1
minimumIdle: 1
connectionTimeout: 10000
validationTimeout: 3000
idleTimeout: 600000
maxLifetime: 1700000
```
连接池大小固定为 1避免 SQLite 多连接写入导致数据库锁竞争。
## 9. 自动清理规则
插件启动后会排队执行一次过期数据清理,之后按 `cleanup.interval-hours` 周期执行。
默认规则:
```text
保留最近 60 天日志
每 24 小时清理一次
```
清理操作进入数据库异步执行队列,不在主线程直接执行 SQL。
## 10. 查询行为
- `/acl chest` 会查询玩家准星指向的箱子。
- 大箱子查询会同时匹配相邻两侧箱子坐标。
- 玩家执行查询时,结果支持点击传送到记录坐标。
- 控制台查询会显示完整坐标文本。
- 查询结果按时间倒序分页显示。
## 11. 使用流程
1. 确认服务端运行环境已提供 `HikariCP``sqlite-jdbc`
2. 将插件 JAR 放入服务端 `plugins` 目录。
3. 启动服务端生成默认配置。
4. 修改 `listen-worlds`,填入需要监听的世界。
5. 按需调整分页、自动清理和数据库文件配置。
6. 执行 `/acl reload` 重载配置。
7. 使用 `/acl chest``/acl player``/acl near` 查询日志。
## 12. 注意事项
- 插件包不包含 `sqlite-jdbc``HikariCP`,缺少运行依赖会导致 SQLite 连接池初始化失败。
- 修改监听世界后,只影响后续容器操作记录,不会修改历史数据。
- 关闭容器时只记录最终净变化,不记录打开期间每一次中间点击动作。
- 若玩家取出物品后又在关闭前放回相同数量,最终差异为 0不会写入日志。
- 发布新版本前应确认 `plugin.yml` 中版本号已递增。
- 上线前建议在测试服验证普通点击、shift-click、数字键、拖拽、大箱子和未监听世界场景。