MixedLogin搭建教程
前言
尽管Multilogin实现了正版登录+皮肤站登录+Floodgate接管,但若想实现离线+正版+皮肤站+Floodgate大一统,紧靠Multilogin是不行的,所以诞生了Mixedlogin,通过魔改Multilogin、AuthME和Velocity代理端实现了服务器登录的大一统。本文将详细的介绍Mixedlogin的搭建教程,同时也会介绍一些别的特性
服务器环境:
配置:8272CL 2.5GHz 4C8G
系统:Debian 12
JDK:Zing JDK 23 (Java 21)
软件准备
- 魔改Velocity,点击该链接前往项目主页下载
- 魔改Multilogin,点击该链接前往项目主页下载
- (可选)魔改AuthMeVelocity,点击该链接前往项目主页下载
- 正常AuthMe,点击该链接前往项目主页下载
- authlib-injector,点击该链接前往项目主页下载
- 一个正常的服务端
如果无法正常访问Github的话,可以访问我的网盘下载,访问密码是g6k0
其中魔改版的AuthMeVelocity是可选项,完成注册登录等操作后,再传送到其他子服,不过魔改版跳过了对正版玩家的检查,同时适配了魔改的代理端,如果你的服务器架构较简单,并不需要登录服务器,可以选择不安装魔改版AuthMeVelocity与不搭建NanoLimbo。本教程就不包括登录服务端搭建
关于服务端,选你喜欢的就好,对于不同的端该怎么处理,我后文再讲,我这里演示使用Ppaer 1.21.3
我使用的是Debian系统+MCSM面板,如果你的服务器是Windows,合理迁移就好,如果也是Linux,我建议装个MCSM面板,虽然使用守护线程也很方便,但用面板的话更方便你的运维人员维护服务器
Velocity 搭建
新建一个文件夹,放入魔改版的Velocity,并使用这个启动命令制成脚本或在终端启动,需要注意的是,服务端的名称可能会根据你下的版本有所不同,请注意,后面内容的启动命令也同理
1
java -Xms512M -Xmx1024M -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -jar MixedVelocity-proxy-3.4.0-SNAPSHOT-all.jar nogui
启动后往
plugins
文件夹里放魔改版的AuthMeVelocity和Multilogin插件后并重启代理端在
plugins/multilogin/services
文件夹里新建offline.yml
文件,填入以下内容,该文件是支持离线登录玩家的,如果想支持正版登录LitterSkin登录等,可在插件目录下的example
文件夹中将litterskin.yml
和official.yml
复制到services
文件夹中,并更改id
后面的数字,不同service的id不能重复,同时id应大于11
2
3
4
5
6
7
8
9
10
11
12# Below, only the most basic configuration is provided.
# You can refer to the template file to complete all co`nfigurations.
# Please edit before use.
id: 1
name: 'Offline'
# Don't change it unless you really want to.
serviceType: BLESSING_SKIN
yggdrasilAuth:
blessingSkin:
apiRoot: 'http://127.0.0.1:26748/api/yggdrasil'修改
velocity.toml
文件,关注以下内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24[servers]
# Configure your servers here. Each key represents the server's name, and the value
# represents the IP address of the server to connect to.
login = "127.0.0.1:25578"
lobby = "127.0.0.1:30066"
factions = "127.0.0.1:30067"
minigames = "127.0.0.1:30068"
# In what order we should try servers when a player logs in or is kicked from a server.
try = [
"lobby"
]
[forced-hosts]
# Configure your forced hosts here.
"lobby.example.com" = [
"lobby"
]
"factions.example.com" = [
"factions"
]
"minigames.example.com" = [
"minigames"
]在这里你可以根据你的需求更改端口,增减子服,设定登录的服务器。而
[forced-hosts]
下面的内容要与[servers]
下面的内容对应,[forced-hosts]
里一定要有[servers]
里有的,但也不用全部都有,比如登录服务器就没有,如果不这么改,就会报错,这一块的作用我记得是设置子服的域名,然后根据玩家填的域名转发到不同子服修改代理端目录下的
mixedvc.toml
文件1
2
3
4
5
6#登录服务器的名字
login-server = "login"
[server-forwarding-mode]
#设定不同服务器的转发模式
login = "modern"
lobby = "none"将
login-server
设置为你设置的子服重启代理端,然后代理端的搭建就结束了
接下来搭建子服
子服
Paper
新建文件夹,放入服务端,先正常启动一次,
改
eula.txt
文件,然后在目录下放入authlib-injector文件,在plugins
中放入AuthMe插件,并用以下命令启动1
java -Xms512M -Xmx4096M -Dfile.encoding=UTF-8 -Duser.language=zh -Duser.country=CN -javaagent:authlib-injector-1.2.5.jar=https://littleskin.cn/api/yggdrasil -jar paper-1.21.3-82.jar nogui
为什么使用authlib-injector,因为现版本的multilogin有bug,如果不在子服套个authlib-injector,非正版玩家就无法登录
修改
server.properties
文件,将online-mode
修改为false
,将server-port
设置为你设置的端口,将enforce-secure-profile
设置为false
修改
config/paper-global.yml
文件,找到这一块1
2
3
4velocity:
enabled: false
online-mode: true
secret: ''打开
enabled
,然后secret
为代理端目录下forwarding.secret
文件里的值重启服务器,再登录就有这样的提示了
测试过,离线,正版,皮肤站玩家都是可以正常登录服务器的
Fabric等模组端
这些模组端都差不多,不过不用使用authlib-injector了,使用NCR模组就可以了,然后代理端要用模组
Leaves端
这个端自带authlib-injector,在配置文件里打开就好了,不过我没有测试过
Multilogin设置
这里是讲一下Multilogin配置文件的一些进价设置
用户名正则约束
1 | nameAllowedRegular: '^[0-9a-zA-Z_]{3,16}$' |
这个值在插件目录下的config.yml
文件里,你可以设置为''
,不限制玩家名
如果你想不限制玩家名的话,经依靠这个是不够的,还要看这一节
皮肤修复
往插件目录services
里的服务文件末行添加以下内容
1 | skinRestorer: |
为什么要修复皮肤呢,因为不同登录途径的玩家是看不见对方的皮肤的,设置这个后就可以看见了
离线玩家应该还是不行的,不过可以用Skin Restorer插件解决少部分离线玩家的皮肤问题
UUID生成设置
如果你的子服使用了MCDRGUGUBot之类的,要通过游戏内查询玩家的UUID添加白名单,但Multilogin是按照登录服务查询UUID的,那么就会造成游戏查询不到玩家的UUID,那么就可以添加以下设置UUID生成规则,改为离线的生成算法
往插件目录services
里的服务文件末行添加以下内容
1 | initUUID: 'OFFLINE' |
设置后可以曲线救国解决部分问题,不过会增大管理难度
AuthMe设置
这里讲一下登录插件的设置,更加人性化,配置文件在插件的文件夹里,叫config.conf
语言
1 | messagesLanguage: en |
将en
改为zhcn
,设置为中文
同一IP可注册账号数
1 | maxRegPerIp: 1 |
在某些环境下,比如超级内网,一个IP可能有很多玩家,所以要适度调大,或者干脆设置为0
,不限制账号数
用户名限制
1 | minNicknameLength: 3 |
前两个值限制了玩家长度的最小值和最大值,而第三个值是玩家名的正则表达式,原版是大小写字母和数字与下划线等,你可以设置为''
不限制玩家名或自己写正则表达式
如果在Multilogin和这里都取消了用户名限制,同时配置了CnUsername,然后在paper-globel.yml
中将unsupported-settings/perform-username-validation
修改为false
,那么理论来说就可以以各种抽象的名字进入服务器,但是,我测试过,这个插件应该是与authlib-injector不兼容的,所以实际上达不到说了一大段废话
不过模组端的可以尝试一下
超时时间
1 | timeout: 30 |
这个值是超时的时间,诺没在时间内完成登录操作,则踢出服务器,单位是秒,我建议设大一点,比如90秒,或设为0
不限制时间,因为如果你的服务器有基岩版玩家,他们输入要慢一点
后话
教程到这里就结束了,虽然没测试过,但这个魔改的代理端应该是兼容代理端的插件的,那么就可以实现基岩离线皮肤站正版以及各种版本玩家的大一统了,虽然这没什么用,因为你服务器不可能有那么多玩家,但好歹有,也说明了MC的玩家社区是何等的强大,做出了ViaVersion那样的版本兼容插件,做出了Geyser那样的基岩互通插件,做出了优化极好的Paper端,做出了各种各样的模组加载器……强行升华
总之,也希望Minecraft这款游戏能再陪我十年