# Velocity IP Ban 插件
   
> **由 Yunexal Labs 创建** - 一个用于 Velocity 代理服务器的简单高效的 IP 封禁插件
## 📋 概述
Velocity IP Ban 插件是一个轻量级但功能强大的解决方案,用于管理 Velocity 代理服务器上的 IP 封禁。该插件提供即时 IP 阻止、自动在线玩家踢出以及对多 IP 管理的支持——所有这些都没有不必要的复杂性。
## ✨ 功能
- 🚫 **即时 IP 阻止** - 在玩家能够连接到任何后端服务器之前,阻止封禁的 IP 地址
- 👥 **多 IP 支持** - 使用单个命令封禁或解封多个 IP 地址
- ⚡ **在线玩家踢出** - 当玩家的 IP 被封禁时,自动将在线玩家踢出
- 📊 **统计集成** - 内置 bStats 集成,用于使用分析
- 🎨 **彩色消息** - 美观的彩色控制台输出和玩家消息
- 💾 **SQLite 数据库** - 轻量级、无服务器数据库存储
- 🔧 **简单配置** - 首次运行时需要最少的设置
- 🌐 **无依赖** - 仅使用 Velocity 即可开箱即用
## 🚀 安装
1. 从发布版下载最新的 `velocity-ip-ban-1.0.0.jar`
2. 将 JAR 文件放在您的 Velocity 服务器的 `plugins` 文件夹中
3. 重新启动您的 Velocity 服务器
4. 插件将在首次运行时自动创建配置文件
## 📖 命令
### `/ipban` - 封禁 IP 地址
**权限:** `velocityipban.ban`
**别名:** `/banip`
#### 使用示例:
```bash
# 显示所有封禁 IP 的列表
/ipban
# 封禁单个 IP 地址
/ipban 192.168.1.100
# 封禁多个 IP 地址一次
/ipban 192.168.1.100 10.0.0.50 172.16.0.10
# 混合有效和无效 IP (无效的将跳过并显示警告)
/ipban 192.168.1.100 invalid.ip 10.0.0.50
```
### `/unbanip` - 解封 IP 地址
**权限:** `velocityipban.unban`
**别名:** `/unban-ip`
#### 使用示例:
```bash
# 解封单个 IP 地址
/unbanip 192.168.1.100
# 解封多个 IP 地址一次
/unbanip 192.168.1.100 10.0.0.50 172.16.0.10
```
## ⚙️ 配置
### config.yml
```yaml
# Velocity IP Ban 插件配置
# 由 Yunexal Labs 创建
#
# Velocity 代理服务器的简单高效的 IP 封禁系统
# 数据库设置
database:
type: "sqlite"
sqlite:
file: "banned_ips.db"
# 调试模式
debug: false
```
### messages.properties
所有插件消息都可以通过 `messages.properties` 文件进行自定义:
```properties
# 封禁消息
ban.message=&c您的 IP 已被 Yunexal Autonomous Security 封禁。无法申诉。技术问题?
ban.kick_online=&c您的 IP 已被封禁,您正在在线。无法重新连接。
ban.success=&a已成功封禁 IP: &f{ip}
ban.success_multiple=&a已成功封禁 &f{count} &a个 IP: &f{ips}
ban.already=&cIP {ip} 已被封禁
ban.some_already=&e警告:某些 IP 已被封禁: &f{already_banned}
# 解封消息
unban.success=&a已成功解封 IP: &f{ip}
unban.success_multiple=&a已成功解封 &f{count} &a个 IP: &f{ips}
unban.not_banned=&cIP {ip} 未被封禁
unban.some_not_banned=&e警告:某些 IP 未被封禁: &f{not_banned}
# 列表消息
list.header=&6=== 封禁的 IP ===
list.entry=&7{ip} &8- &fbanned by &f{banned_by}
list.empty=&7目前没有封禁的 IP
# 错误消息
error.invalid_ip=&c无效的 IP 地址格式: &f{ip}
error.no_permission=&c您没有使用此命令的权限
error.database=&c发生数据库错误。请检查控制台以获取详细信息。
# 使用消息
usage.ipban=&c用法: &f/ipban &7[显示列表] &f| &f/ipban [ip2] [ip3] ...
usage.unbanip=&c用法: &f/unbanip [ip2] [ip3] ...
```
## 🔒 权限
| 权限 | 描述 | 默认值 |
|------------|-------------|---------|
| `velocityipban.ban` | 允许使用 `/ipban` 命令 | `op` |
| `velocityipban.unban` | 允许使用 `/unbanip` 命令 | `op` |
## 🗃️ 数据库模式
该插件使用一个简单的 SQLite 数据库,具有以下结构:
```sql
CREATE TABLE banned_ips (
id INTEGER PRIMARY KEY AUTOINCREMENT,
ip_address TEXT NOT NULL UNIQUE,
banned_by TEXT NOT NULL,
banned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```
## 📊 工作原理
1. **连接阻止**: 玩家尝试连接时,插件在 `PreLoginEvent` 中检查其 IP 是否在数据库中。
2. **多 IP 管理**: 命令支持空格分隔的 IP 地址以进行批量操作
3. **在线玩家踢出**: 当 IP 被封禁时,立即将所有具有该 IP 的在线玩家断开连接
4. **验证**: 所有 IP 地址在处理之前都会进行验证,并为无效格式提供详细的错误消息
5. **异步操作**: 所有数据库操作均以异步方式执行,以防止服务器滞后