虽然不开MC服务器了,但是偶尔还玩MC,因此最近有了一些新的发现。
在1.21.11中,客户端判断当前是否在TAB栏显示玩家头像的逻辑是:当前不处于单人游戏中,且与服务器之间的网络连接已经加密,而离线登录时是不会进行加密的。
也就是说要显示头像,必须触发加密,而实现这一点就只能外置登录或正版登录,对于离线模式服务器来说做不到(外置登录服务器在这里和正版的逻辑是一样的)。
在26.2中,我发现login包当中多了一个onlineMode字段,而该字段与服务器是否真正处于在线模式、是否加密了连接无关——服务器可以在离线登录的同时将这个字段设置为true,而客户端似乎完全信任它。
这实际上给了我们一个强制显示玩家头像的机会,我合理怀疑这个特性可能是在26.1开始就存在的,但是没有验证。所以我制作了这个Velocity插件来做这件事:
https://github.com/cygbs/OfflineFix
除了显示TAB栏头像以外,我不太清楚将这个字段设置为true对于离线模式服务器来说有什么额外的实际好处。但是这肯定不是一个bug,而是一个特性,因为Mojang似乎没准备修复它。
我不确定我是否是第一个发现的,但是这确实非常有意思。