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正版验证相关推荐

  1. 无法获取到服务器信息,未获取到服务器信息

    未获取到服务器信息 内容精选 换一换 无法正常使用Cloud-init.弹性云服务器获取Metadata的流程如图1所示:获取Metadata流程图您可以按照以下原因进行排查,如果解决完某个可能原因仍 ...

  2. ios获取区域服务器信息,ios获取服务器数据

    ios获取服务器数据 内容精选 换一换 调用API出错后,将不会返回结果数据.调用方可根据每个API对应的错误码来定位错误原因.当调用出错时,HTTP请求返回一个4xx或5xx的HTTP状态码.返回的 ...

  3. 怎么获取别人服务器信息失败,获取服务器信息失败

    获取服务器信息失败 内容精选 换一换 1.若希望以主席身份入会,enter_code必须传入主席密码.若希望以来宾身份入会,当会议要求来宾密码时,enter_code必须传入来宾密码,会议不要求来宾密 ...

  4. java 获取远程服务器信息,java 远程获取服务器信息

    java 远程获取服务器信息 内容精选 换一换 已成功登录Java性能分析.待安装Guardian的服务器已开启sshd.待安装Guardian的服务器已安装JRE,JRE版本要求为Huawei JD ...

  5. .Net Core 获取Linux服务器信息

    创建ServerConfig类 public class ServerConfig{//static private log4net.ILog log = log4net.LogManager.Get ...

  6. js获取当前服务器信息,js 获取当前服务器的地址

    js 获取当前服务器的地址 内容精选 换一换 DHCP无法正常获取内网IP,当DHCP无法正常获取内网IP时,不同系统的云服务器表现如下:Linux系统表现为无法获取内网IP.windows系统由于自 ...

  7. python我的世界服务器_Python取Minecraft服务器信息

    最近猛玩Minecraft,无聊之下写了这个东西,可以取到版本,在线人数,最大人数.import socket import codecs class mcstatus: def __init__(s ...

  8. 获取protal服务器信息超时,portal服务器

    portal服务器 内容精选 换一换 配置云AP的SSID时支持的认证方式多达13种,但是常用且推荐使用的认证方式有:密码认证(PSK):设置无线终端接入无线网络时需要输入的密码.Portal认证:i ...

  9. Redis获取客户端 服务器信息常用命令

    AUTH password 通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保护 Redis 服务器. ...

最新文章

  1. Linux常用的基本命令01
  2. Javascript MVC架构之旅
  3. mysql 标识符规则_MySQL 标识符到底区分大小写么——官方文档告诉你
  4. [翻译]“LINQ to Objects”提供程序是否内置性能优化?
  5. Quartz 的SB问题 GetNextValidTimeAfter 输出和输出 时区 不同步,好傻的方法?
  6. python字符串操作作业_python 第二天作业
  7. 杭电 1248 寒冰王座(全然背包)
  8. arma matlab函数,MATLAB中ARMA模型预测差分问题
  9. Python 技巧总结
  10. linux中文乱码解决方案
  11. Asp.Net数据控件遍历
  12. 五年高考三年模拟暗部软件库_BIM软件-关于Lumion的这些,你真的了解了吗?
  13. python下载哪个好_tensorflow用python哪个版本更好?
  14. 程序员,怎样打造个人影响力?
  15. 我们一起写opengl程序
  16. 如何判断你的初创企业是否有募资潜力
  17. Oracle中日期函数的使用
  18. oracle索引的一些实践
  19. php 微信平台,【php】微信公众平台
  20. 苹果cms V10搭建教程 教你如何使用苹果cms搭建一款电影/影视网站【第一节】

热门文章

  1. Delphi之API函数
  2. python--len函数的用法
  3. 常用的web服务器有哪些
  4. js实现夜空 干货比较多
  5. 如何了解用户和需求?
  6. ORB特征点提取与均匀化——ORBSLAM2源码讲解(一)
  7. 启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost are alrea
  8. Android 彻底杀死当前进程
  9. html怎么画正方形的斜线,html – 斜线的样式
  10. c语言中ctod语句的作用,CTOD(c语言ctod函数)