本帖最后由 pXiaoD 于 2021-10-7 21:16 编辑
本贴介绍的是有关 BungeeCord及其各类fork 的进阶使用。有关 BungeeCord如何运行等基础方面问题,可参考同版块的此贴。
一、权限
与子服一样,BC端同样拥有 权限 这个概念。这里的权限,和 各个子服 的权限 不互通。
BungeeCord 自带一个简易的权限组管理。在 config.yml 中找到如下内容:
permissions:
default:
- bungeecord.command.server
- bungeecord.command.list
admin:
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
这就代表拥有 default 组的玩家将获得 bungeecord.command.server 和 bungeecord.command.list 权限。这是原生 BC 所自带的两个指令的对应权限。同理,admin 组的玩家也将获得上述的六个权限。然而,如果你在拥有上述权限的情况下,仍然无法使用 BC 自带的 /server 等指令,请检查 BC 端下的 modules 文件夹是否存在对应的六个文件。
根据设定,所有玩家都会被给予 default 组。然而,在实际开服中,玩家一般不需要给予 /server 或者 /list 指令的权限,这么做也是很危险的。因为玩家能够轻松掌握你的服务器的所有子服信息和对应人数。所以,我们推荐您将上述内容修改成这样:
permissions:
default: []
admin:
- bungeecord.command.server
- bungeecord.command.list
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
这样,玩家就不能使用 BC 端自带的任何指令了。关于玩家在被禁用 /server 指令后如何跨服,请参考我后面所介绍的内容。
设置好了每个 权限组 的权限,那么下面介绍如何给一个人设置其对应组。在 config.yml 中找到如下内容:
groups:
md_5:
- admin
这就代表名字为 md_5 的玩家拥有 admin 组,并继承这个组拥有的权限。同样,这也是很危险的,大多数服主并没有直接修改这里,那么,名称为 md_5 的玩家将可以轻而易举的获得 BC 端所有的 admin 组所拥有的权限,甚至可以直接帮助你关闭你的群组服务器。
LuckPerms 是备受好评的 权限组 插件,它同样拥有对应的 BC 版本。为了防止指令冲突的发生,BC 版本的 LuckPerms 的使用指令是 /lpb。使用 LuckPerms 来替代 BC 自带的权限组管理系统的好处是:
- 可以通过 MySQL 实现组互通
- 无需一次一次修改 config.yml 文件来给予权限,只需要一个指令或者一个网页编辑器即可解决
- 更加直观的管理,可使用 LP 自带的许多强大的功能
因此,我向各位服主推荐在 BC 端使用该插件来管理你的权限组。
附:两个常用的 LP 指令
/lpb user <玩家ID> parent set <组> —— 将玩家设置到一个组
/lpb group <组> permission set <权限> —— 给组一个权限
二、登录
使用 BungeeCord 时,一个非常关键的点是:你需要保证你的服务器只能通过你的 BC 端连接。什么意思?下面以一个例子介绍:
假设你的生存服端口是 20000,小游戏服端口是 30000,而 BC 服端口是 25565。那么,你需要保证你的服务器只能通过 25565 端口才能登录。其他端口都无法连接到你的服务器,否则,玩家完全可以在本地搭建一个 BC 服,轻而易举的连接到你的 生存服和小游戏服,并使用 你的ID 快速熊服。
最简便的方法便是设置防火墙规则了。SpigotMC 官网给出各种系统设置防火墙的规则,具体可到这里查看:
Firewall Guide | SpigotMC - High Performance Minecraft
如果你不便设置防火墙,那么你可以设置一种登录验证的插件,检查玩家是否是通过你搭建的 BC 连接到服务器。
这里向大家推荐一个这种类型的插件:
BungeeGuard | SpigotMC - High Performance Minecraft
使用该插件,你需要将 BC 端下的 config.yml 文件的 servers 分类下的 ip_forwards 全部为 true。然后,在 BC 端和你的所有子服都安装该插件。通过在 BC 端的 BungeeGuard 的配置文件内自定义 token,并将其复制到所有子服的 BungeeGuards 的配置文件内即可开始食用。
在保证你的服务器只能通过 你自己的 BC服入口才能连接后,你就可以开始部署群组服的登录了。一般来说,有下面两种方案:
- 搭建登录服,玩家进入BC服后进入登录服。在登录服完成登录后再传送到游戏服。
- 使用 BC 端的 登录插件。(例如 JPremium)
由于第二种方案有各种插件,我无法一一讲述,下面针对第一种方案进行讲解:
在 config.yml 中找到以下内容:
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:
- lobby
bind_local_address: true
host: 0.0.0.0:25577
max_players: 1
tab_size: 60
force_default_server: false
请关注 加粗 部分,这里代表玩家一进入你的 BC 子服,那么它将被传送到 lobby 子服。你可以修改成下面的样子:
priorities:
- auth1
- auth2
这就代表玩家一进入你的 BC 子服,那么它将被传送到 auth1 或者 auth2 子服。BC 这里自带的进服传送没有 自动匹配 机制,只有在 auth1 无法连接情况下(满人、离线等),才会被传送到 auth2 子服。有关自动匹配的相关内容,可参见我下面介绍的内容。
由于每个人使用的登录插件不一致,我依然无法为你提供登录服配置的相关讲解。在完成登录插件部署后,你还需要的一步就是给玩家跨服到 游戏服。你可以使用 菜单、NPC、指令物品 等等,都可以!但是在你的服务器没有类似 验证码 等保护措施的情况下 千万不要设置自动传送。这么做会导致诸如 广告机器人 等直接进入你的游戏服,开始宣传、卡服等等,给服务器带来很多不良影响。
三、封禁
BC 的封禁不会和 子服 的封禁自动同步,在没有使用任何插件等的情况下,你在任意子服封禁一个玩家,只会导致他无法进入对应的子服。然而,这不是理想状态,我们想要的是,玩家无法进入我的所有子服。这时,一个封禁插件的必要性就出来了。
这里我向大家推荐免费的一个插件:AdvancedBan。当然,在资金充足情况下,你可以使用 LiteBan 等封禁插件,大体与该插件相同。
使用这些封禁插件,是否需要将数据连接到 MySQL 数据库?这里提供一个参考:
- 如果你的服务器,全部都是 人工封禁 的,没有反作弊等自动封禁、踢出等情况,那么你可以考虑不连接到 MySQL 数据库。
- 一旦服务器不满足上述条件,那么需要连接。
为什么?因为 BC 的指令,不会被 子服 的插件使用。举一个例子,假设你的 BC 服有一个 /lobby 指令,让玩家快速回到大厅服。那么很遗憾,你的这个指令是不能在 子服 的 菜单、NPC 等任何地方使用,只能玩家自己在聊天框输入这个指令才能使用。所以,子服的插件如果需要使用这个封禁指令,那么子服也必须安装封禁插件,并且需要数据和 BC 的封禁插件的数据互通。
四、跨版本
BungeeCord 本身支持 1.8-最新版本 游戏客户端进入,但是,这是一个代理服务端,不是游戏服务端。你的游戏服支持什么版本,就只能什么版本的玩家才能加入。
诸如 ViaVersion、ViaBackwards 等的跨版本插件,是可以安装在 BC 端内的,并且可以让 BC 端内的所有服务器都可以实现跨版本。但是,在子服安装这些跨版本插件也有一定的必要。举一个例子,很多反作弊插件都会通过这些跨版本插件来分析玩家的版本,并且根据玩家的版本来决定玩家作弊规则的判断。如果你没有在子服安装这些跨版本插件,那么反作弊插件的误报率将有可能增加。
五、跨服
跨服两个字看似简单,许多人却没有搞好。
跨服应该尽量使用 菜单、NPC 等方法,避免使用 指令跨服(例如STP)。我们在 登录 一节已经讲解了相关弊端——各种机器人、假人的造访。
下面介绍一些插件的跨服方法:
DeluxeMenu:
在对应物品配置找到并修改如下内容:
left_click_commands: # 左键
- '[connect] bedwar' # 要跨的服的id
right_click_commands: # 右键
- '[connect] bedwar' #要跨的服的id
Citizens:
Citizens早已自带指令NPC的功能,现在却还有很多服主依然坚持 CommandNPC/CitizenCMD。这是多余的,赶紧删了吧。对准一个 NPC 输入 /npc sel 以选择它,然后发送指令 /npc command add -p server 要跨的服的id 来添加NPC跨服。
SuperLobby:
在 items.yml 或者 menus.yml 配置找到并修改如下内容:
commands:
- 'server: bedwar' #要跨的服的id
六、反假人
假人是很多服一定遭遇过的问题,其实,最为简单粗暴的方法就是 验证码 防范。这是许多大型科技公司都在使用的简单粗暴的方法。并且,只需要注册时候使用验证码防范即可,并不会给正常玩家带来太大的困扰。
市面上有许多 反假人 插件,然而,在假人攻击真正发生时候,这些插件都会多多少少发生以下的事情:
- 反假人插件多多少少把正常玩家也当假人进行拦截。
- 反假人插件在攻击发生时同样在使用 刷新服务器列表、验证码 等防范机制,这种机制不如直接在注册时就使用(见上),反而在这时使用,只会让玩家觉得麻烦,并暂时不再游玩你的服务器,这样,假人攻击的目的不也就达到了吗?
- 配置困难,插件默认配置不适合你,即使没有发生假人,插件依然在拦截着玩家。举一个例子,最为出名的一个反假人插件 BotSentry 插件,默认配置带有如下内容:
deniedcountry:
# When set to true, it will add the percentage to the countries inside the list.
# When set to false, it will add the percentage to countries that are outside the list.
denymode: true
percentage: 50
values: [IL, TH, RU, ID, BR, IN, CN]
默认配置直接是有几率拦截中国玩家,如果你不会修改或者看不懂配置,这里就可以让许多萌新一头雾水了。
七、大厅传送
对于 大厅传送,我们推荐下面三个插件:
BungeeHub | SpigotMC - High Performance Minecraft
PlayerBalancer | SpigotMC - High Performance Minecraft
MultiLobby | SpigotMC - High Performance Minecraft
本着能白嫖就不花钱的原则,我们对 BungeeHub 插件做出讲解:
将该插件安装到 BC 服上,并在 BungeeHub 的配置文件中找到并修改如下内容:
DefaultGroup: lobby # 代表 lobby 是默认的组
Group:
lobby:
name: "&a主大厅"
type: QUEUE # 需要前置 ServerQueue 插件
queue: lobby
这就代表当玩家在没有指定对应大厅的子服使用 /lobby 指令后,自动从 lobby 队列匹配一个最合适的并传送。
DefaultGroup: lobby # 代表 lobby 是默认的组
Group:
lobby:
name: "&a主大厅"
type: SERVER
server:
- lobby4
- lobby3
- lobby2
- lobby1
这就代表当玩家在没有指定对应大厅的子服使用 /lobby 指令后自动传送到 lobby 服务器。
Group:
bedwarlobby:
name: "&a起床战争大厅"
type: SERVER
server:
- bedwar1
- bedwar2
这样就代表在 bedwar1 和 bedwar2 两个服务器的玩家,在输入 /lobby 指令后自动传送到 bedwarlobby 服务器。
八、队列
如果你的子服有很多,那么你该设置 自动分配 功能了。自动匹配的一般概念是 队列,一个队列有若干个服务器,当你申请排队后,将会从队列中选择最合适的一个加入。无论是 大厅,还是 小游戏,这种概念都是存在的。上面的 BungeeHub 的队列所提供的 ServerQueue 即是一个队列匹配 API 插件。
对于 大厅匹配,我们上面已经介绍如何通过 BungeeHub 实现队列匹配。那么对于 小游戏匹配,我们推荐下面两个插件:
MaxJoiner | PlaceholderAPI supported now | SpigotMC - High Performance Minecraft
ML MatchMaker | SpigotMC - High Performance Minecraft
同样本着XX的原则,我们对 MaxJoiner 插件做出讲解:
这是一个通过 MOTD 判断正则的插件,将该插件安装到 子服 上,并打开 servers.yml。
categories:
# 种类名称
bedwar:
# 种类显示的名称
name: "起床战争"
joinable:
- "&f等待中"
spectatable:
- "&c游戏中"
servers:
bedwar1:
ip: "127.0.0.1:20000"
name: "房间 #1"
bedwar2:
ip: "127.0.0.1:20001"
name: "房间 #2"
...
servers 分类下的 bedwar1、bedwar2 要与 BC 的服务器id一致。这就代表,当 bedwar1、bedwar2 服务器的MOTD是 白颜色的 等待中 时可以进入,红颜色的 游戏中 时可以旁观。然后使用 /mj quick 种类id 来快速排队。
九、PAPI
首先,从 PlaceholderAPI 的 Wiki 我们得知关于 BungeeCord 的两个直接变量:
%bungee_total% —— 服务器总人数(会无情的把你的假人数给屏蔽掉,显示真实服务器人数)
%bungee_<服务器id>% —— 对应 ID 的服务器人数
这两个直接用,似乎没什么大用,但我们可以弄一些花样:
使用 math 类型PAPI,做到显示诸如 起床战争服务器总人数 的功能。
举一个例子,%math_0:0_{bungee_bedwar1}+{bungee_bedwar2}%,那么就是得到 bedwar1 和 bedwar2 两个服务器人数的总和的整数值。里面的 {bungee_bedwar1} 代表的是 %bungee_bedwar1% 这个变量符,但在使用 math 时,内嵌的变量符两边需要用 { } 符号替换。
使用 MySQL 类型PAPI,我们还可以做到显示其他服务器的 PAPI。举一个例子,假设你有一个 起床战争大厅,想要显示玩家的击杀数等等,许多服主都会选择再将这个起床战争插件安装到大厅中。然而,大可不必。当你有若干 起床战争子服 时,想必你也是使用 MySQL 数据库使用数据,此时,你就可以通过这个 PAPI 来直接显示玩家的数值,不需要再安装起床战争插件。
举一个例子,%mysql_bwlevel% 代表的是显示 bwlevel 这个名字的 MySQL PAPI 值。这些 MySQL PAPI 可以在 PlaceholderAPI\expansions\MySQL\config.yml 中找到,下面即是一个例子:
bwlevel: # 名字
host: 127.0.0.1
port: '3306'
database: data
username: root
password: passward
query: SELECT level FROM player_levels WHERE uuid = '{uuid}'
这里的 query 是重点,它代表的是从 player_levels 表格中找到 level 一列。同时,指向玩家的 uuid 为 uuid 一列。
如果很不巧,你的这个插件不是通过 MySQL 数据库储存的,那么你可以使用我下面推荐的这个插件。它可以做到在第一个子服读取 PAPI,将数据上传到 MySQL,然后第二个子服再进行读取。
✪ SuperStats ✪ Records data from plugin [1.8.8 - 1.17.x] | SpigotMC - High Performance Minecraft
来自群组: Complex Studio
BungeeCord 进阶使用以及部分心得
本贴介绍的是有关 BungeeCord及其各类fork 的进阶使用。有关 BungeeCord如何运行等基础方面问题,可参考同版块的此贴。
一、权限
与子服一样,BC端同样拥有 权限 这个概念。这里的权限,和 各个子服 的权限 不互通。
BungeeCord 自带一个简易的权限组管理。在 config.yml 中找到如下内容:
permissions:
default:
- bungeecord.command.server
- bungeecord.command.list
admin:
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
这就代表拥有 default 组的玩家将获得 bungeecord.command.server 和 bungeecord.command.list 权限。这是原生 BC 所自带的两个指令的对应权限。同理,admin 组的玩家也将获得上述的六个权限。然而,如果你在拥有上述权限的情况下,仍然无法使用 BC 自带的 /server 等指令,请检查 BC 端下的 modules 文件夹是否存在对应的六个文件。
根据设定,所有玩家都会被给予 default 组。然而,在实际开服中,玩家一般不需要给予 /server 或者 /list 指令的权限,这么做也是很危险的。因为玩家能够轻松掌握你的服务器的所有子服信息和对应人数。所以,我们推荐您将上述内容修改成这样:
permissions:
default: []
admin:
- bungeecord.command.server
- bungeecord.command.list
- bungeecord.command.alert
- bungeecord.command.end
- bungeecord.command.ip
- bungeecord.command.reload
这样,玩家就不能使用 BC 端自带的任何指令了。关于玩家在被禁用 /server 指令后如何跨服,请参考我后面所介绍的内容。
设置好了每个 权限组 的权限,那么下面介绍如何给一个人设置其对应组。在 config.yml 中找到如下内容:
groups:
md_5:
- admin
这就代表名字为 md_5 的玩家拥有 admin 组,并继承这个组拥有的权限。同样,这也是很危险的,大多数服主并没有直接修改这里,那么,名称为 md_5 的玩家将可以轻而易举的获得 BC 端所有的 admin 组所拥有的权限,甚至可以直接帮助你关闭你的群组服务器。
LuckPerms 是备受好评的 权限组 插件,它同样拥有对应的 BC 版本。为了防止指令冲突的发生,BC 版本的 LuckPerms 的使用指令是 /lpb。使用 LuckPerms 来替代 BC 自带的权限组管理系统的好处是:
- 可以通过 MySQL 实现组互通
- 无需一次一次修改 config.yml 文件来给予权限,只需要一个指令或者一个网页编辑器即可解决
- 更加直观的管理,可使用 LP 自带的许多强大的功能
因此,我向各位服主推荐在 BC 端使用该插件来管理你的权限组。
附:两个常用的 LP 指令
/lpb user <玩家ID> parent set <组> —— 将玩家设置到一个组
/lpb group <组> permission set <权限> —— 给组一个权限
二、登录
使用 BungeeCord 时,一个非常关键的点是:你需要保证你的服务器只能通过你的 BC 端连接。什么意思?下面以一个例子介绍:
假设你的生存服端口是 20000,小游戏服端口是 30000,而 BC 服端口是 25565。那么,你需要保证你的服务器只能通过 25565 端口才能登录。其他端口都无法连接到你的服务器,否则,玩家完全可以在本地搭建一个 BC 服,轻而易举的连接到你的 生存服和小游戏服,并使用 你的ID 快速熊服。
最简便的方法便是设置防火墙规则了。SpigotMC 官网给出各种系统设置防火墙的规则,具体可到这里查看:
Firewall Guide | SpigotMC - High Performance Minecraft
如果你不便设置防火墙,那么你可以设置一种登录验证的插件,检查玩家是否是通过你搭建的 BC 连接到服务器。
这里向大家推荐一个这种类型的插件:
BungeeGuard | SpigotMC - High Performance Minecraft
使用该插件,你需要将 BC 端下的 config.yml 文件的 servers 分类下的 ip_forwards 全部为 true。然后,在 BC 端和你的所有子服都安装该插件。通过在 BC 端的 BungeeGuard 的配置文件内自定义 token,并将其复制到所有子服的 BungeeGuards 的配置文件内即可开始食用。
在保证你的服务器只能通过 你自己的 BC服入口才能连接后,你就可以开始部署群组服的登录了。一般来说,有下面两种方案:
- 搭建登录服,玩家进入BC服后进入登录服。在登录服完成登录后再传送到游戏服。
- 使用 BC 端的 登录插件。(例如 JPremium)
由于第二种方案有各种插件,我无法一一讲述,下面针对第一种方案进行讲解:
在 config.yml 中找到以下内容:
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:
- lobby
bind_local_address: true
host: 0.0.0.0:25577
max_players: 1
tab_size: 60
force_default_server: false
请关注 加粗 部分,这里代表玩家一进入你的 BC 子服,那么它将被传送到 lobby 子服。你可以修改成下面的样子:
priorities:
- auth1
- auth2
这就代表玩家一进入你的 BC 子服,那么它将被传送到 auth1 或者 auth2 子服。BC 这里自带的进服传送没有 自动匹配 机制,只有在 auth1 无法连接情况下(满人、离线等),才会被传送到 auth2 子服。有关自动匹配的相关内容,可参见我下面介绍的内容。
由于每个人使用的登录插件不一致,我依然无法为你提供登录服配置的相关讲解。在完成登录插件部署后,你还需要的一步就是给玩家跨服到 游戏服。你可以使用 菜单、NPC、指令物品 等等,都可以!但是在你的服务器没有类似 验证码 等保护措施的情况下 千万不要设置自动传送。这么做会导致诸如 广告机器人 等直接进入你的游戏服,开始宣传、卡服等等,给服务器带来很多不良影响。
三、封禁
BC 的封禁不会和 子服 的封禁自动同步,在没有使用任何插件等的情况下,你在任意子服封禁一个玩家,只会导致他无法进入对应的子服。然而,这不是理想状态,我们想要的是,玩家无法进入我的所有子服。这时,一个封禁插件的必要性就出来了。
这里我向大家推荐免费的一个插件:AdvancedBan。当然,在资金充足情况下,你可以使用 LiteBan 等封禁插件,大体与该插件相同。
使用这些封禁插件,是否需要将数据连接到 MySQL 数据库?这里提供一个参考:
- 如果你的服务器,全部都是 人工封禁 的,没有反作弊等自动封禁、踢出等情况,那么你可以考虑不连接到 MySQL 数据库。
- 一旦服务器不满足上述条件,那么需要连接。
为什么?因为 BC 的指令,不会被 子服 的插件使用。举一个例子,假设你的 BC 服有一个 /lobby 指令,让玩家快速回到大厅服。那么很遗憾,你的这个指令是不能在 子服 的 菜单、NPC 等任何地方使用,只能玩家自己在聊天框输入这个指令才能使用。所以,子服的插件如果需要使用这个封禁指令,那么子服也必须安装封禁插件,并且需要数据和 BC 的封禁插件的数据互通。
四、跨版本
BungeeCord 本身支持 1.8-最新版本 游戏客户端进入,但是,这是一个代理服务端,不是游戏服务端。你的游戏服支持什么版本,就只能什么版本的玩家才能加入。
诸如 ViaVersion、ViaBackwards 等的跨版本插件,是可以安装在 BC 端内的,并且可以让 BC 端内的所有服务器都可以实现跨版本。但是,在子服安装这些跨版本插件也有一定的必要。举一个例子,很多反作弊插件都会通过这些跨版本插件来分析玩家的版本,并且根据玩家的版本来决定玩家作弊规则的判断。如果你没有在子服安装这些跨版本插件,那么反作弊插件的误报率将有可能增加。
五、跨服
跨服两个字看似简单,许多人却没有搞好。
跨服应该尽量使用 菜单、NPC 等方法,避免使用 指令跨服(例如STP)。我们在 登录 一节已经讲解了相关弊端——各种机器人、假人的造访。
下面介绍一些插件的跨服方法:
DeluxeMenu:
在对应物品配置找到并修改如下内容:
left_click_commands: # 左键
- '[connect] bedwar' # 要跨的服的id
right_click_commands: # 右键
- '[connect] bedwar' #要跨的服的id
Citizens:
Citizens早已自带指令NPC的功能,现在却还有很多服主依然坚持 CommandNPC/CitizenCMD。这是多余的,赶紧删了吧。对准一个 NPC 输入 /npc sel 以选择它,然后发送指令 /npc command add -p server 要跨的服的id 来添加NPC跨服。
SuperLobby:
在 items.yml 或者 menus.yml 配置找到并修改如下内容:
commands:
- 'server: bedwar' #要跨的服的id
六、反假人
假人是很多服一定遭遇过的问题,其实,最为简单粗暴的方法就是 验证码 防范。这是许多大型科技公司都在使用的简单粗暴的方法。并且,只需要注册时候使用验证码防范即可,并不会给正常玩家带来太大的困扰。
市面上有许多 反假人 插件,然而,在假人攻击真正发生时候,这些插件都会多多少少发生以下的事情:
- 反假人插件多多少少把正常玩家也当假人进行拦截。
- 反假人插件在攻击发生时同样在使用 刷新服务器列表、验证码 等防范机制,这种机制不如直接在注册时就使用(见上),反而在这时使用,只会让玩家觉得麻烦,并暂时不再游玩你的服务器,这样,假人攻击的目的不也就达到了吗?
- 配置困难,插件默认配置不适合你,即使没有发生假人,插件依然在拦截着玩家。举一个例子,最为出名的一个反假人插件 BotSentry 插件,默认配置带有如下内容:
deniedcountry:
# When set to true, it will add the percentage to the countries inside the list.
# When set to false, it will add the percentage to countries that are outside the list.
denymode: true
percentage: 50
values: [IL, TH, RU, ID, BR, IN, CN]
默认配置直接是有几率拦截中国玩家,如果你不会修改或者看不懂配置,这里就可以让许多萌新一头雾水了。
七、大厅传送
对于 大厅传送,我们推荐下面三个插件:
BungeeHub | SpigotMC - High Performance Minecraft
PlayerBalancer | SpigotMC - High Performance Minecraft
MultiLobby | SpigotMC - High Performance Minecraft
本着能白嫖就不花钱的原则,我们对 BungeeHub 插件做出讲解:
将该插件安装到 BC 服上,并在 BungeeHub 的配置文件中找到并修改如下内容:
DefaultGroup: lobby # 代表 lobby 是默认的组
Group:
lobby:
name: "&a主大厅"
type: QUEUE # 需要前置 ServerQueue 插件
queue: lobby
这就代表当玩家在没有指定对应大厅的子服使用 /lobby 指令后,自动从 lobby 队列匹配一个最合适的并传送。
DefaultGroup: lobby # 代表 lobby 是默认的组
Group:
lobby:
name: "&a主大厅"
type: SERVER
server:
- lobby4
- lobby3
- lobby2
- lobby1
这就代表当玩家在没有指定对应大厅的子服使用 /lobby 指令后自动传送到 lobby 服务器。
Group:
bedwarlobby:
name: "&a起床战争大厅"
type: SERVER
server:
- bedwar1
- bedwar2
这样就代表在 bedwar1 和 bedwar2 两个服务器的玩家,在输入 /lobby 指令后自动传送到 bedwarlobby 服务器。
八、队列
如果你的子服有很多,那么你该设置 自动分配 功能了。自动匹配的一般概念是 队列,一个队列有若干个服务器,当你申请排队后,将会从队列中选择最合适的一个加入。无论是 大厅,还是 小游戏,这种概念都是存在的。上面的 BungeeHub 的队列所提供的 ServerQueue 即是一个队列匹配 API 插件。
对于 大厅匹配,我们上面已经介绍如何通过 BungeeHub 实现队列匹配。那么对于 小游戏匹配,我们推荐下面两个插件:
MaxJoiner | PlaceholderAPI supported now | SpigotMC - High Performance Minecraft
ML MatchMaker | SpigotMC - High Performance Minecraft
同样本着XX的原则,我们对 MaxJoiner 插件做出讲解:
这是一个通过 MOTD 判断正则的插件,将该插件安装到 子服 上,并打开 servers.yml。
categories:
# 种类名称
bedwar:
# 种类显示的名称
name: "起床战争"
joinable:
- "&f等待中"
spectatable:
- "&c游戏中"
servers:
bedwar1:
ip: "127.0.0.1:20000"
name: "房间 #1"
bedwar2:
ip: "127.0.0.1:20001"
name: "房间 #2"
...
servers 分类下的 bedwar1、bedwar2 要与 BC 的服务器id一致。这就代表,当 bedwar1、bedwar2 服务器的MOTD是 白颜色的 等待中 时可以进入,红颜色的 游戏中 时可以旁观。然后使用 /mj quick 种类id 来快速排队。
九、PAPI
首先,从 PlaceholderAPI 的 Wiki 我们得知关于 BungeeCord 的两个直接变量:
%bungee_total% —— 服务器总人数(会无情的把你的假人数给屏蔽掉,显示真实服务器人数)
%bungee_<服务器id>% —— 对应 ID 的服务器人数
这两个直接用,似乎没什么大用,但我们可以弄一些花样:
使用 math 类型PAPI,做到显示诸如 起床战争服务器总人数 的功能。
举一个例子,%math_0:0_{bungee_bedwar1}+{bungee_bedwar2}%,那么就是得到 bedwar1 和 bedwar2 两个服务器人数的总和的整数值。里面的 {bungee_bedwar1} 代表的是 %bungee_bedwar1% 这个变量符,但在使用 math 时,内嵌的变量符两边需要用 { } 符号替换。
使用 MySQL 类型PAPI,我们还可以做到显示其他服务器的 PAPI。举一个例子,假设你有一个 起床战争大厅,想要显示玩家的击杀数等等,许多服主都会选择再将这个起床战争插件安装到大厅中。然而,大可不必。当你有若干 起床战争子服 时,想必你也是使用 MySQL 数据库使用数据,此时,你就可以通过这个 PAPI 来直接显示玩家的数值,不需要再安装起床战争插件。
举一个例子,%mysql_bwlevel% 代表的是显示 bwlevel 这个名字的 MySQL PAPI 值。这些 MySQL PAPI 可以在 PlaceholderAPI\expansions\MySQL\config.yml 中找到,下面即是一个例子:
bwlevel: # 名字
host: 127.0.0.1
port: '3306'
database: data
username: root
password: passward
query: SELECT level FROM player_levels WHERE uuid = '{uuid}'
这里的 query 是重点,它代表的是从 player_levels 表格中找到 level 一列。同时,指向玩家的 uuid 为 uuid 一列。
如果很不巧,你的这个插件不是通过 MySQL 数据库储存的,那么你可以使用我下面推荐的这个插件。它可以做到在第一个子服读取 PAPI,将数据上传到 MySQL,然后第二个子服再进行读取。
✪ SuperStats ✪ Records data from plugin [1.8.8 - 1.17.x] | SpigotMC - High Performance Minecraft
来自群组: Complex Studio
本帖最后由 Hanssc 于 2021-10-7 12:59 编辑
事实上任何基于“插件”的防御方式都是“可能”存在漏洞的,最好的方式应该是第一种方式,而且你忽略了其他可能的漏洞,比如UUIDSporf,举个例子“搭建一个bungeecord然后修改进入玩家的uuid,为你服务器管理员的uuid,转发到你的端,这样就可以以你服务器管理员身份登录了”
Linux/Windows防火墙才是终极手段,
建议参考
Fast/Easy Security guide for Minecraft servers [Bungee/Bukkit/Spigot] | SpigotMC - High Performance Minecraft
https://www.spigotmc.org/threads/firewall-guide.5283/
此外,还有FlameCord推荐的,是Waterfall的fork,主要目的就是为了安全
https://github.com/2lstudios-mc/FlameCord/releases
事实上,第一种方案是第二种方案还未诞生时出现的一种方案,而我们不太推荐使用该方案。你并不知道你的服务器会存在什么潜在漏洞,一旦你没有调配好,玩家可以绕过登录服直接进入服务器,这对服务器来说是灭顶之灾。
事实上任何基于“插件”的防御方式都是“可能”存在漏洞的,最好的方式应该是第一种方式,而且你忽略了其他可能的漏洞,比如UUIDSporf,举个例子“搭建一个bungeecord然后修改进入玩家的uuid,为你服务器管理员的uuid,转发到你的端,这样就可以以你服务器管理员身份登录了”
Linux/Windows防火墙才是终极手段,
建议参考
Fast/Easy Security guide for Minecraft servers [Bungee/Bukkit/Spigot] | SpigotMC - High Performance Minecraft
https://www.spigotmc.org/threads/firewall-guide.5283/
此外,还有FlameCord推荐的,是Waterfall的fork,主要目的就是为了安全
https://github.com/2lstudios-mc/FlameCord/releases
Hanssc 发表于 2021-10-7 12:56
事实上任何基于“插件”的防御方式都是“可能”存在漏洞的,最好的方式应该是第一种方式,而且你忽略了其 ...
感谢指出。
是否有能够实现类似ess传送指令类似warp,tpa,home这类进行跨服使用的插件呢,类似这种的插件很难找到,唯一找到的huskhome的数据库还经常会出现问题。。
非常感谢大佬的分享,受益匪浅
太详细了,支持大佬
非常感谢楼主 很实用!
把我困扰贼久的问题解决了,nb
MCBBS有你更精彩~