MC服务器实现外置+正版混合登录

前言

由于国内不少MC玩家没有正版账号,如果开正版服务器,离线玩家就无法进入,开离线服务器又需要增加登录插件,玩家每次进入服务器都需要登录,比较繁琐。离线验证可以通过使用皮肤站外置登录方式解决,但这样正版玩家也需要去皮肤站注册才能完成登录,因此考虑能否实现外置+正版混合登录,正版玩家能直接进入服务器,而盗版玩家在皮肤站注册后能在启动器层完成登录直接进服,省去每次进服后的登陆过程。

准备工作

  • 一个 MC 服务端
  • 一个皮肤站
  • 一个启动器(支持第三方登录)
  • YggdrasilOfficialProxy/YggdrasilGateway

皮肤站搭建

如果你需要自己的皮肤站,可以选择Blessing Skin,安装指南见Blessing Skin 用户手册
文档中给出了详细的安装方法,本文不再赘述。

如果遇到插件市场无法打开的问题,可以参考Issues解决

或者你也可以直接使用现成的皮肤站,比如LittleSkin

登录代理

下载YggdrasilOfficialProxyauthlib-injector

首先打开你的服务器配置文件server.properties,找到online-mode这一行,将其改为online-mode=true,即开启正版验证。

将两个文件放到服务端核心的同一目录下后,在你的服务器启动脚本中添加以下参数:

1
-javaagent:./authlib-injector.jar-1.2.5=https://你的皮肤站域名/api/yggdrasil

启动一次服务器,然后将参数替换为:

1
-javaagent:YggdrasilOfficialProxy-2.3.0-paperclip.jar

启动服务器,此时会生成YggdrasilOfficialProxy.conf文件,修改配置文件,然后重启服务器

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
# API Root, 将这里改成你的皮肤站域名
api="https://你的皮肤站域名/api/yggdrasil"
# Authlib Injector的位置, 无效的话服务器将无法启动
authlib-injector="authlib-injector-1.2.5.jar"
# 重要! 重要!, 必须为 true!
edited=true
# 在合并玩家查找的时候, 是否优先使用正版服务器的内容
official-first=false
# 代理服务器的设置
server {
# 换成 127.0.0.1
host="127.0.0.1"
# 随便写, 随便写一个没有被占用的端口
port=32217
}
# Proxy settings
proxy {
just-example-for-http {
type=http
url="http://localhost/proxy"
}
# The proxy of official connecting
official {
host=localhost
port=1080
# type=socks
type=direct
}
# The proxy of yggdrasil connecting
yggdrasil {
type=direct
}
}

此时,你的服务器已经可以支持外置+正版混合登录了,正版玩家需要使用正版登录,外置玩家需要使用启动器第三方登录。

第三方登录

如果你是自建皮肤站,则需要在插件市场中安装Yggdrasil API插件,才可用第三方登录。

进入皮肤站主页登录后会进入仪表盘页面,此时按照指示安装第三方登录即可,即将按钮拖入启动器:

第三方登录

点击启动器上的第三方登录按钮,会弹出登录窗口,输入你的用户名和密码,点击登录即可。

特别说明

根据 Minecraft Server, 只要UUID不一样, Name一样服务器都会允许玩家加入游戏, 原本 Minecraft 的 Name 是不可能重复的, 但是, YggdrasilOfficialProxy 打破了这个限制! 由于 YggdrasilOfficialProxy 的工作方式是替换 Mojang 的 hasJoined. 所以你可能会遇到服务器出现同名玩家的情况(两个分别来自正版/第三方验证服务器的同名玩家, 同时加到了一个服务器里)。为了避免这种情况,需要额外的插件来限制玩家重名。
例如UniqueUUID或者UniqueUidName,前者需要自行够构建,后者则提供了构建好的jar。

这里提供一个已经构建好的UniqueUUID