XTLS/Xray-core · error

incomplete minecraft profile textures

Error message

incomplete minecraft profile textures

What it means

XMCProfile.Build requires both TexturesValue and TexturesSignature to be non-empty, because the XMC transport must present a signed Minecraft skin texture payload. This error fires when either half of the signed texture pair is missing.

Source

Thrown at infra/conf/transport_finalmask.go:750

	Username          string `json:"username"`
	UUID              string `json:"uuid"`
	TexturesValue     string `json:"texturesValue"`
	TexturesSignature string `json:"texturesSignature"`
}

var xmcUsernamePattern = regexp.MustCompile(`^[A-Za-z0-9_]{3,16}$`)

func (c *XMCProfile) Build() (*xmc.Profile, error) {
	if !xmcUsernamePattern.MatchString(c.Username) {
		return nil, fmt.Errorf("invalid minecraft profile username: %q", c.Username)
	}

	profileUUID, err := googleuuid.Parse(c.UUID)
	if err != nil {
		return nil, fmt.Errorf("invalid minecraft profile UUID: %w", err)
	}
	if c.TexturesValue == "" || c.TexturesSignature == "" {
		return nil, fmt.Errorf("incomplete minecraft profile textures")
	}

	return &xmc.Profile{
		Username:          c.Username,
		Uuid:              append([]byte(nil), profileUUID[:]...),
		TexturesValue:     c.TexturesValue,
		TexturesSignature: c.TexturesSignature,
	}, nil
}

func (c *XMC) Build() (proto.Message, error) {
	if len(c.Profiles) == 0 {
		return nil, fmt.Errorf("minecraft profiles are required")
	}

	if c.Password == "" {
		return nil, fmt.Errorf("empty password")
	}

View on GitHub (pinned to 7d214f8b09)

Solutions

  1. Copy BOTH "value" and "signature" from the signed profile response (sessionserver with unsigned=false)
  2. Match the JSON keys exactly: texturesValue and texturesSignature
  3. Re-fetch the profile if the signature came back empty

Example fix

// before
"texturesValue": "ewogICJ0ZXh0dXJlcyIgOiB7..."
// signature missing

// after
"texturesValue": "ewogICJ0ZXh0dXJlcyIgOiB7...",
"texturesSignature": "K8vLbP...longBase64...="
Defensive patterns

Strategy: validation

Validate before calling

func profileComplete(p XMCProfile) bool {
    return p.TexturesValue != "" && p.TexturesSignature != ""
}

Prevention

When it happens

Trigger: Configuring an xmc profile with only "texturesValue" or only "texturesSignature", or with one of them set to an empty string.

Common situations: Fetching textures from sessionserver.mojang.com and copying only the "value" field of the textures property while skipping "signature"; assuming signature is optional; JSON key typos (texturesSignature vs textureSignature) silently leaving the field empty.

Related errors


AI-assisted analysis of XTLS/Xray-core@7d214f8b09 (2026-08-15). Data as JSON: /api/errors/dadeee0677af6f2e. Report an issue: GitHub.