-
-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Description
Expected behavior
Player head rendering (chat hover, tablist, plugin GUIs) should not trigger uncached profile lookups against the Mojang session server for offline-mode UUIDs (v3) that will never resolve. Previously, applySkinToPlayerHeadContents used builder.id(this.getUniqueId()) which did not force a full profile resolution.
Observed/Actual behavior
Since commit 04739de (Make SkinSource Player implementation reflect profile changes #13585), the server console is continuously flooded with HTTP 429 errors from the Mojang API. The same offline UUIDs are retried dozens of times with no backoff or caching of failed lookups.
Example (repeats hundreds of times):
[14:06:26 WARN]: Couldn't look up profile properties for b838e741-2ef2-3b7b-9558-e90200080d08
com.mojang.authlib.exceptions.MinecraftClientHttpException: Status: 429
at com.mojang.authlib.minecraft.client.MinecraftClient.readInputStream(MinecraftClient.java:103)
at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fetchProfileUncached(YggdrasilMinecraftSessionService.java:197)
at com.mojang.authlib.yggdrasil.YggdrasilMinecraftSessionService.fetchProfile(YggdrasilMinecraftSessionService.java:167)
at com.destroystokyo.paper.profile.PaperMinecraftSessionService.fetchProfile(PaperMinecraftSessionService.java:40)
at org.bukkit.craftbukkit.profile.CraftPlayerProfile.getUpdatedProfile(CraftPlayerProfile.java:176)
Steps/models to reproduce
- Run a Paper/Purpur backend server with
online-mode=falsebehind a proxy (Velocity or BungeeCord) - Use an authentication plugin such as nLogin (players get offline v3 UUIDs)
- Have players join the server
- Any action that renders player heads (chat hover, tablist, plugin GUIs) triggers
getPlayerProfile()→CraftPlayerProfile.getUpdatedProfile()→ Mojang API lookup - Since offline UUIDs don't exist at Mojang, the lookups fail repeatedly and quickly hit the 429 rate limit
- Console floods continuously with the error above
Plugin and Datapack List
mcMMO, DecentHolograms, Vault, VoidGen, ViaRewind, ProtocolLib, ViaVersion, TAB-Bridge, PlaceholderAPI, SkinsRestorer, ViaBackwards, ViaRewind-Legacy-Support
Paper version
Previous: 1.21.11-2561-f6242c0 (MC: 1.21.11)
Other
This was introduced by commit 04739de (#13585), which changed applySkinToPlayerHeadContents from builder.id(this.getUniqueId()) to builder.skin(this.getPlayerProfile()). The new implementation forces a full profile resolution via getPlayerProfile(), which hits the Mojang session server for every player — including offline-mode UUIDs that will never resolve.
There is already an open PR that appears to address this: #13692 (Fix PlayerProfile applySkinToPlayerHeadContents).
Rolling back to a build prior to this commit (before Feb 7) resolves the issue entirely.