# VelocityVersionBouncer
**一个简单且完全自动化的方式,根据玩家的游戏版本连接到正确的服务器。**
**VelocityVersionBouncer** 是一个插件,用于 [Velocity 代理](https://papermc.io/software/velocity)(在版本 3.4 上测试过),它会自动选择最兼容的后端服务器来连接玩家,基于他们的协议版本(Minecraft 游戏版本)。
---
### 🔧 工作原理
- 每次客户端连接到你的代理时,插件会检查所有已注册的服务器并比较它们的协议版本(游戏版本)。
- 默认情况下,将选择第一个匹配的服务器(你可以在配置文件中更改)。
- 配置文件 `config.toml` 位于插件文件夹中 (`plugins/VelocityVersionBouncer/config.toml`)。
- 在配置文件中,你可以更改服务器检查的顺序或排除服务器进行检查。
- 配置文件本身对每个选项都有很好的解释(尽管我会在此 README 的末尾提供一个示例 config.toml)。
### ❓ 你可能想知道的问题:
- **当通过 `/server` 更改服务器时也会触发吗?** 不,版本检查仅在最初连接时触发(从多人游戏服务器列表)。
- **如果没有找到兼容的服务器会发生什么?** 客户端将被断开连接,并显示相应的提示/原因。
- **这适用于模组 Minecraft 服务器吗?** 如果你使用 Ambassador+ProxyCompatibleForge [(更多信息)](https://docs.papermc.io/velocity/server-compatibility) 等设置,此插件将根据玩家的协议版本(游戏版本)路由客户端,而不是他们安装的模组。_注意:此设置仅在 PaperMC 和 Forge 服务器上进行过测试。_
- **此插件会使用大量的 CPU 资源吗?** 完全不会。插件非常轻量级,并且在连接时仅对每个服务器执行一次 ping。即使在大规模网络中,性能影响也很小。
- **我可以设置回退服务器来接住被踢出的玩家吗? 是的,此插件包含一个回退功能,可以通过配置文件/开关进行配置。**
### 📦 安装 & 🛠️ 要求
1. 下载 `.jar` 文件 ([在此](https://github.com/Hallo5000/VelocityVersionBouncer/blob/master/build/libs/VelocityVersionBouncer-1.1.0-release.jar)) 或自行构建 (gradle 文件已包含)。
2. 将文件放入服务器的 `plugins/` 文件夹(仅限代理!)并重新启动服务器以生成配置文件。
3. 编辑完配置文件后,再次重新启动代理,一切应该能够正常工作。
_注意:如果你没有运行 `Java 21`(或更高版本)和 `Velocity 3.4.0` 或更高版本,此插件可能无法正常工作_
## 示例配置:
```toml
# 此配置用于确定服务器的检查顺序,以及可选地排除特定服务器。
# 'exclude-servers' 是要跳过版本比较的服务器名称的字符串数组。
# 示例:["server1", "server2"]
# 注意:字符串外部的空格将被忽略。
exclude-servers = ["test_server", "privateServer"]
# 'order-mode' 定义应如何排序服务器列表(不区分大小写)。
# 选项:
# "DEFAULT" - 以字母顺序检查服务器
# "CUSTOM" - 使用在 'server-list' 中定义的顺序
order-mode = "CUSTOM"
# 'server-list' 仅在 order-mode 设置为 "CUSTOM" 时使用。
# 最好在这里列出所有你的服务器并单独使用 'exclude-servers' 管理排除,
# 但只包括特定服务器也是可能的。
server-list = ["lobby", "minigames", "test_server", "privateServer"]
# 'first-match' 确定是否应使用第一个或最后一个匹配的服务器。
# 设置为 true 以使用找到的第一个匹配项,false 以使用最后一个。
first-match = true
# 如果启用此选项,则每当客户端从服务器被踢出(无论是在登录、通过 /kick 或其他原因),
# 他们将被自动重定向(弹回)到另一个服务器,而不是断开连接。
enable-fallback-bouncing = true
# 如果设置为 true,则客户端被踢出的服务器将暂时排除在回退选项之外,
# 防止在回退时将客户端发送回该服务器。
exclude-previous-server = false
# 当 'explicit-fallback-server' 中存在有效的服务器名称时,插件将不再搜索新的服务器,而是仅尝试指定的服务器。
# 如果您想要禁用此选项,请将其留空(此选项在 enable-fallback-bouncing 设置为 false 时也会禁用)。
explicit-fallback-server = ""
# 将在未来添加 [explicit-routing] 选项,该选项将不再自动搜索匹配的服务器,而是采用通过配置文件提供的静态路由映射
```