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 `FurnaceBurnEvent`. It extracts data only from `Event::FurnaceBurnEvent(data)`; any other `Event` variant indicates the dispatcher sent the wrong event type to the furnace-burn handler. The library treats the mismatch as an invariant break and panics with "unexpected event".
Solutions
- Register the handler for `EventType::FurnaceBurnEvent` so only that variant is dispatched to it.
- Use `FurnaceBurnEvent::data_into_event(data)` when constructing the event for manual calls.
- Synchronize pumpkin-plugin-api versions and clean-rebuild to fix enum mismatches.
- Check the variant before calling: `if let Event::FurnaceBurnEvent(data) = event { ... }`.
- Swap the panic for a logged error or `Result` return to avoid crashing the server.
Example fix
// before
match event {
Event::FurnaceBurnEvent(data) => data,
_ => panic!("unexpected event"),
}
// after
match event {
Event::FurnaceBurnEvent(data) => data,
_ => return Err(EventDispatchError::UnexpectedVariant),
} Defensive patterns
Strategy: type-guard
Validate before calling
// Before dispatch assert_eq!(event.event_type(), EventType::FurnaceBurnEvent, "wrong event routed to FurnaceBurn handler");
Type guard
fn as_furnace_burn(event: &Event) -> Option<&FurnaceBurnEventData> {
match event {
Event::FurnaceBurnEvent(data) => Some(data),
_ => None,
}
} Try / catch
let result = std::panic::catch_unwind(AssertUnwindSafe(|| handler.data_from_event(event)));
if result.is_err() {
log::error!("FurnaceBurnEvent handler received an unexpected event variant");
} Prevention
- Register furnace handlers with their exact EventType — don't share one registration across FurnaceBurn/Smelt/Extract.
- Narrow with if-let before calling data_from_event manually.
- Construct events via FurnaceBurnEvent::data_into_event.
- Sync plugin-api versions and clean-rebuild after upgrades.
- Route furnace events through a per-variant match, not a catch-all fallthrough.
When it happens
Trigger: Calling `data_from_event` with a non-`FurnaceBurnEvent` variant — e.g. furnace smelt/extract events routed here — or a handler registration keyed to the wrong `EventType`.
Common situations: Copy-paste handler registration that mixes furnace event types, custom dispatch logic, or `Event` enum drift between server and plugin versions after an upgrade.
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/a2b45c6594d45cf9.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin-plugin-api/src/events/inventory/furnace_burn.rs:13
use super::super::FromIntoEvent;
use crate::wit::pumpkin::plugin::event::{Event, EventType, FurnaceBurnEventData};
/// Event triggered when fuel is burned in a furnace.
pub struct FurnaceBurnEvent;
impl FromIntoEvent for FurnaceBurnEvent {
const EVENT_TYPE: EventType = EventType::FurnaceBurnEvent;
type Data = FurnaceBurnEventData;
fn data_from_event(event: Event) -> Self::Data {
match event {
Event::FurnaceBurnEvent(data) => data,
_ => panic!("unexpected event"),
}
}
fn data_into_event(data: Self::Data) -> Event {
Event::FurnaceBurnEvent(data)
}
}
View on GitHub (pinned to 8d4639e25a)