Skip to content

Excessive Mojang API rate limiting (429) since Paper commit 04739de - SkinSource profile lookup change #13727

@caiobarnes

Description

@caiobarnes

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

  1. Run a Paper/Purpur backend server with online-mode=false behind a proxy (Velocity or BungeeCord)
  2. Use an authentication plugin such as nLogin (players get offline v3 UUIDs)
  3. Have players join the server
  4. Any action that renders player heads (chat hover, tablist, plugin GUIs) triggers getPlayerProfile()CraftPlayerProfile.getUpdatedProfile() → Mojang API lookup
  5. Since offline UUIDs don't exist at Mojang, the lookups fail repeatedly and quickly hit the 429 rate limit
  6. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions