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 `FurnaceSmeltEvent`. It matches only `Event::FurnaceSmeltEvent(data)`; any other `Event` variant means the dispatcher sent a wrong-type payload to the smelting handler. The library considers this a broken dispatch invariant and panics with "unexpected event".
Solutions
- Register the handler for `EventType::FurnaceSmeltEvent` so dispatch only sends that variant.
- Use `FurnaceSmeltEvent::data_into_event(data)` when constructing events for manual calls.
- Synchronize versions and clean-rebuild the workspace to fix `Event` enum mismatch.
- Check the variant first: `if let Event::FurnaceSmeltEvent(data) = event { ... }`.
- Replace the panic with a logged error or typed failure for graceful handling.
Example fix
// before
match event {
Event::FurnaceSmeltEvent(data) => data,
_ => panic!("unexpected event"),
}
// after
match event {
Event::FurnaceSmeltEvent(data) => data,
_ => log::error!("FurnaceSmeltEvent handler received unexpected variant"),
_ => return None,
} Defensive patterns
Strategy: type-guard
Validate before calling
// Before dispatch assert_eq!(event.event_type(), EventType::FurnaceSmeltEvent, "wrong event routed to FurnaceSmelt handler");
Type guard
fn as_furnace_smelt(event: &Event) -> Option<&FurnaceSmeltEventData> {
match event {
Event::FurnaceSmeltEvent(data) => Some(data),
_ => None,
}
} Try / catch
let result = std::panic::catch_unwind(AssertUnwindSafe(|| handler.data_from_event(event)));
if result.is_err() {
log::error!("FurnaceSmeltEvent handler received an unexpected event variant");
} Prevention
- Register the handler with EventType::FurnaceSmeltEvent.
- Narrow the event with if-let before calling data_from_event manually.
- Construct events via FurnaceSmeltEvent::data_into_event.
- Align pumpkin-plugin-api versions across crates and rebuild cleanly.
- Double-check EventType constants when duplicating furnace handler code.
When it happens
Trigger: Dispatching a non-`FurnaceSmeltEvent` variant (e.g. `FurnaceBurnEvent`) to this handler's `data_from_event`, or registering the handler under a mismatched `EventType`.
Common situations: Handler registration tables that conflate furnace events, hand-written routing, or enum drift after upgrading pumpkin-plugin-api so the match arm no longer receives the expected variant.
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/5d0777a45abbab8a.
Report an issue: GitHub.
Appendix: source
Thrown at crates/pumpkin-plugin-api/src/events/inventory/furnace_smelt.rs:13
use super::super::FromIntoEvent;
use crate::wit::pumpkin::plugin::event::{Event, EventType, FurnaceSmeltEventData};
/// Event triggered when an item is smelted in a furnace.
pub struct FurnaceSmeltEvent;
impl FromIntoEvent for FurnaceSmeltEvent {
const EVENT_TYPE: EventType = EventType::FurnaceSmeltEvent;
type Data = FurnaceSmeltEventData;
fn data_from_event(event: Event) -> Self::Data {
match event {
Event::FurnaceSmeltEvent(data) => data,
_ => panic!("unexpected event"),
}
}
fn data_into_event(data: Self::Data) -> Event {
Event::FurnaceSmeltEvent(data)
}
}
View on GitHub (pinned to 8d4639e25a)