Pumpkin-MC/Pumpkin · error · AuthError
You are banned from Authentication servers
Error message
You are banned from Authentication servers
What it means
PacketDecodeError::NotCompressed is raised when a packet arrives without compression framing (uncompressed payload) even though its size exceeds the negotiated compression threshold. After compression is enabled, packets larger than the threshold must be zlib-compressed; an uncompressed packet of that size violates the protocol. This protects against misframed or protocol-violating traffic.
Solutions
- Verify the Set Compression packet was sent and acknowledged before applying threshold checks.
- Check that the client's protocol implementation honors the compression threshold.
- If compression is optional for your use case, ensure the threshold/config matches both endpoints.
- Close the connection for protocol violations from misbehaving peers.
Example fix
// before
if !is_compressed(payload) { return Ok(payload.to_vec()); } // silently accepts uncompressed
// after
if !is_compressed(payload) && payload.len() > compression_threshold {
return Err(PacketDecodeError::NotCompressed);
} Defensive patterns
Strategy: validation
Validate before calling
fn compression_ok(uncompressed: bool, len: usize, threshold: usize) -> bool {
!(uncompressed && len > threshold)
} Type guard
fn requires_compression(len: usize, threshold: usize) -> bool {
len > threshold
} Try / catch
match decode_packet(stream).await {
Err(PacketDecodeError::NotCompressed) => {
warn!("uncompressed packet above threshold; protocol violation");
drop(stream);
}
Ok(p) => handle(p),
Err(e) => warn!("decode error: {e}"),
} Prevention
- Ensure both endpoints switch to compression at the same point in the handshake.
- Never enable/disable compression mid-connection without a renegotiation.
- Test with clients that correctly honor the Set Compression packet.
- Check proxy configurations do not strip compression framing.
When it happens
Trigger: Decoding a packet whose length exceeds the configured compression threshold but whose payload is not zlib-compressed; a client that ignored or mishandled the Set Compression packet.
Common situations: Compression enabled mid-connection with a client that never switched; a proxy stripping compression; custom client implementations that toggle compression incorrectly.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- Failed to verify username
- IO error
- JSON error
- Authentication servers are down
- You have disallowed actions from Authentication servers
AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09).
Data as JSON: /api/errors/fa94f80f8072c0c7.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin/src/net/authentication.rs:399
}
}
if not_found_count > 0 {
Ok(None)
} else if let Some(status) = last_unknown_status {
Err(AuthError::UnknownStatusCode(status))
} else {
Err(AuthError::FailedResponse)
}
}
#[derive(Error, Debug)]
pub enum AuthError {
#[error("Authentication servers are down")]
FailedResponse,
#[error("Failed to verify username")]
UnverifiedUsername,
#[error("You are banned from Authentication servers")]
Banned,
#[error("Texture Error {0}")]
TextureError(TextureError),
#[error("You have disallowed actions from Authentication servers")]
DisallowedAction,
#[error("Failed to parse JSON into Game Profile")]
FailedParse,
#[error("Unknown Status Code {0}")]
UnknownStatusCode(StatusCode),
}
#[derive(Error, Debug)]
pub enum TextureError {
#[error("Invalid URL")]
InvalidURL,
#[error("Invalid URL scheme for player texture: {0}")]
DisallowedUrlScheme(String),
#[error("Invalid URL domain for player texture: {0}")]View on GitHub (pinned to 8d4639e25a)