Open xfl03 opened 6 years ago
1.未在文档中规定 Username ->UUID API
虽然Mojang实现了该API,但authlib中却并没有使用到这个API。并且常见的启动器、服务端,如HMCL、Spigot,也并未使用到该API。
我在GitHub上搜索了这段API的URL,发现使用并不是很多。事实上,我到目前为之还没有碰到过使用它的mod或插件。但既然Mojang有这个API,mod或插件就还是有可能去调用它的。
我打算将其写入文档。但在未发现调用这个API的启动器、服务端、mod或插件前,我会赋予它一个较低的优先级。你觉得如何?
从你的堆栈跟踪可以看出,authlib调用的是/sessionserver/session/minecraft/profile/:uuid
这个API。其文档中已有说明:
响应格式:
{ // ... 角色信息(包含角色属性。若unsigned为true,还需要包含数字签名。格式见 §角色信息的序列化) }
可能我的描述有歧义,包含角色属性
指的就是包含properties。
我打算将其写入文档。但在未发现调用这个API的启动器、服务端、mod或插件前,我会赋予它一个较低的优先级。
不过还是非常感谢您做出的这个决定
我发现一个使用 Username -> UUID at time API 的 Mod: SkinsRestorer。
I found that SkinsRestorer is using Username -> UUID at time API.
@Karlatemp 十分抱歉,我撤回了你在 wiki 上 Change ```javascript to ```json5, Add GET https://api.mojang.com/users/profiles/minecraft/\<username>?at=\<timestamp> GET https://api.mojang.com/user/profiles/\<uuid>/names 这个提交。
对于将 javascript
改为 json5
我十分感谢,但因为这和另外两项变更合在了一个提交内,因此我只能全部撤回。您新增的两个 API,是属于对规范的较大变动,而不是对错误的修正,因此必须在讨论并达成一致之后再实施,希望您见谅。此 issue 应该与您的问题主题相符,所以希望您可以在这里表达看法、提出建议等等。
这两个 API 确实是 Mojang 提供的,但是因为使用极少,因此规范一开始并没有把它们纳入。 @xfl03 对此提出了问题,但因为没有遇到由此造成的问题,所以 issue 被搁置至今。
如果要新增 API 的话,需要对 Mojang 的 API 实现进行仔细测试并且推断其逻辑,然后再加进规范。同时,一般还需要在 yggdrasil-mock 中做出一个参考实现。除此之外,可能还需要听取 BS 开发者的建议,看看他们在实现的时候会不会遇到什么问题,有什么意见。
1.未在文档中规定 Username ->UUID API
Resolved
2.~~[UUID->Profile API](https://github.com/to2mbn/authlib-injector/wiki/Yggdrasil%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83#%E6%9F%A5%E8%AF%A2%E5%8D%95%E4%B8%AA%E8%A7%92%E8%89%B2)中存在[导致NPE的定义](https://github.com/to2mbn/authlib-injector/wiki/Yggdrasil%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83#%E8%A7%92%E8%89%B2%E4%BF%A1%E6%81%AF%E7%9A%84%E5%BA%8F%E5%88%97%E5%8C%96)~~**(edited by @yushijinhun: solved)** > properties及signature项目在无特殊说明的情况下不需要包含。 实际上,若是 `properties` 被省略,则会在 ```` com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:187) ```` 发生NPE,完整的日志如下 ```` java.lang.NullPointerException com.google.common.collect.AbstractMultimap.putAll(AbstractMultimap.java:95) com.google.common.collect.LinkedHashMultimap.putAll(LinkedHashMultimap.java:86) com.google.common.collect.ForwardingMultimap.putAll(ForwardingMultimap.java:110) com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillGameProfile(YggdrasilMinecraftSessionService.java:187) com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:60) com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService$1.load(YggdrasilMinecraftSessionService.java:57) com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3716) com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2424) com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2298) com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2211) com.google.common.cache.LocalCache.get(LocalCache.java:4154) com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:4158) com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:5147) com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:5153) com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fillProfileProperties(YggdrasilMinecraftSessionService.java:170) customskinloader.loader.MojangAPILoader.loadProfile(MojangAPILoader.java:46) customskinloader.CustomSkinLoader.loadProfile0(CustomSkinLoader.java:105) customskinloader.CustomSkinLoader.loadProfile(CustomSkinLoader.java:77) customskinloader.fake.FakeSkinManager$1.run(FakeSkinManager.java:61) java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) java.util.concurrent.FutureTask.run(Unknown Source) java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) java.lang.Thread.run(Unknown Source) ````望您能在百忙之中抽出时间进行修改,麻烦您了