Skip to content

Minecraft-InCraftTime-Server/SimpleTransfer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SimpleTransfer

Velocity 线路切换插件,让玩家在不退出服务器的情况下自动或手动切换到最优线路。

核心功能

无感切换线路

玩家切换线路时不需要退出服务器,直接在游戏内传送到目标线路服务器。小地图、背包、玩家状态全部保留,不会出现坐标重置或地图错乱的问题。

单域名多线路

通过 Velocity 反向代理,玩家只需要记住一个域名(如 play.example.com),插件会根据地理位置、网络运营商等条件自动分配最优线路。对外只暴露 Velocity 的 IP,内部子服务器 IP 完全隐藏。

智能路由规则

支持基于多种条件的自动转移:

  • 地理位置: 国家、省份
  • 网络运营商: 电信、联通、移动
  • 连接域名: 支持 SRV 解析(如 test.2b2t.icu:10004),支持端口匹配
  • 玩家 UUID: VIP 专属线路
  • 历史记录: 自动记住玩家上次使用的线路

规则支持逻辑运算:

  • | 表示或(电信|联通)
  • ! 表示非(!中国 = 海外)
  • 多条件 AND 组合

智能防环路

  • 冗余转移检测: 如果玩家已经连接到目标线路的 IP/端口,插件会自动跳过转移,防止连接中断或死循环。
  • 超时保护: 如果转移失败,自动回退到安全服务器。

线路管理

  • 实时延迟监控
  • 手动切换线路
  • 查看所有可用线路和延迟
  • 管理员可以强制转移玩家

使用场景

跨国服务器
国内玩家分配到 BGP 线路,海外玩家分配到国际线路,延迟都很低。

多运营商优化
电信用户走电信专线,联通用户走联通专线,移动用户走 BGP。

隐藏内部架构
外部只能看到 Velocity 的 IP,无法直接连接内部子服务器,防止 DDoS 绕过。

单域名多入口
配置 cn.example.comus.example.com 解析到同一个 Velocity,插件根据域名自动分流。支持 SRV 记录解析,精准匹配 host:port

快速开始

安装

  1. 下载 simpletransfer-xx.jar
  2. 放入 Velocity 的 plugins 目录
  3. 重启 Velocity
  4. 编辑 plugins/simpletransfer/config.conf 配置线路
  5. 编辑 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 的内网互联,不对外暴露端口。

配置示例

场景1: 运营商优化

# 电信用户走电信线路
{
  enabled = true
  conditions {
    isp = "电信"
    has_history = false
  }
  action { transfer = "dx" }
}

# 联通用户走联通线路
{
  enabled = true
  conditions {
    isp = "联通"
    has_history = false
  }
  action { transfer = "lt" }
}

场景2: 地理位置分流

# 海外玩家
{
  enabled = true
  conditions {
    country = "!中国"
  }
  action { transfer = "us" }
}

# 广东玩家
{
  enabled = true
  conditions {
    province = "广东"
  }
  action { transfer = "gd" }
}

场景3: 域名分流 (支持 SRV)

# 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.comus.example.com 都解析到 Velocity 的 IP,插件会自动识别玩家连接时使用的域名。

场景4: VIP 专线

{
  enabled = true
  conditions {
    uuid = [
      "123e4567-e89b-12d3-a456-426614174000"
    ]
  }
  action { transfer = "vip" }
}

数据持久化

插件使用 H2 数据库自动保存:

  • 玩家最后使用的线路
  • 历史连接记录

数据库文件位于 plugins/simpletransfer/data/simpletransfer.mv.db

注意事项

  • 确保 Velocity 配置中已注册所有子服务器
  • rules.conf 中的 transfer 目标必须在 config.tomlservers 中定义
  • config.toml 中的 target 必须是 Velocity 中注册的服务器名
  • 规则从上到下匹配,第一个符合的规则会被执行
  • 地理位置检测使用 ip2region 离线数据库,无需联网

构建

mvn clean package

编译后的文件在 target/simpletransfer-xx.jar

开源协议

GPL-3.0 License

使用本项目源码的衍生作品必须:

  • 保留原作者版权声明
  • 使用相同的 GPL-3.0 协议
  • 公开源代码

About

Smart transfer routing plugin with ping monitoring

Resources

License

Stars

Watchers

Forks

Packages

No packages published