获取Minecraft服务器信息API,Minecraft快速实现Yggdrasil API正版验证
2020年2月15日 阴 又是无聊的一天,病毒肆虐,哪也去不了,一年更新一次文章
Minecraft一般国内都是使用离线验证及盗版账号
如果想使用正版验证的话需要购买账号账号,但是也可以自己造一个正版验证接口
这里只讲走bc服进去验证方式,spigot的话应该也是一样,我这里只讲快速实现一个能够登录的API//一个快速实现的API会请求下面3个接口地址
POST /authserver/authenticate //用于验证账号登陆
POST /sessionserver/session/minecraft/join //用于加入服务器
GET /sessionserver/session/minecraft/hasJoined //用于验证账号是否加入服务器
注:所有POST接口均为application/json请求首先第一步启动器那边输入账号密码后会调用/authserver/authenticate 进行账号密码的验证,启动器请求参数如下{
"username":"i@acgxt.com",
"password":"明文密码"
}
或是标准的
{
"agent": {
"name": "Minecraft",
"version": 1
},
"username": "i@acgxt.com",
"password": "明文密码",
"requestUser": false,
"clientToken": "00000000000000000000000000000000",
"token": null
}
你需要做的就是将客户端发来的账号和密码在你的数据库进行验证,验证成功后返回{
"accessToken": "1fb9a5e90471804bd283e2a4bca95a4f", //服务端自己生成一个32位值
"clientToken": "00000000000000000000000000000000",//如果客户端传了token原样返回
"selectedProfile": {//设置玩家的账号
"id": "75f41576c9ae3be19e5af6091a7fa867", //这是玩家的UUID
"name": "123"//玩家的名字
},
"availableProfiles": [
{//这是玩家的角色列表
"id": "75f41576c9ae3be19e5af6091a7fa867",
"name": "123"
}
]
}
//UUID的计算方式在最下面列出
然后就可以进入游戏了,进入游戏时客户端和服务端均会请求1个接口
当进入游戏后客户端先会请求/sessionserver/session/minecraft/join 将accessToken和用户信息发过来{
"accessToken":"236207ff9bc64758adffabc1ea00f0c9",//AccessToken
"selectedProfile":"f77f92355dc0df29e058152132e1631a",//玩家UUID
"serverId":"-68b33c6559bc494d2465983642c9c451ab8c53ac"//服务器的ID,客户端自己计算的,每次都不相同
}
验证成功后返回http 204即可,如果验证失败需要返回JSON{
"error"=>"error",
"errorMessage'=>"§c登录验证已失效,请重新尝试登录!",
"cause"=>"登录失效"
}
当验证成功后,BC服务端会去GET请求/sessionserver/session/minecraft/hasJoined
请求这个地址时会发过来的数据是"username":"用户名称"//这里不是UUID
"serverId":"服务器ID"//之前的服务器ID
验证失败返回上面的JSON错误即可,成功返回{
"id"=>"用户UUID",
"name'=>"用户名称"
}
到此一个简单的快速验证已经完成了,然后你会发现实际上这些地址请求是mojang的对吧
1.启动器端:自带第三方验证地址可以填上你的地址,如果没有可以自己写个启动器修改验证地址
2.游戏客户端:在.minecraft\libraries\com\mojang\authlib\1.5.25\authlib-1.5.25.jar里面可以用压缩包解包后找到YggdrasilMinecraftSessionService.class文件然后将里面的地址找二进制字符串修改工具根据你的API修改一共有4处
3.游戏BC服务端:在BC服务端核心文件中找到InitialHandler.class修改join地址即可
修改jar包可以选择自己重新构建jar包文件
authlib我是直接修改二进制字符串的,BC我是直接构建代码的
搜索https://sessionserver.mojang.com/session/minecraft/hasJoined将地址修改为你的hasJoined地址
关于离线账号的UUID计算方式(PHP版)function getOffineUUID($playerName){
$playerName = "OfflinePlayer:{$playerName}";
$hash = getBytes(md5($playerName,true));
$hash[6] &= 0x0f;
$hash[6] |= 0x30;
$hash[8] &= 0x3f;
$hash[8] |= 0x80;
$s = '';
foreach ($hash as $h){
$st = dechex($h);
$s .= str_pad($st,2,"0",STR_PAD_LEFT);
}
return $s;
}
function getBytes($string) {
$bytes = array();
for($i = 0; $i
$bytes[] = ord($string[$i]);
}
return $bytes;
}
参考:
获取Minecraft服务器信息API,Minecraft快速实现Yggdrasil API正版验证相关推荐
- 无法获取到服务器信息,未获取到服务器信息
未获取到服务器信息 内容精选 换一换 无法正常使用Cloud-init.弹性云服务器获取Metadata的流程如图1所示:获取Metadata流程图您可以按照以下原因进行排查,如果解决完某个可能原因仍 ...
- ios获取区域服务器信息,ios获取服务器数据
ios获取服务器数据 内容精选 换一换 调用API出错后,将不会返回结果数据.调用方可根据每个API对应的错误码来定位错误原因.当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码.返回的 ...
- 怎么获取别人服务器信息失败,获取服务器信息失败
获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...
- java 获取远程服务器信息,java 远程获取服务器信息
java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...
- .Net Core 获取Linux服务器信息
创建ServerConfig类 public class ServerConfig{//static private log4net.ILog log = log4net.LogManager.Get ...
- js获取当前服务器信息,js 获取当前服务器的地址
js 获取当前服务器的地址 内容精选 换一换 DHCP无法正常获取内网IP,当DHCP无法正常获取内网IP时,不同系统的云服务器表现如下:Linux系统表现为无法获取内网IP.windows系统由于自 ...
- python我的世界服务器_Python取Minecraft服务器信息
最近猛玩Minecraft,无聊之下写了这个东西,可以取到版本,在线人数,最大人数.import socket import codecs class mcstatus: def __init__(s ...
- 获取protal服务器信息超时,portal服务器
portal服务器 内容精选 换一换 配置云AP的SSID时支持的认证方式多达13种,但是常用且推荐使用的认证方式有:密码认证(PSK):设置无线终端接入无线网络时需要输入的密码.Portal认证:i ...
- Redis获取客户端 服务器信息常用命令
AUTH password 通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保护 Redis 服务器. ...
最新文章
- Linux常用的基本命令01
- Javascript MVC架构之旅
- mysql 标识符规则_MySQL 标识符到底区分大小写么——官方文档告诉你
- [翻译]“LINQ to Objects”提供程序是否内置性能优化?
- Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
- python字符串操作作业_python 第二天作业
- 杭电 1248 寒冰王座(全然背包)
- arma matlab函数,MATLAB中ARMA模型预测差分问题
- Python 技巧总结
- linux中文乱码解决方案
- Asp.Net数据控件遍历
- 五年高考三年模拟暗部软件库_BIM软件-关于Lumion的这些,你真的了解了吗?
- python下载哪个好_tensorflow用python哪个版本更好?
- 程序员,怎样打造个人影响力?
- 我们一起写opengl程序
- 如何判断你的初创企业是否有募资潜力
- Oracle中日期函数的使用
- oracle索引的一些实践
- php 微信平台,【php】微信公众平台
- 苹果cms V10搭建教程 教你如何使用苹果cms搭建一款电影/影视网站【第一节】
热门文章
- Delphi之API函数
- python--len函数的用法
- 常用的web服务器有哪些
- js实现夜空 干货比较多
- 如何了解用户和需求?
- ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)
- 启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are alrea
- Android 彻底杀死当前进程
- html怎么画正方形的斜线,html – 斜线的样式
- c语言中ctod语句的作用,CTOD(c语言ctod函数)