Zh:Mojang API
Contents
注意
- 所有公共API均受速率限制,因此您应该缓存这些结果。当前的设置为每10分钟600个请求,但可能会更改。
- 对于API的某些部分,有时包括演示版帐号但有时又不包括。Mojang一直在改动它。
API状态
GET https://status.mojang.com/check
返回各类Mojang服务的状态。可能的值为green
(无问题)、yellow
(有些许问题)、red
(服务不可用)。
响应
[
{
"minecraft.net": "yellow"
},
{
"session.minecraft.net": "green"
},
{
"account.mojang.com": "green"
},
{
"auth.mojang.com": "green"
},
{
"skins.minecraft.net": "green"
},
{
"authserver.mojang.com": "green"
},
{
"sessionserver.mojang.com": "yellow"
},
{
"api.mojang.com": "green"
},
{
"textures.minecraft.net": "red"
},
{
"mojang.com": "green"
}
]
用户名 -> 在某时间的UUID
GET https://api.mojang.com/users/profiles/minecraft/<username>?at=<timestamp>
这将返回在提供的时间戳时该用户名的UUID。
?at=0
可用于获取该名称原始用户的UUID,但是这只有在名称至少更改一次或帐号是旧版帐号的情况下才有效。
- 时间戳是指UNIX时间戳(不包含毫秒)
- 当未发送
at
参数时,将使用当前时间
响应
{
"id": "7125ba8b1c864508b92bb5c042ccfe2b",
"name": "KrisJelbring"
}
name
是该uuid的当前名称,而并不是请求的名称!legacy
仅在为true时显示(未迁移到mojangd的帐号)demo
仅在为true(未付款的帐号)时显示
如果不存在使用给定用户名的玩家,则会发送不带任何HTTP正文的HTTP状态代码204 (No Content)
。
如果时间戳不是数字、太大或太小都会发送HTTP状态代码400 (Bad Request)
,并显示如下错误消息:
{
"error": "IllegalArgumentException",
"errorMessage": "Invalid timestamp."
}
UUID -> 名称历史
GET https://api.mojang.com/user/profiles/<uuid>/names
返回该用户之前使用过的所有用户名和当前使用的用户名。UUID必须不带连字符。
响应
[
{
"name": "Gold"
},
{
"name": "Diamond",
"changedToAt": 1414059749000
}
]
changedToAt
字段是Java时间戳(以毫秒为单位)。
玩家名 -> UUIDs
POST https://api.mojang.com/profiles/minecraft
负载
[
"maksimkurb",
"nonExistingPlayer" //测试不存在的玩家
]
响应
[
{
"id": "0d252b7218b648bfb86c2ae476954d32",
"name": "maksimkurb",
"legacy": true,
"demo": true
}
]
- 名称区分大小写
- 旧版仅在为true时显示(档案未迁移到mojang.com)
- 演示版仅在为true时显示(帐号未付款)
- 如果任何用户名为null或空,则返回IllegalArgumentException
Content-Type
HTTP头必须为application/json
- 每个请求不能超过10个名字
UUID -> 档案 + 皮肤/披风
GET https://sessionserver.mojang.com/session/minecraft/profile/<uuid>
这将返回玩家的用户名以及它们相关的所有其他信息(如皮肤)。示例:https://sessionserver.mojang.com/session/minecraft/profile/4566e69fc90748ee8d71d7ba5aa00d20
这有一个更严格的速率限制:你只可以每分钟请求一次相同的档案,但是您可以发送任意多的唯一请求。
响应
{
"id": "<profile identifier>",
"name": "<player name>",
"properties": [
{
"name": "textures",
"value": "<base64 string>",
"signature": "<base64 string; signed data using Yggdrasil's private key>" //仅在url后接?unsigned=false时提供
}
]
}
- 如果用户尚未将minecraft.net帐号迁移到mojang,则
"legacy": true
将出现在响应中。
"textures"对象"value"的base64解码后字符串:
{
"timestamp": <java time in ms>,
"profileId": "<profile uuid>",
"profileName": "<player name>",
"signatureRequired": true, // 仅在url后接?unsigned=false时提供
"textures": {
"SKIN": {
"url": "<player skin URL>"
},
"CAPE": {
"url": "<player cape URL>"
}
}
}
- 时间戳有时会是过去的(可能是由于缓存了结果?)
- 若玩家模型拥有纤细的手臂(“Alex”样式),则
"SKIN"
对象将拥有"metadata": {"model": "slim"}
。而对于方形手臂(“Steve”样式),则将缺少"metadata"
。 - 如果未设置自定义皮肤,则将缺少
"SKIN"
。
玩家是否具有“Alex?”或“Steve?”外观,取决于其UUID的Java哈希码。奇哈希则将使用Steve。示例实现:- PHP
- Go
- JavaScript(包含注释)
- Java(包含示例UUID)
- 相似地,当帐号没有披风时将缺少
"CAPE"
。
更换皮肤
POST https://api.mojang.com/user/profile/<uuid>/skin
这将为所选档案设置皮肤,但Mojang的服务器将从URL获取皮肤。这也适用于旧版帐号。
响应
发生错误时,服务器将发送回带有错误的JSON。(若成功为空白有效负载)
头
Authorization: Bearer <access token>
负载
此API的有效负载由两个url编码的表单字段(由'&'组成)组成。
model=<""/"slim">&url=<skin url>
model是默认模型的空字符串,而slim模型为“slim”。
示例
curl -H "Authorization: Bearer <access token>" --data-urlencode "model=" --data-urlencode "url=http://assets.mojang.com/SkinTemplates/steve.png" https://api.mojang.com/user/profile/<uuid>/skin
POST /user/profile/<uuid>/skin HTTP/1.1 Host: api.mojang.com User-Agent: curl/7.49.0 Accept: */* Authorization: Bearer <access token> Content-Length: 69 Content-Type: application/x-www-form-urlencoded model=&url=http%3A%2F%2Fassets.mojang.com%2FSkinTemplates%2Fsteve.png
上传皮肤
PUT https://api.mojang.com/user/profile/<uuid>/skin
这会将皮肤上传到Mojang的服务器,同时设置了用户的皮肤。这也适用于旧版帐号。
响应
除非错误,否则无响应
头
Authorization: Bearer <access token>
负载
该API的负载由多部分表单数据组成。有两部分(顺序与边界的b/c无关):
model | 默认模型为空字符串,纤细模型为"slim" |
file | 原始图像文件数据 |
示例
curl -X PUT -H "Authorization: Bearer <access token>" -F model=alex -F file="@alex.png;type=image/png" https://api.mojang.com/user/profile/<uuid>/skin
PUT /user/profile/<uuid>/skin HTTP/1.1 Host: api.mojang.com User-Agent: curl/7.49.0 Accept: */* Authorization: Bearer <access token> Content-Length: <length> Content-Type: multipart/form-data; boundary=<boundary> --<boundary> Content-Disposition: form-data; name="model" slim --<boundary> Content-Disposition: form-data; name="file"; filename="alex.png" Content-Type: image/png <image data> --<boundary>--
重置皮肤
DELETE https://api.mojang.com/user/profile/<uuid>/skin
将用户的皮肤重置为默认皮肤。
响应
除非错误,否则无响应
头
Authorization: Bearer <access token>
示例
curl -X DELETE -H "Authorization: Bearer <access token>" https://api.mojang.com/user/profile/<uuid>/skin
DELETE /user/profile/<uuid>/skin HTTP/1.1 Host: api.mojang.com User-Agent: curl/7.46.0 Accept: */* Authorization: Bearer <access token>
被阻止的服务器
GET https://sessionserver.mojang.com/blockedservers
返回用于在客户端尝试连接时对照服务器地址进行检查的SHA1哈希列表。
客户端使用ISO-8859-1字符集依据此列表检查小写名称。他们还将尝试检查子域名,并用*
替换每个级别。具体来说,它会根据域名中的.
进行拆分,遍历每个部分,一次删除一个。例如,对于mc.example.com
,它将尝试mc.example.com
、*.example.com
和*.com
。使用IP地址(通过划分为4个部分进行验证,每个部分都是0到255之间的有效整数,包括0和255之间的有效整数),替换将从头开始,因此对于192.168.0.1
,它将尝试192.168.0.1
、192.168.0.*
、192.168.*
和192.*
。
此检查由netty中的bootstrap类完成。默认netty类被启动器加载的com.mojang:netty依赖覆盖。这使其可以影响使用netty(1.7+)的任何版本。
响应
所有按行分隔的SHA1哈希列表。
目前约有2200种哈希值已被破解。
6f2520f8bd70a718c568ab5274c56bdbbfc14ef4:*.minetime.com 7ea72de5f8e70a2ac45f1aa17d43f0ca3cddeedd:*.trollingbrandon.club c005ad34245a8f2105658da2d6d6e8545ef0f0de:*.skygod.us c645d6c6430db3069abd291ec13afebdb320714b:*.mineaqua.es 8bf58811e6ebca16a01b842ff0c012db1171d7d6:*.eulablows.host 8789800277882d1989d384e7941b6ad3dadab430:*.moredotsmoredots.xyz e40c3456fb05687b8eeb17213a47b263d566f179:*.brandonlovescock.bid 278b24ffff7f9f46cf71212a4c0948d07fb3bc35:*.brandonlovescock.club c78697e385bfa58d6bd2a013f543cdfbdc297c4f:*.mineaqua.net b13009db1e2fbe05465716f67c8d58b9c0503520:*.endercraft.com 3e560742576af9413fca72e70f75d7ddc9416020:*.insanefactions.org 986204c70d368d50ffead9031e86f2b9e70bb6d0:*.playmc.mx 65ca8860fa8141da805106c0389de9d7c17e39bf:*.howdoiblacklistsrv.host 7dca807cc9484b1eed109c003831faf189b6c8bf:*.brandonlovescock.online c6a2203285fb0a475c1cd6ff72527209cc0ccc6e:*.brandonlovescock.press e3985eb936d66c9b07aa72c15358f92965b1194e:*.insanenetwork.org b140bec2347bfbe6dcae44aa876b9ba5fe66505b:*.phoenixnexus.net 27ae74becc8cd701b19f25d347faa71084f69acd:*.arkhamnetwork.org 48f04e89d20b15de115503f22fedfe2cb2d1ab12:brandonisan.unusualperson.com 9f0f30820cebb01f6c81f0fdafefa0142660d688:*.kidslovemy500dollarranks.club cc90e7b39112a48064f430d3a08bbd78a226d670:*.eccgamers.com 88f155cf583c930ffed0e3e69ebc3a186ea8cbb7:*.fucktheeula.com 605e6296b8dba9f0e4b8e43269fe5d053b5f4f1b:*.mojangendorsesbrazzers.webcam 5d2e23d164a43fbfc4e6093074567f39b504ab51:touchmybody.redirectme.net f3df314d1f816a8c2185cd7d4bcd73bbcffc4ed8:*.mojangsentamonkeyinto.space 073ca448ef3d311218d7bd32d6307243ce22e7d0:*.diacraft.org 33839f4006d6044a3a6675c593fada6a690bb64d:*.diacraft.de e2e12f3b7b85eab81c0ee5d2e9e188df583fe281:*.eulablacklist.club 11a2c115510bfa6cb56bbd18a7259a4420498fd5:*.slaughterhousepvp.com 75df09492c6c979e2db41116100093bb791b8433:*.timelesspvp.net d42339c120bc10a393a0b1d2c6a2e0ed4dbdd61b:*.herowars.org 4a1b3b860ba0b441fa722bbcba97a614f6af9bb8:justgiveinandblockddnsbitches.ddns.net b8c876f599dcf5162911bba2d543ccbd23d18ae5:brandonisagainst.health-carereform.com 9a9ae8e9d0b6f3bf54c266dcd1e4ec034e13f714:brandonwatchesporn.onthewifi.com 336e718ffbc705e76b4a72884172c6b95216b57c:canyouwildcardipsplease.gotdns.ch 27cf97ecf24c92f1fe5c84c5ff654728c3ee37dd:letsplaysome.servecounterstrike.com 32066aa0c7dc9b097eed5b00c5629ad03f250a2d:mojangbrokeintomy.homesecuritymac.com 39f4bbfd123a5a5ddbf97489877831c15a70d7f2:*.primemc.org f32f824d41aaed334aef248fbe3a0f8ecf4ac1a0:*.meep.in c22efe4cf7fb319ca2387bbc930c1fdf77ab72fc:*.itsjerryandharry.com cc8e1ae93571d144bf4b37369cb8466093d6db5a:*.thearchon.net 9c0806e5ffaccb45121e57e4ce88c7bc76e057f1:*.goatpvp.com 5ca81746337088b7617c851a1376e4f00d921d9e:*.gotpvp.com a5944b9707fdb2cc95ed4ef188cf5f3151ac0525:*.guildcraft.org
统计信息
POST https://api.mojang.com/orders/statistics
获取有关Minecraft销量的统计信息。
负载
负载是"metricKeys"键下的json选项列表。 您将收到与所请求类型的销售总额相对应的单个对象。 您必须请求至少一种销售类型。 以下是https://minecraft.net/en/stats/使用的默认列表
{
"metricKeys": [
"item_sold_minecraft",
"prepaid_card_redeemed_minecraft"
]
}
有效选项有:
item_sold_minecraft prepaid_card_redeemed_minecraft item_sold_cobalt item_sold_scrolls
响应
返回一个包含已销售副本总数、最近24小时内售出的副本数量和每秒的销售量的json对象。
{
"total": integer total amount sold,
"last24h": integer total sold in last 24 hours,
"saleVelocityPerSeconds": decimal average sales per second
}
示例
C# | 完整的API包装器
Go | UUID或名称至拥有皮肤、披风和名称历史的档案
Python | 完整的API包装器
Python | UUID或名称至档案
Python | 名称的文件至UUID和名称的文件
PHP | UUID或名称至拥有皮肤、头颅和名称历史的档案
PHP | UUID至名称
PHP | UUID至名称、名称至UUID
Java | 几近完整的API包装器
JavaScript | UUID或名称至拥有皮肤、披风和名称历史的档案