# SpySimpleBan 插件
SpySimpleBan 是一款全面的 Minecraft 模组插件,为服务器管理员提供完整的惩罚管理工具。

## 插件信息
- **名称:** SpySimpleBan
- **版本:** 1.0.0
- **描述:** 带有 IP 和 UUID 封禁的简单封禁插件
- **API 版本:** 1.21
## 可用命令
### 封禁命令
#### `/ban <玩家> <原因>`
- **描述:** 通过名称、IP 和 UUID 永久封禁一名玩家
- **权限:** `spy.admin`
- **用法示例:** `/ban PlayerName 在出生区域破坏`
- **功能:**
- 同时按名称、IP 地址和 UUID 封禁
- 对在线和离线玩家都有效
- 对于在线玩家:立即踢出并显示封禁消息
- 对于离线玩家:创建离线封禁,在下次尝试加入时更新 IP/UUID
- 向所有玩家广播封禁消息
- 永久封禁(无过期时间)
#### `/tempban <玩家> <时间> <原因>`
- **描述:** 通过名称、IP 和 UUID 临时封禁一名玩家
- **权限:** `spy.tempban`
- **用法示例:** `/tempban PlayerName 1h 在聊天中垃圾信息`
- **时间格式:**
- `s` = 秒 (例如 `30s`)
- `m` = 分钟 (例如 `15m`)
- `h` = 小时 (例如 `2h`)
- `d` = 天 (例如 `7d`)
- 可以组合:`1d12h30m` 代表 1 天 12 小时 30 分钟
- **功能:**
- 与永久封禁相同 IP/UUID 封禁
- 在指定时间后自动过期
- 在踢出消息中显示持续时间
- 自动清理删除过期封禁
#### `/unban <玩家>`
- **描述:** 从玩家处移除封禁
- **权限:** `spy.unban`
- **用法示例:** `/unban PlayerName`
- **功能:**
- 移除所有封禁数据(名称、IP、UUID)
- 对永久封禁和临时封禁都有效
- 向所有玩家广播解封消息
- 如果玩家未被封禁,则返回错误
#### `/banlist`
- **描述:** 显示当前所有活跃的封禁玩家
- **权限:** `spy.banlist`
- **用法示例:** `/banlist`
- **功能:**
- 只显示未过期的封禁
- 显示封禁总数
- 对于每个封禁显示:
- 玩家名称
- 封禁原因
- 谁封禁了他们
- 封禁日期和时间
- 封禁类型(永久/临时)
- 对于临时封禁:到期日期和剩余时间
- 格式化颜色以方便阅读
### 静音命令
#### `/mute <玩家> <原因>`
- **描述:** 永久静音一名玩家
- **权限:** `spy.mute`
- **用法示例:** `/mute PlayerName 使用不适当的语言`
- **功能:**
- 阻止玩家发送聊天消息
- 对在线和离线玩家都有效
- 对于在线玩家:立即通知他们静音
- 对于离线玩家:创建离线静音,在下次加入时更新 UUID
- 向所有玩家广播静音消息
- 永久静音(无过期时间)
#### `/unmute <玩家>`
- **描述:** 从玩家处移除静音
- **权限:** `spy.mute`
- **用法示例:** `/unmute PlayerName`
- **功能:**
- 移除所有静音数据
- 向所有玩家广播解除静音消息
- 如果玩家未被静音,则返回错误
- 玩家可以立即再次聊天
#### `/mutelist`
- **描述:** 显示当前所有被静音的玩家
- **权限:** `spy.mutelist`
- **用法示例:** `/mutelist`
- **功能:**
- 显示所有活跃的静音
- 显示静音总数
- 对于每个静音显示:
- 玩家名称
- 静音原因
- 谁静音了他们
- 静音日期和时间
- 格式化颜色以方便阅读
#### `/tempmute <玩家> <时间> <原因>`
- **描述:** 临时静音一名玩家
- **权限:** `spy.tempmute`
- **用法示例:** `/tempmute PlayerName 30m 在聊天中垃圾信息`
- **时间格式:**
- `s` = 秒 (例如 `30s`)
- `m` = 分钟 (例如 `15m`)
- `h` = 小时 (例如 `2h`)
- `d` = 天 (例如 `7d`)
- 可以组合:`1h30m` 代表 1 小时 30 分钟
- **功能:**
- 与永久静音相同的功能
- 在指定时间后自动过期
- 在静音消息中显示持续时间
- 每秒自动清理删除过期的静音
- 对在线和离线玩家都有效
- 对于在线玩家:立即通知他们持续时间
- 向所有玩家广播带有持续时间的静音消息
### 警告命令
#### `/warn <玩家> <原因>`
- **描述:** 向玩家发出警告
- **权限:** `spy.warn`
- **用法示例:** `/warn PlayerName 违反服务器规则`
- **功能:**
- 在玩家的历史记录中记录警告
- 对在线和离线玩家都有效
- 对于在线玩家:显示带有总数格式化的警告消息
- 通知所有在线工作人员
- 警告累积(无自动删除)
- 向被警告的玩家显示警告计数
#### `/unwarn <玩家>`
- **描述:** 移除玩家的所有警告
- **权限:** `spy.unwarn`
- **用法示例:** `/unwarn PlayerName`
- **功能:**
- 移除指定玩家的所有警告
- 显示移除了多少个警告
- 如果玩家在线,则通知目标玩家
- 工作人员专用通知(无公共广播)
- 如果玩家没有警告,则返回错误
#### `/warnlist <玩家>`
- **描述:** 显示特定玩家的所有警告
- **权限:** `spy.warnlist`
- **用法示例:** `/warnlist PlayerName`
- **功能:**
- 显示指定玩家的所有警告
- 显示警告总数
- 对于每个警告显示:
- 警告原因
- 谁发出的警告
- 警告日期和时间
- 对在线和离线玩家都有效
- 如果玩家没有警告,则返回消息
## 权限系统
### 主要权限
- `spy.admin` - 掌握权限(授予所有命令访问权限)
- `spy.tempban` - 允许 `/tempban` 命令
- `spy.unban` - 允许 `/unban` 命令
- `spy.mute` - 允许 `/mute` 和 `/unmute` 命令
- `spy.tempmute` - 允许 `/tempmute` 命令
- `spy.warn` - 允许 `/warn` 命令
- `spy.banlist` - 允许 `/banlist` 命令
- `spy.unwarn` - 允许 `/unwarn` 命令
- `spy.warnlist` - 允许 `/warnlist` 命令
- `spy.mutelist` - 允许 `/mutelist` 命令
### 权限详情
- 所有权限默认为 `op` 级别
- `spy.admin` 包括所有其他权限作为子权限
- `/ban` 命令直接需要 `spy.admin` 权限
- 工作人员需要适当的权限才能使用模组命令
## 数据存储
### 文件位置
- **封禁:** `plugins/SpySimpleBan/bans.json`
- **静音:** `plugins/SpySimpleBan/mutes.json`
- **警告:** `plugins/SpySimpleBan/warns.json`
### 数据功能
- JSON 格式,便于阅读和备份
- 所有更改时自动保存数据
- 线程安全操作
- 每秒自动清理过期封禁
- 当玩家加入时,对离线玩家丰富 UUID
## 特色功能
### IP 和 UUID 封禁
- 封禁适用于玩家名称、IP 地址和 UUID
- 防止通过同一 IP 的替身帐户逃避封禁
- UUID 封禁可防止更改名称绕过封禁
### 离线玩家支持
- 所有命令对离线玩家有效
- 当玩家加入时,通过 IP/UUID 丰富数据
- 使用存储的玩家数据进行准确的目标
### 自动过期
- 临时封禁自动过期
- 每秒清理过期的封禁
- 无需手动干预定时惩罚
### 工作人员通知
- 警告命令通知所有在线工作人员
- 移除警告命令发送工作人员专用通知
- 广播可让工作人员了解模组操作
### 聊天集成
- 静音的玩家无法发送聊天消息
- 聊天侦听器可防止静音的玩家的消息
- 实时静音检查在聊天事件期间
### 错误处理
- 无效用处的清晰错误消息
- 带有关联用户友好消息的权限检查
- 所有命令参数的验证
- 离线玩家操作的优雅处理