Skip to content
CaaMoe edited this page Sep 5, 2022 · 24 revisions

介绍

猫踢螺钉 是一款服务端插件,功能是让您的服务器能够支持正版与多种外置登录共存,用来连通两个或多个外置认证服务器下的玩家,让他们能在一起玩。

快速上手

MultiLogin 不需要更改 JVM 启动参数,也没有必须安装的前置插件依赖, 在联网的环境下将合适的版本拖动至 plugins 文件夹下即可使用。 初次使用将会花费一些时间来下载缺失的依赖文件。

Yggdrasil 服务端配置例子

配置 Minecraft 原版验证服务器

hasJoined:
    official:{}

配置 Blessing Skin 类型验证服务器

hasJoined:
    blessingSkin:
	    # 假设当前 Blessing Skin 的 Yggdrasil api 地址为 {url}
	    apiRoot: {url}

或是自定义验证服务器

hasJoined:
    custom:
	    url: ""
		method: 'GET'
		ipContent: ""
		postContent: ""

指令和权限

指令 权限 说明
command.multilogin.tab.complete 指令补全时所需的权限
/multilogin reload command.multilogin.reload 重载插件配置和语言文件
/multilogin eraseUsername <username> command.multilogin.eraseusername 清除用户名占用
/multilogin list command.multilogin.list 返回带验证方式的在线玩家列表
/multilogin confirm command.multilogin.confirm 确认当前风险操作
/multilogin search login byName <username> command.multilogin.search.login.byname 以用户名查询所有可能的登录方式
/multilogin search login byInGameUUID <inGameUUID> command.multilogin.search.login.byingameuuid 以游戏内uuid查询所有可能的登录方式
/multilogin search inGameUUID byName <username> command.multilogin.search.ingameuuid.byname 以用户名查询游戏内uuid
/multilogin search inGameUUID byProfile <yggdrasilId> <onlineUUID> command.multilogin.search.ingameuuid.byprofile 以在线档案查询游戏内uuid
/multilogin search current <username> command.multilogin.search.current 以用户名查询在线玩家的登录方式
/multilogin user merge byName <yggdrasilId> <onlineUUID> <username> command.multilogin.merge.byname 通过用户名来合并指定游戏档案
/multilogin user merge byInGameUUID <yggdrasilId> <onlineUUID> <inGameUUID> command.multilogin.merge.byingameuuid 通过游戏内uuid来合并指定游戏档案
/multilogin user mergeMe byName <username> command.multilogin.mergeme.byname 通过用户名来合并当前游戏档案
/multilogin user mergeMe byInGameUUID <inGameUUID> command.multilogin.mergeme.byingameuuid 通过游戏内uuid来合并当前游戏档案
/multilogin remove priflle <yggdrasilId> <onlineUUID> command.multilogin.remove.profile 移除一份在线游戏档案
/multilogin whitelist add <username> command.multilogin.whitelist.add 缓冲白名单添加
/multilogin whitelist remove <username> command.multilogin.whitelist.remove 缓冲白名单移除
/multilogin whitelist permanent add <yggdrasilId> <onlineUUID> command.multilogin.whitelist.permanent.add 指定白名单添加
/multilogin whitelist permanent remove &ltyggdrasilId> &ltonlineUUID> command.multilogin.permanent.remove 指定白名单移除

FaQ

Yggdrasil 和 外置登录 是什么

Yggdrasil 是 Minecraft Java 使用的账户认证方案,专门用来处理 Minecraft 的账号验证的请求;而外置登录,可以说是仿照 Yggdrasil 这套系统为非溢价玩家提供像正版一样的账号安全登录的体验。

多外置登录的弊端

由于第三方 Yggdrasil 之间不存在任何联系,共存后难免会有以下问题

  • 重名:
    众所周知,正常的服务器内是不可能出现 username 一模一样的两个玩家同时游戏的, 但是多外置的环境下打破了这个限制,而几乎所有的 Minecraft Server 都是以玩家的 uuid 作为主键处理和存取玩家数据的,所以不会对重复的 username 做出限制,即在服务器中就可能出现两个 uuid 不同但是 username 相同的玩家同时游戏。 而相同的 username 会导致一些命令中的玩家选择器发生异常或故障,也有可能导致一些第三方组件的崩溃,而他的实现成本非常低,是个不可忽视的大问题。
  • uuid 碰撞:
    几乎所有的 Minecraft Server 都是以玩家的 uuid 作为主键处理和存取玩家数据的,所以 Yggdrasil 给玩家分配的 uuid 是绝对不可能重复的,但是在多外置的环境下打破了这个限制。 虽然 uuid 碰撞的概率相当的低,但也不是不可能的事情,并且一旦出现 uuid 碰撞,就很有可能能造成毁灭性的后果,并且原因还及难排查。这并不是一般的服务器维护者能承受得住的。。。
  • 皮肤问题:
    由于原版的安全机制,会对即将在客户端中显示的材质进行签名检查,在多外置的情况下,由于每个外置服务商几乎都不可能提供他们的数字签名密钥,所以难免会存在一些显示上的问题, 即不同外置登录下的玩家都不能看到对方的皮肤。这听起来是没什么大不了的事情,但还是多外置共存下最难解决的问题之一。
  • 失效的 Mojang API:
    由于多外置共存,Mojang API 它有可能帮倒忙,在以 username 检索玩家的在线 uuid 时将会变得异常困难,并且还可能获取不到正确的结果。典型的就是原版基于 uuid 的白名单系统。 在多外置的环境下它将失效,达不到预期的使用效果。
  • 无效的聊天签名:\

...

MultiLogin 是怎么处理这些安全问题的呢?

待编辑

相关链接

Clone this wiki locally