Pumpkin-MC/Pumpkin · error · ChatError

has too many unacknowledged chats queued

Error message

has too many unacknowledged chats queued

What it means

ChatError::TooManyPendingChats; the player accumulated more unacknowledged signed chats than the server allows without the client returning chat acknowledgments, indicating a client not honoring the chat session protocol.

Solutions

  1. Kick the player to reset the chat session
  2. Track ack state per connection and stop processing when the queue is full
  3. Log the overflow at warn level
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at crates/pumpkin/src/net/java/play/mod.rs:132 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/1c32f83152420f59. Report an issue: GitHub.

Appendix: source

Thrown at crates/pumpkin/src/net/java/play/mod.rs:132

    fn client_kick_reason(&self) -> Option<String> {
        match self {
            Self::BlockOutOfReach | Self::BlockOutOfWorld | Self::InvalidGamemode => None,
            Self::InvalidBlockFace => Some("Invalid block face".into()),
            Self::InvalidHand => Some("Invalid hand".into()),
        }
    }
}

#[derive(Debug, Error)]
pub enum ChatError {
    #[error("sent an oversized message")]
    OversizedMessage,
    #[error("sent a message with illegal characters")]
    IllegalCharacters,
    #[error("sent a chat with invalid/no signature")]
    UnsignedChat,
    #[error("has too many unacknowledged chats queued")]
    TooManyPendingChats,
    #[error("sent a chat that couldn't be validated")]
    ChatValidationFailed,
    #[error("sent a chat with an out of order timestamp")]
    OutOfOrderChat,
    #[error("has an expired public key")]
    ExpiredPublicKey,
    #[error("attempted to initialize a session with an invalid public key")]
    InvalidPublicKey,
}

impl PumpkinError for ChatError {
    fn is_kick(&self) -> bool {
        true
    }

    fn severity(&self) -> Level {
        Level::WARN

View on GitHub (pinned to 8d4639e25a)