ModMdo
一个服务端多功能mod,
一些功能需要客户端安装才能使用。
参考:
ModMdo (github.com)
ModMdo Wiki (github.com)
在wiki查看详细完整的使用和技术介绍,
此处只做简单的用法描述和一些简单实现及对比。
目前的主要用途在白名单,但是不止这一个功能。
因为使用方式已修改,所以以下介绍适用于ModMdo v1.0.27以后的版本。
ModMdo v1.0.27后
原版的白名单由于使用用户名,不判断UUID导致离线服务器很不安全。
因此ModMdo提供了一个独立于原版的白名单。
ModMdo白名单需要在客户端安装,在客户端只需要安装,无需其他任何操作。
在游戏内使用以下命令开启:
/modmdo useModmdoWhitelist enable
在此之前可能先需要使用
/temporary whitelist add PlayerName
来为自己添加白名单,否则则需要在控制台添加。
ModMdo在发送登录信息时使用的id,
是在256位完全随机字符中按随机顺序混入了时间戳,
且服务端不会向其他玩家发送此数据,
暴力破解难度以及获取难度都高到几乎不可能破解。
所以当玩家换电脑或是丢失了配置文件,
需要清除原先的白名单,再重新添加进去,
使用:
/modmdo whitelist remove PlayerName
删除玩家的白名单。
无ModMdo
如果不希望在客户端安装ModMdo,但是希望能够在服务器使用ModMdo白名单的话,
那么需要在服务端配置文件中将online-mode设为true,也就是需要玩家必须有正版minecraft账号。
然后使用命令
/modmdo compatibleOnlineMode enable
来开启在线模式与ModMdo白名单的兼容模式(此选项默认开启)。
后续的白名单添加操作与先前介绍的无差别,直接添加临时白名单然后连接服务器即可。
同理,将以上命令的enable改为disable将在线模式兼容关闭,
关闭后需要玩家必须安装ModMdo才可以进服。
实现
见 ModMdo/ServerLoginNetworkHandlerMixin.java at main · zhuaidadaya/ModMdo (github.com)
ModMdo修改了服务端的加入游戏方法,
将在加入游戏时向客户端发送标记数据,让客户端发送登录信息给服务器,
而且ModMdo在开启白名单时要求必须经过登录检查才允许加入服务器。
在开启白名单时,玩家有三秒钟的时间(此值可改)发送id和用户信息给服务器来登录。
三秒后如果服务端没有收到客户端的信息,就会断开玩家的连接,
而如果是收到了错误的信息,则不会等待三秒,直接就会断开连接,
如果信息没有问题,才会给予玩家放行,此时才会开始发送游戏交互数据(区块、玩家、实体等)。
1.0.27版本以前
ModMdo v1.0.27以前的版本在此称为旧版本。
旧版本所使用的检查方式是登陆时发送一个token,
由服务器生成token,再由服务器管理将此分发给玩家,
玩家需要将它填入游戏的"添加服务器"页面的“Token”选项,
或是手动写入配置文件(于config/modmdo/configs/specified_token.mhf中)。
新版本已经不再兼容此方式。
使用旧版本ModMdo登录到使用新版本ModMdo服务器时,
会提示“obsolete login type”并断开连接。