Pumpkin-MC/Pumpkin · error · AuthError
You have disallowed actions from Authentication servers
Error message
You have disallowed actions from Authentication servers
What it means
PacketDecodeError::Message(String) is the catch-all variant carrying a free-form error message. It is used for decode failures that do not map to a specific variant, wrapping arbitrary error text. Treat the payload as diagnostic information rather than a stable contract.
Solutions
- Log the message string to identify the actual underlying failure.
- If it recurs, extend PacketDecodeError with a dedicated variant instead of relying on the catch-all.
- Check the call stack/payload that produced the wrapped message for the root cause.
- Upgrade or patch the protocol crate if the wrapped message indicates an internal bug.
Example fix
// before
return Err(PacketDecodeError::Message(format!("unknown state {:?}", state)));
// after
#[error("unknown connection state: {0}")]
UnknownState(String),
return Err(PacketDecodeError::UnknownState(state)); Defensive patterns
Strategy: try-catch
Try / catch
match decode_packet(stream).await {
Err(PacketDecodeError::Message(msg)) => {
error!("packet decode failed: {msg}");
// inspect msg for the root cause; consider a dedicated variant if recurring
}
Ok(p) => handle(p),
Err(e) => warn!("decode error: {e}"),
} Prevention
- Prefer dedicated error variants over the Message catch-all for known failure modes.
- Always log the wrapped message — it is the only diagnostic available.
- Avoid stringly-typed wrapping in new code paths.
- Review call sites that produce Message to find the underlying root cause.
When it happens
Trigger: Any decode path returning a generic error string; errors wrapped via .map_err(|e| PacketDecodeError::Message(e.to_string())) in decoding helpers.
Common situations: Unexpected codec failures during development; mixing of error types from lower-level I/O surfaced through the catch-all; debugging custom protocol extensions.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
- Authentication and authorization failures — expired tokens, bad credentials, and missing scopes.
Related errors
- IO error
- JSON error
- Authentication servers are down
- Failed to verify username
- You are banned from Authentication servers
AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09).
Data as JSON: /api/errors/e0ce7efd205362c0.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin/src/net/authentication.rs:403
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}")]
DisallowedUrlDomain(String),
#[error("Failed to decode base64 player texture: {0}")]
DecodeError(String),
#[error("Failed to parse JSON from player texture: {0}")]View on GitHub (pinned to 8d4639e25a)