前言
我服务器是离线登录的,一直以来都是本地打mod来实现显示皮肤。昨天有人折腾了半天,仔细想想要不整个外置登录吧,然后一步一个坑,记录一下
搭建
Blessing Skin
修改环境配置
官方不建议用面板类程序部署,因为会禁用某些php函数,启用就好。在禁用函数
或在php.ini
里面的disable_functions
里去掉以下函数
symlink
readlink
putenv
realpath
同时,安装必需的 PHP (<8.2)扩展:
折叠啦
- OpenSSL >= 1.1.1 (TLS 1.3)
- PDO
- Mbstring
- Tokenizer
- GD
- XML
- Ctype
- JSON
- fileinfo
- zip
本体
从Releases下载程序包并解压,设置运行目录
为/public
,或在配置文件里设置root /{yourwebsitespath}/public;
设置伪静态:
1 | location / { |
若开启了防跨站安全设置需关闭
安装
配置完伪静态后,直接访问对应的域名就能跳转到安装页面了,在完成基本的安装后,在插件市场里安装Yggdrasil API
并启用
最后可以尝试访问//{yourwebsites}/api/yggdrasil
看看有无类似以下输出
扩展
为更方便的管理玩家,可以在安装邀请码插件来避免多次/外部人员注册
常见问题
图片无法显示/页面混乱
请检查你的 Nginx 规则配置中是否有这类控制浏览器缓存的规则,删除即可:
1
2
3
4location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
expires 30d;
access_log off;
}插件市场无法使用
在
.env
里添加PLUGINS_REGISTRY=https://d2jw1l0ullrzt6.cloudfront.net/registry_{lang}.json
验证邮箱地址报403 Forbidden,无效的链接:参阅验证邮箱地址报403 Forbidden,无效的链接
报错:
Lcobucci\JWT\Signer\Key\InMemory::plainText(): Argument #1 ($contents) must #21 10.08 be of type string, null given
:在
.env
里添加JWT_SECRET=...
值与APP_KEY
一致
游戏服务端
这是原本的游玩路径
可见有一些不足:玩家每一次登录都要敲密码,新玩家还要手动加白名单,但使用了外置登陆后这些都可以丢掉了。authlib-injector
通过“劫持”官方的正版验证接口,实现了一种特殊的认证,与正版无异。只需要一个账户就可以畅玩服务器。
游戏服务端
下载authlib-injector到服务端同级目录
在启动命令的-jar
参数前加上-javaagent:authlib-injector-1.xx.xx.jar=https://{yourwebsites}/api/yggdrasil
,注意更改版本号和网站为对应的
由于是“劫持”官方的正版验证接口,还需要开启正版验证(online-mode
设置为true
)
尝试启动看看日志输出类似文本即可
尝试连接吧~
常见问题
- 无效对话:设置
prevent-proxy-connections = false
- 无法使用游戏内聊天,由于个人信息公钥丢失,聊天已被禁用。请尝试重新连接:设置
enforce-secure-profile=false
- 无法验证玩家用户名:检查皮肤站是否正常运行,在
.env
中打开调试模式(APP_DEBUG),检查./storage/logs
中的日志内容
Geyser
由于是“劫持”官方的正版验证接口(梅花三弄),对于独立版同样需要外挂authlib-injector
,
只需要找到对应的下载下来,参考游戏服务端的运行方式就可以了…吗?
在高版本的Geyser中,已经移除了Mojang账户的登录接口,很不巧的是这里就要用到它,所以你还要把它加回来。
如果只需要最新版看这里就好:Shanwer/Geyser
fork Geyser 到自己账号,再clone到本地
因为我的服务器版本不是最新的,还要找到适合的版本,可以在GameProtocol.java里面找,如我要编译适合1.20.1的版本,先找到drop掉的前一个commit,复制commit id
执行
$切换到对应版本,新建一个分支,如build
$参考这里来进行修改代码,修改完毕后推送到新分支
本地化处理:
原仓库对于外置登录做了些文本上的调整,运行以下命令切换
1
2git rm --cached "core/src/main/resources/languages"
git submodule add https://github.com/Silverteal/geyser-languages-for-custom-yggdrasil.git core/src/main/resources/languages$随后启用action并在action选择对应的分支构建
在构建完成后下载(我这里是独立版,插件版操作类似
运行并调整配置即可
常见问题
- 此服务器需要一个付费的Java账号:因为 Geyser 本身的问题,无法使用有多角色的外置登录解决方案,也就是说皮肤站内有多个角色时无法登录
效果
后
一天啊,总算整好了~
文章看起来顺风顺水的,天都不知道我试多少条破路