Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lookup skins by player name on "offline" servers #256

Open
evan-goode opened this issue Jul 1, 2024 · 7 comments
Open

Lookup skins by player name on "offline" servers #256

evan-goode opened this issue Jul 1, 2024 · 7 comments

Comments

@evan-goode
Copy link
Contributor

Moving this from elyby/accounts#32.

We've had a number of PollyMC and Fjord Launcher users complain that skins are not visible when using an authlib-injector client with an online-mode=false server: fn2006/PollyMC#107, fn2006/PollyMC#58. The authlib-injector client does attempt to load player skins from the API server even on online-mode=false servers, but it requests them via the player's "offline UUID" (derived from the player's username), and authentication servers typically respond with a 204 No Content.

When on online-mode=false servers, could authlib-injector lookup player skins by player name, querying https://github.com/yushijinhun/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%8C%89%E5%90%8D%E7%A7%B0%E6%89%B9%E9%87%8F%E6%9F%A5%E8%AF%A2%E8%A7%92%E8%89%B2 to find the correct, online UUID and then fetching skins by that UUID?

This behavior could be gated behind a Java argument in case the user/launcher wants to turn it on or off.

I am happy to prepare a PR if desired.

Another approach to solve the problem is to modify each authentication server implementation to resolve offline UUIDs to the correct accounts. I have done this in Drasl: unmojang/drasl@e8537ea. But this would mean every implementation has to do it themselves, and Ely.by has already said they'd rather the problem be solved in authlib-injector.

@kuruaff
Copy link

kuruaff commented Jul 2, 2024

Check SkinsRestorer, You can correct the system for issuing a response to players with data of player's skins by replacing the skin url to own in the returned array

@evan-goode
Copy link
Contributor Author

Yes, thanks, there are workarounds available. CustomSkinLoader should also be mentioned since it's clientside and thus can be used on a vanilla server. FabricTailor is also promising as a solution for Fabric servers, but currently does not support configuring a custom skin server, just Ely.by.

Still, I am curious about a fix in authlib-injector itself. A user might reasonably assume that clientside authlib-injector with Ely.by or Blessing Skin is sufficient to see player skins on vanilla online-mode=false servers.

authlib-injector already modifies the client to make skin requests even in online-mode=false servers [1], which the vanilla client does not do, so perhaps adding the additional step of player name -> UUID resolution is not too big a departure from vanilla behavior.

[1] Though this seems to not work in 1.21, I will investigate some more and file an issue.

@kuruaff
Copy link

kuruaff commented Jul 2, 2024

but this feature realizable by own auth api (backend side), you can handle requests by server with "nickname regex" in url routing like you handle requests with uuid at this time

@yige233
Copy link

yige233 commented Jul 2, 2024

The vanilla online client will not load any skin(including the player's own) when joining into an offline server. It might be a mistake of authlib-injector that making skin requests in offline servers, I think?

@kuruaff
Copy link

kuruaff commented Jul 2, 2024

The vanilla online client will not load any skin(including the player's own) when joining into an offline server. It might be a mistake of authlib-injector that making skin requests in offline servers, I think?

server core also can patched by authlib and return player skins data to client is issue of server, when offline mode is enabled server also can send skins to client but need to use not usual methods like skinsrestorer plugin
by default plugin send custom skins data by player name from official minecraft server, you can just replace url in plugin classes to your own api, but they dont supports via non patched client with custom skin url by security solution

i dont understand why you need to load skins on servers with offline mode enabled on the client, if this, in turn, does not guarantee that the player will not joined from any other client (vanilla or injected by another project)

anyway its not trouble of injector

@tnqzh123
Copy link

tnqzh123 commented Jul 2, 2024

I can't get your point.

What you said is, you have an authlib injected server, you have an authlib injected client, but you still set online-mode=false?

So why not just set online-mode=true and use your own authenticate server?

That's doesn't make sense that adding authlib-injector just for skins. Adding a client-side mod like CustomSkinLoader or adding a server-side plugin like SkinsRestorer is much easier than patch both server and client with authlib-injector. If your server provider doesn't provide custom server kernel, I don't believe they will let you set JVM arguments so you can add authlib-injector, and if your launcher doesn't support Forge or Fabric client, I don't believe it supports authenticate with custom Yggdrasil server.

@yige233
Copy link

yige233 commented Jul 2, 2024

The vanilla online client will not load any skin(including the player's own) when joining into an offline server. It might be a mistake of authlib-injector that making skin requests in offline servers, I think?

server core also can patched by authlib and return player skins data to client is issue of server, when offline mode is enabled server also can send skins to client but need to use not usual methods like skinsrestorer plugin by default plugin send custom skins data by player name from official minecraft server, you can just replace url in plugin classes to your own api, but they dont supports via non patched client with custom skin url by security solution

i dont understand why you need to load skins on servers with offline mode enabled on the client, if this, in turn, does not guarantee that the player will not joined from any other client (vanilla or injected by another project)

anyway its not trouble of injector

Yes. Authlib-injector don't need to concern about how to load skin in offline servers, which should be resolved by other mods like custonSkinLoader.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants