Velocity 线路切换插件,让玩家在不退出服务器的情况下自动或手动切换到最优线路。
玩家切换线路时不需要退出服务器,直接在游戏内传送到目标线路服务器。小地图、背包、玩家状态全部保留,不会出现坐标重置或地图错乱的问题。
通过 Velocity 反向代理,玩家只需要记住一个域名(如 play.example.com),插件会根据地理位置、网络运营商等条件自动分配最优线路。对外只暴露 Velocity 的 IP,内部子服务器 IP 完全隐藏。
支持基于多种条件的自动转移:
- 地理位置: 国家、省份
- 网络运营商: 电信、联通、移动
- 连接域名: 支持 SRV 解析(如
test.2b2t.icu:10004),支持端口匹配 - 玩家 UUID: VIP 专属线路
- 历史记录: 自动记住玩家上次使用的线路
规则支持逻辑运算:
|表示或(电信|联通)!表示非(!中国 = 海外)- 多条件 AND 组合
- 冗余转移检测: 如果玩家已经连接到目标线路的 IP/端口,插件会自动跳过转移,防止连接中断或死循环。
- 超时保护: 如果转移失败,自动回退到安全服务器。
- 实时延迟监控
- 手动切换线路
- 查看所有可用线路和延迟
- 管理员可以强制转移玩家
跨国服务器
国内玩家分配到 BGP 线路,海外玩家分配到国际线路,延迟都很低。
多运营商优化
电信用户走电信专线,联通用户走联通专线,移动用户走 BGP。
隐藏内部架构
外部只能看到 Velocity 的 IP,无法直接连接内部子服务器,防止 DDoS 绕过。
单域名多入口
配置 cn.example.com 和 us.example.com 解析到同一个 Velocity,插件根据域名自动分流。支持 SRV 记录解析,精准匹配 host:port。
- 下载
simpletransfer-xx.jar - 放入 Velocity 的
plugins目录 - 重启 Velocity
- 编辑
plugins/simpletransfer/config.conf配置线路 - 编辑
plugins/simpletransfer/rules.conf配置规则
config.conf - 定义线路 (HOCON 格式)
permission_groups {
default {
permission = ""
servers {
bgp {
host = "bgp.example.com"
port = 25565
display_name = "BGP线路"
description = "多线BGP"
}
dx {
host = "dx.example.com"
port = 25565
display_name = "电信线路"
description = "电信专线"
}
}
}
}rules.conf - 定义规则
[
{
enabled = true
name = "电信用户优化"
conditions {
isp = "电信"
has_history = false
}
action {
transfer = "dx"
}
}
]玩家命令:
/st list- 查看所有线路和延迟/st ping- 测试当前延迟/st help- 帮助信息
管理员命令:
/st status <玩家>- 查看玩家信息/st transfer <玩家> <线路>- 强制转移玩家/st reload- 重载配置/st rules- 查看规则列表
simpletransfer.use- 基础功能simpletransfer.admin- 管理功能
玩家 -> Velocity (SimpleTransfer) -> 内部子服务器
|
+-- 检测 IP 地理位置
+-- 匹配路由规则 (支持 SRV 域名)
+-- 自动转移到最优线路 (智能防环路)
+-- 记录历史选择
Velocity 作为中转层,所有玩家连接先到 Velocity,插件检测玩家的 IP 地理位置、运营商信息后,根据 rules.conf 中的规则自动转移到合适的子服务器。下次进入时直接连接上次的线路。
子服务器之间通过 Velocity 的内网互联,不对外暴露端口。
# 电信用户走电信线路
{
enabled = true
conditions {
isp = "电信"
has_history = false
}
action { transfer = "dx" }
}
# 联通用户走联通线路
{
enabled = true
conditions {
isp = "联通"
has_history = false
}
action { transfer = "lt" }
}# 海外玩家
{
enabled = true
conditions {
country = "!中国"
}
action { transfer = "us" }
}
# 广东玩家
{
enabled = true
conditions {
province = "广东"
}
action { transfer = "gd" }
}# cn.example.com 进入国内线路
{
enabled = true
conditions {
hostname = "cn.example.com" # 默认端口 25565
}
action { transfer = "bgp" }
}
# SRV 域名匹配 (需指定端口)
{
enabled = true
conditions {
hostname = "play.example.com:10004"
}
action { transfer = "vip" }
}只需将 cn.example.com 和 us.example.com 都解析到 Velocity 的 IP,插件会自动识别玩家连接时使用的域名。
{
enabled = true
conditions {
uuid = [
"123e4567-e89b-12d3-a456-426614174000"
]
}
action { transfer = "vip" }
}插件使用 H2 数据库自动保存:
- 玩家最后使用的线路
- 历史连接记录
数据库文件位于 plugins/simpletransfer/data/simpletransfer.mv.db
- 确保 Velocity 配置中已注册所有子服务器
rules.conf中的transfer目标必须在config.toml的servers中定义config.toml中的target必须是 Velocity 中注册的服务器名- 规则从上到下匹配,第一个符合的规则会被执行
- 地理位置检测使用 ip2region 离线数据库,无需联网
mvn clean package编译后的文件在 target/simpletransfer-xx.jar
GPL-3.0 License
使用本项目源码的衍生作品必须:
- 保留原作者版权声明
- 使用相同的 GPL-3.0 协议
- 公开源代码