前言

想弄一个跨服,目前这篇文章是边测试边写的,两个子服都是在同一个机器上运行的

如果两个子服在不同的网络,跨服的延迟就会比较高

  • 两个子服 s1 和 s2  都是使用folia核心 
  • 版本1.20.1
  • s1 端口: 25565
  • s2 端口 : 25566

1.下载 Waterfall

Waterfall Downloads | PaperMC

2.启动两个子服

1
/usr/local/java17/bin/java -jar server.jar nogui
1
/usr/local/java17/bin/java -jar server.jar nogui

3.启动 Waterfall

第一次启动[服务端]时会下载额外的模块(位于 modules [文件夹],下载完成后服务端便会启动。

1
/usr/local/java17/bin/java -Dfile.encoding=UTF-8 -Xms512M -Xmx1024M -jar waterfall-1.20-562.jar 

看到这一行表示启动成功了

[03:55:33 INFO]: Listening on /0.0.0.0:25577

4.配置 Waterfall

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
enforce_secure_profile: false
listeners:
- query_port: 25577
motd: '&1Another Bungee server'
tab_list: GLOBAL_PING
query_enabled: false
proxy_protocol: false
forced_hosts:
pvp.md-5.net: pvp
ping_passthrough: false
priorities:
- s1
- s2
bind_local_address: true
host: 0.0.0.0:25577
max_players: 1
tab_size: 60
force_default_server: false
remote_ping_cache: -1
network_compression_threshold: 256
permissions:
default:
- bungeecord.command.server
- bungeecord.command.list
admin:
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
- bungeecord.command.kick
log_pings: true
connection_throttle_limit: 3
server_connect_timeout: 5000
timeout: 30000
player_limit: -1
prevent_proxy_connections: false
ip_forward: false
groups:
md_5:
- admin
remote_ping_timeout: 5000
connection_throttle: 4000
log_commands: false
stats: 4981b3ee-08b3-45b8-b337-2dcd607df4c6
online_mode: false
forge_support: true
disabled_commands:
- disabledcommandhere
servers:
s1:
motd: '&1Just another Waterfall - Forced Host'
address: localhost:25565
restricted: false
s2:
motd: '&1Just another Waterfall - Forced Host'
address: localhost:25566
restricted: false

在最后的server 中 配置了两个服务器 s1 和s2 

motd可以自己改

这里注意如果服务器是离线服,记得在 Waterfall  也关闭正版验证

下面是配置的解释

forge_support 代表是否启用对 Forge 的支持,默认值为true,即启用。启用后会为 Forge 客户端提供支持(尽管兼容性并不是很好,编者注)。

player_limit 代表整个 BungeeCord 实例能够接受的最大玩家数量,默认值为-1,即不限数量。调整为正整数即启用最大玩家数量限制。

premission 和 groups 由 BungeeCord 提供的简易权限管理设置。前者用以配置权限组内置的权限,default表示默认权限组;后者用以配置玩家所在的权限组。(这里的权限是指 BungeeCord 内置及其插件声明的权限,与下游服务器的权限完全无关,切勿混淆。正如 CraftBukkit 提供的 permission.yml 一样,这套简易的权限管理配置同样不受到欢迎,且难以配置。这里推荐安装 Luckperms 作为 BungeeCord 的权限组管理插件,编者注)。

log_commands 代表是否在控制台记录玩家输入的指令(同样,仅记录 BungeeCord 指令,与下游服务器无关,编者注)。默认值为false,即不记录。

log_pings 代表是否在控制台记录玩家客户端向 BungeeCord 发起 ping 请求的记录(这种记录一般是玩家尝试刷新服务器MOTD信息时出现的)。默认值为true,即记录。

online_mode 代表是否开启正版验证,开启正版验证时, BungeeCord 将仅接受经过 Mojang 正版验证服务器验证通过的玩家加入服务器,反之任何玩家都可进入服务器。默认值为true,即开启正版验证。(请注意,如果开启正版验证,那么请务必将所有下游服务器的正版验证关闭,否则玩家将无法连接至下游服务器(BungeeCord 将负责向下游服务器传递玩家的正版数据,如 UUID 等),编者注)。

ip_forward 代表是否启用 IP 追踪,默认值为 false,即不开启。开启后 BungeeCord 将会向下游服务端传递玩家的真实IP。如果不开启本项,那么下游服务端接收到的玩家 IP 将永远为 BungeeCord 服务端所在的 IP 地址。要想开启此项,您必须使用支持 ip_forward功能的服务端,并启用其配置中的设置(具体设置方法见下)。如果仅启用了此项而不配置下游服务端的是设置,那么玩家将无法连接到下游服务器。强烈建议所有人都启用此项以免出现某些 IP 问题

listeners表示监听器设置,一个监听器对应一个监听端口,不同的监听端口可以允许不同的玩家加入设定的不同的服务器,且设置相互独立。一个 BungeeCord 实例可以设置多个监听器。BungeeCord 的默认配置文件只提供了一个监听器,如需添加多个监听器请自行按照 YAML 语法在listeners下重复添加。

listeners.query_enabled 代表是否开启 UDP 查询,开启后可籍由 UDP 协议监听该监听器的状态。默认值为false,即关闭查询。

listeners.query_port 代表查询端口,默认值为25577

listeners.motd 代表当仅有一个默认服务器时,服务器将会显示给玩家的Motd。当listeners.ping_passthrough被开启时,此项无效。如果希望使用双行Motd,那么可以使用以下的格式(servers.[xxx].motd同):

1
motd: |    第一行MOTD    第二行MOTD

listeners.tab_list 代表连接到服务器的玩家的 TAB 列表所显示的内容格式。他可以有三个值,分别是GLOBAL_PING(默认值),GLOBALSERVER。当设置为第一种时, TAB 列表会显示所有连接到本 BungeeCord 实例的玩家和他们的 PING 值;当设置为第二种时,同上一种大致相同,但玩家的 PING 值不会更新;当设置为第三种时,只会显示玩家所在的下游服务器的玩家列表。

listeners.proxy_protocol 代表是否开启对 HAProxy 的支持,默认值为false,即关闭。开启后,BungeCord 将支持接收上游 HAProxy 籍由 ProxyProtocolV3 协议发送的玩家真实 IP,如不开启此项但在上游使用了 HAProxy 服务端,那么 BungeeCord 接收到的玩家 IP 地址将衡为 HAProxy 的所在地址。如果您不理解此项在说什么,请不要随意开启本项。

listeners.forced_hosts 代表端口转发设置,默认值为一个仅包含一个键为pvp.md-5.net,值为pvp的 Map (即pvp.md-5.net: pvp)。这意味着所有通过pvp.md-5.net域名连接到 BungeeCord 的玩家将不会再被连接到默认下游服务器(对于默认下游服务器的配置请见listeners.priorities项),而将会被重定向至服务器名为pvp的服务器(关于服务器名的配置请见servers项)。这要求您预先将名为pvp.md-5.net的子域先解析至 BungeeCord 所在的地址。

listeners.ping_passthrough是否开启 ping 穿透,默认值为false,即不开启。开启后,BungeeCord 将直接传递默认下游服务器的 ping(如motd,在线玩家数)信息到客户端,而不是显示 BungeeCord 设置的此类信息。

listeners.priorities 优先级设置,默认值为一个仅有lobby 服务器的列表,可以按照格式依次向下添加多个已在servers项中配置的服务器名,优先级由上到下逐级递减)。这代表玩家连接到 BungeeCord 后将会被转发到的服务器的顺序:第一个是首选服务器,如果因为某些原因使玩家无法连接到该服务器(如服务器已关闭,版本与玩家客户端版本不匹配),那么将尝试将玩家转发到下一个服务器,以此类推。如果所有服务器都无法连接,那么玩家将会收到一个服务器当前不可用的提示。(此项不一定必须全部对应servers内的下游服务端名称,如果您有一个登录服,那么此处应当只填写您的登录服名称,这样当您的登录服离线时,玩家将不能进入服务器,而不是绕过登录服的登录系统前往其他下游服务器)

