## **服务器重定向**
这个模组提供了一种轻量级方法,允许服务器将玩家转移到另一个服务器地址,无需使用代理服务器。
服务器重定向支持 Forge、Fabric、Bukkit/Spigot、SpongeVanilla/SpongeForge、Bungeecord/Waterfall 和 Velocity。
使用服务器重定向,服务器管理员可以避免由代理服务器(Bungeecord、Waterfall 和 Velocity)引起的模组不兼容问题。
特别是,可以将此模组与 **Waterfall 和 Forge 1.13+** 服务器和客户端结合使用,提供了一种在服务器之间转移玩家的方法(目前,1.13+ 的 Forge 服务器需要“在线”,因为它们尚未包含 IP 转发功能...)。
此模组是可选的,因此它可以添加到模组包中,并且玩家仍然可以在没有此模组的情况下加入服务器。同样,客户端可以加入具有此模组的服务器,而无需此模组。
## **指令**
- **/redirect <目标> <服务器地址>**: 将指定的玩家转移到指定的地址
- **/fallback <目标> <服务器地址>**: 为指定的玩家设置备用服务器地址
- **/ifplayercanredirect <目标> <指令...>**: 为每个已安装服务器重定向的玩家运行指定的指令
- **/ifplayercannotredirect <目标> <指令...>**: 为每个未安装服务器重定向的玩家运行指定的指令
指令来源可以是运行指令的任何事物,例如指令方块、玩家或控制台。
将 **/redirect** 替换为 **/fallback**,以便在目标玩家从服务器强制断开连接时,他们连接到指定的服务器地址。
##### **<目标> 参数可以是以下之一:**
- **玩家名称/UUID**: 服务器上的指定玩家
- **目标选择器**: 一个 [目标选择器](https://minecraft.fandom.com/wiki/Target_selectors)。目标选择器在 Bungeecord 和 Velocity 上不可用。
- **r=N**: 指令发送者 N 块范围内的所有玩家,或者在控制台运行时的世界主要地点的所有玩家。仅限插件版本。
- **s=<服务器名称>**: 指定服务器名称中的所有玩家。仅限 Bungeecord 和 Velocity。
- *: 服务器上的所有玩家。
##### **<指令...> 参数可以包含以下占位符:**
- **%玩家名称**: 此占位符将被替换为玩家的名称
- **%玩家 ID**: 此占位符将被替换为玩家的 UUID
**注意**: 如果在目标玩家刚加入服务器时运行 **/ifplayercanredirect** 和 **/ifplayercannotredirect**,则它们可能无法按预期工作。这些指令依赖于客户端向服务器发送一个数据包,告诉他们已经安装了此模组。这个数据包需要客户端发送一段时间才能由服务器处理。建议在玩家加入服务器后至少延迟 20 刻时执行此指令!
#### **示例:**
- **/redirect KaiNoMood myawesomemcserver.net:25667**: 玩家 KaiNoMood 将连接到 myawesomemcserver.net:25667
- **/redirect a54a7884-9ea4-4d54-ac35-1623d70ffbe1 myawesomemcserver.net:25667**: 具有指定 UUID 的玩家将连接到 myawesomemcserver.net:25667
- **/redirect * myawesomemcserver.net:25667**: 服务器上的所有玩家将连接到 myawesomemcserver.net:25667。
- **/redirect @a[m=creative] myawesomemcserver.net:25667**: 所有创造模式的玩家将连接到 myawesomemcserver.net:25667。
- **/redirect r=10 myawesomemcserver.net:25667**: 指令发送者周围 6 块范围内的所有玩家将连接到 myawesomemcserver.net:25667。仅在 Bukkit 和 Sponge 驱动的服务器上有效。
- **/redirect s=lobby myawesomemcserver.net:25667**: “lobby” 服务器中的所有玩家将连接到 myawesomemcserver.net:25667。仅在 Bungeecord 和 Velocity 代理服务器上有效。
- **/ifplayercanredirect * say %PlayerName is online and using Server Redirect! Yay!**: 指定的指令将为服务器上的每个拥有服务器重定向的玩家运行。
- **/ifplayercannotredirect @a[distance=..5] tell %PlayerName It does not seem you have Server Redirect installed! Make sure to install it!**: 指定的指令将为距离指令来源 5 块内的所有没有服务器重定向的玩家运行。
将 **/redirect** 替换为 **/fallback** 以设置目标玩家的备用地址。有关备用指令的更多信息,请阅读以下内容。
## **常见问题解答**
### **此模组如何重定向玩家**
- 运行 /redirect 命令时,服务器会向指定的玩家发送一个“transfer”数据包,其中包含指定的服务器地址。
- 所有接收到数据包的玩家并安装了 ServerRedirect 模组将从服务器断开连接,并自动连接到指定的服务器地址。
可以使用任何可以被具有 “直接连接” 按钮的玩家到达的服务器地址。
没有安装模组的玩家不会受到“transfer”数据包的影响:他们将简单地保持在当前服务器上连接。
此行为类似于 "Minecraft: Bedrock Edition" 中存在的 transfer 数据包,该功能由 Mojang 默认包含在客户端中。遗憾的是,"Minecraft: Java Edition" 缺少此功能。
重定向和备用命令不应由玩家运行。 它们旨在由控制台、指令方块和其他插件运行。 建议使用命令别名和“服务器选择器” GUI(请参阅 BossShop 或 VirtualChest)。
### **备用命令是用于什么的**
备用命令告诉客户端,如果他们从服务器强制断开连接(例如,服务器崩溃),他们应该连接到哪个服务器地址。
服务器管理员希望通过服务器为每个加入服务器的玩家自动运行备用命令来实现此目的。如果服务器由于任何原因关闭,玩家将自动连接到备用命令中指定的备用服务器地址。
备用功能的另一个用途是在您想要将玩家重定向到服务器时,但他们可能由于某种原因而被拒绝。首先,将玩家的备用地址设置为他们可以确信可以访问的服务器地址,然后使用重定向命令将玩家重定向到他们可能被拒绝的服务器地址。如果玩家无法加入他们被重定向到的服务器,他们将自动加入备用服务器。
### **使用此模组而不是像 Bungeecord、Waterfall 或 Velocity 这样的代理服务器的原因**
Forge 模组并不总是期望玩家从一个服务器移动到另一个服务器,当代理服务器将玩家转移到不同的服务器时,可能会导致故障或崩溃。 Forge 模组通常期望在连接到另一个服务器之前断开与服务器的连接。 此模组通过正确地将玩家从服务器断开连接,然后将他们连接到另一个服务器来解决此问题。 这样,模组可以正确地处理玩家在服务器之间切换。
服务器管理员还可以将代理和服务器重定向结合使用,如果他们想要使用代理可以提供的所有其他功能(目前在 Forge 1.13+ 服务器上除外)。 不过,建议考虑用跨服务器插件和模组替换代理。
### **安装了此模组的玩家可以加入没有安装此模组的服务器**
任何组合的此模组的出现/不存在都允许玩家连接到服务器。 安装了此模组的玩家可以连接到 Vanilla 服务器,而拥有 Vanilla Minecraft 的玩家也可以连接到带有此模组的服务器。
### **此模组可以添加到模组包中**
请随意将此模组添加到公共和私有模组包中。无需请求许可。 如果您将 Server Redirect 添加到您的公共模组包中,请随时在以下评论中告知大家! 尽管此模组不应与其他任何模组冲突,但请随时 [在此处报告冲突](https://github.com/KaiKikuchi/ServerRedirect/issues)。
### **许可证和对该项目的改进**
此项目使用 MIT 许可。 随意分支此项目和/或在 [问题页面](https://github.com/KaiKikuchi/ServerRedirect/issues) 上建议新的功能! 如果您找不到适用于您的 Minecraft 版本的 Server Redirect 正确版本,请随时在那里询问!
如果您想通过 PayPal 请我吃披萨,[点击这里](https://paypal.me/kainomood "PayPal Me")! 我非常感谢! :)