Pumpkin-MC/Pumpkin · error
unexpected event
Error message
unexpected event
What it means
This panic fires in `data_from_event`, the `Event` trait implementation for `FurnaceExtractEvent`. It only accepts `Event::FurnaceExtractEvent(data)`; any other variant means the dispatcher delivered a mismatched event payload to this handler. The library treats that as an internal invariant violation and panics with "unexpected event".
Solutions
- Register the handler with `EventType::FurnaceExtractEvent` and confirm dispatch routes only that variant.
- Build the event via `FurnaceExtractEvent::data_into_event(data)` before manual extraction.
- Align plugin-api versions across the workspace and rebuild cleanly.
- Pre-narrow: `if let Event::FurnaceExtractEvent(data) = event { ... }`.
- Return `None`/log the mismatch instead of panicking.
Example fix
// before
match event {
Event::FurnaceExtractEvent(data) => data,
_ => panic!("unexpected event"),
}
// after
match event {
Event::FurnaceExtractEvent(data) => data,
_ => return None,
} Defensive patterns
Strategy: type-guard
Validate before calling
// Before dispatch assert_eq!(event.event_type(), EventType::FurnaceExtractEvent, "wrong event routed to FurnaceExtract handler");
Type guard
fn as_furnace_extract(event: &Event) -> Option<&FurnaceExtractEventData> {
match event {
Event::FurnaceExtractEvent(data) => Some(data),
_ => None,
}
} Try / catch
let result = std::panic::catch_unwind(AssertUnwindSafe(|| handler.data_from_event(event)));
if result.is_err() {
log::error!("FurnaceExtractEvent handler received an unexpected event variant");
} Prevention
- Register the handler under EventType::FurnaceExtractEvent only.
- Pre-narrow events with if-let/matches! before extraction.
- Use FurnaceExtractEvent::data_into_event to build Event values.
- Keep server and plugin on the same pumpkin-plugin-api version.
- Avoid copy-paste between furnace handler registrations without updating the EventType.
When it happens
Trigger: Passing an `Event` other than `Event::FurnaceExtractEvent` into `data_from_event`, e.g. other furnace or inventory events routed to this handler, or registration under the wrong `EventType`.
Common situations: Mixing up furnace event handlers (burn/smelt/extract) in registration tables, custom dispatch code, or version skew where the `Event` enum differs between server and plugin.
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.
Related errors
AI-assisted analysis of Pumpkin-MC/Pumpkin@8d4639e25a (2026-09-09).
Data as JSON: /api/errors/7a993ad0e631f37e.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin-plugin-api/src/events/inventory/furnace_extract.rs:13
use super::super::FromIntoEvent;
use crate::wit::pumpkin::plugin::event::{Event, EventType, FurnaceExtractEventData};
/// Event triggered when a player extracts items from a furnace output slot.
pub struct FurnaceExtractEvent;
impl FromIntoEvent for FurnaceExtractEvent {
const EVENT_TYPE: EventType = EventType::FurnaceExtractEvent;
type Data = FurnaceExtractEventData;
fn data_from_event(event: Event) -> Self::Data {
match event {
Event::FurnaceExtractEvent(data) => data,
_ => panic!("unexpected event"),
}
}
fn data_into_event(data: Self::Data) -> Event {
Event::FurnaceExtractEvent(data)
}
}
View on GitHub (pinned to 8d4639e25a)