Pumpkin-MC/Pumpkin · error · VelocityError

Failed to read game profile properties

Error message

Failed to read game profile properties

What it means

VelocityError sentinel while decoding the tail of the modern forwarding payload: the player's profile properties array could not be read or deserialized. Fires when the forwarding data ends early or the properties list is malformed, typically because the proxy forwarded a format this server build does not fully understand.

Solutions

  1. Reject the connection
  2. Validate the properties encoding in the payload
  3. Log the read failure at debug level
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/pumpkin/src/net/proxy/velocity.rs:47 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09). Data as JSON: /api/errors/d4f39870328ad36a. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin/src/net/proxy/velocity.rs:47

#[derive(Error, Debug)]
pub enum VelocityError {
    #[error("No response data received")]
    NoData,
    #[error("Unable to verify player details")]
    FailedVerifyIntegrity,
    #[error("Failed to read forward version")]
    FailedReadForwardVersion,
    #[error("Unsupported forwarding version {0}. Maximum supported version is {1}")]
    UnsupportedForwardVersion(u8, u8),
    #[error("Failed to read address")]
    FailedReadAddress,
    #[error("Failed to parse address")]
    FailedParseAddress,
    #[error("Failed to read game profile name")]
    FailedReadProfileName,
    #[error("Failed to read game profile UUID")]
    FailedReadProfileUUID,
    #[error("Failed to read game profile properties")]
    FailedReadProfileProperties,
}

pub async fn velocity_login(connection: &mut PendingConnection) {
    // TODO: Validate the packet transaction id from the plugin response with this
    let velocity_message_id: i32 = rand::rng().random();

    let mut buf = BytesMut::new();
    buf.put_u8(MAX_SUPPORTED_FORWARDING_VERSION);
    connection
        .send_packet_now(&CLoginPluginRequest::new(
            velocity_message_id.into(),
            PLAYER_INFO_CHANNEL,
            &buf,
        ))
        .await;
}

View on GitHub (pinned to 8d4639e25a)