listeners.bind_local_address 代表是否显式显示 BungeeCord 正在监听的 IP 地址,默认值为true。除非的服务器拥有多个 IP 地址,否则这并没有什么实际用处。如果没有特殊需求,最好不要改变此项。

listeners.host 代表该监听器监听的 IP 地址和端口,默认值为0.0.0.0:25577,即监听来自所有 IP 地址的来自25577端口的连接。0.0.0.0代表监听所有 IP 地址,如果您将其设置为非0.0.0.0的 IP 地址,则代表只监听来自于该 IP 地址的连接。一般情况下,您只需要修改25577为希望玩家连接的端口号,或保持不变。

listeners.max_players 代表玩家客户端将会显示的最大玩家数,默认值为1。此项只作为装饰,并未真实的最大玩家数设置,即使将此项设置为0,玩家仍可以进入服务器。要想设置真正的最大玩家数,请见player_limit项。 listeners.tab_size 代表将会显示在 TAB 列表上的最大玩家数量,默认值为60.

listeners.force_default_server 代表当每次玩家进入服务器时,是否强制将玩家发送到默认服务器中,默认值为false,即关闭。设置为false则代表玩家进入服务器时将会发送到玩家上一次下线时的服务器。如果您有一个登录服,亦或者使用了一个由单个大厅服务器管理的登录插件,请务必将此处设置为true以免玩家下次登录时直接绕过登录系统。此项与listeners.forced_hosts相冲突,如果您希望使用后者提供的重定向功能,那么请将此项设置为false

prevent_proxy_connections 代表是否向 Mojang 发送玩家 IP 数据以阻止 使用了代理的玩家进入服务器。默认值为false,即不开启

connection_throttle 和 connection_throttle_limit 为 BungeeCord 自带的简易反压测策略,他们分别代表断开时间和断开次数,默认值分别为40003。这意味着单个 IP 一旦在 4000 毫秒内连接了 BungeeCord 3 次,那么它必须等待 4000 毫秒后才能再次连接。

servers 代表下游服务端设置,只有在此处设置过的下游服务器才可被连接。它包括一个名为lobby的默认下游服务端,您可以按照这种格式继续向下添加更多的下游服务器。(如果修改了lobby的名称,请千万不要忘记修改上方listeners.priorities的优先级设置以免因不存在一个名为lobby的下游服务端而无法连接。其中:

  • server.[XXX]代表服务器名称,可为任意值,但必须是唯一的;
  • server.[xxx].motd代表当有多个默认服务器时,被匹配到可以连接的首选服务器将会显示给玩家的Motd。同样当listeners.ping_passthrough被开启时,此项无效。如果希望使用双行Motd,请参见上方listeners.motd的注释。
  • server.[xxx].address代表目标下游服务器的 IP 地址和端口,请填写 BungeeCord 所在的网络环境能够连接到的地址(包括本地地址和内网地址),无需保证玩家可以连接。
  • server.[xxx].restricted 代表权限控制,默认值为false。当设置为true时,只有拥有bungeecord.server.[xxx]权限时,玩家才能进入此服务器。

5.验证

在PCL2启动mc,多人游戏 - 添加服务器 输入你服务器ip:25577

进入后输入

/server s1 或者 /server s2

进入s1 或者 s2 服务器