{"record":{"id":"9097b6b22066fcb3","repo":"Pumpkin-MC/Pumpkin","slug":"unexpected-event-9097b6","errorCode":null,"errorMessage":"unexpected event","messagePattern":"unexpected event","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/pumpkin-plugin-api/src/events/entity/entity_enter_love_mode.rs","lineNumber":14,"sourceCode":"use crate::wit::pumpkin::plugin::event::{EntityEnterLoveModeEventData, Event, EventType};\n\nuse super::super::FromIntoEvent;\n\n/// Event triggered when an entity enters love mode.\npub struct EntityEnterLoveModeEvent;\nimpl FromIntoEvent for EntityEnterLoveModeEvent {\n    const EVENT_TYPE: EventType = EventType::EntityEnterLoveModeEvent;\n    type Data = EntityEnterLoveModeEventData;\n\n    fn data_from_event(event: Event) -> Self::Data {\n        match event {\n            Event::EntityEnterLoveModeEvent(data) => data,\n            _ => panic!(\"unexpected event\"),\n        }\n    }\n\n    fn data_into_event(data: Self::Data) -> Event {\n        Event::EntityEnterLoveModeEvent(data)\n    }\n}\n","sourceCodeStart":1,"sourceCodeEnd":22,"githubUrl":"https://github.com/Pumpkin-MC/Pumpkin/blob/8d4639e25a57c15e47448ec327c780d41bbf2356/crates/pumpkin-plugin-api/src/events/entity/entity_enter_love_mode.rs#L1-L22","documentation":"This panic fires inside `data_from_event` for EntityEnterLoveModeEvent when the incoming `Event` is not `Event::EntityEnterLoveModeEvent`. It is the downcast from the generic `Event` enum to `EntityEnterLoveModeEventData`; the catch-all panics because the dispatcher should only deliver the matching variant. Encountering it indicates a routing/matching invariant was broken.","triggerScenarios":"Calling `data_from_event` with any variant other than `Event::EntityEnterLoveModeEvent` — wrong-variant manual dispatch, dispatcher mispairing `EventType::EntityEnterLoveModeEvent`, or harness code feeding other events through this impl.","commonSituations":"Test dispatch code with a copy-pasted variant; custom event relays that forward raw `Event` values unchecked; version skew between plugin-api crates.","solutions":["Wrap payloads as `Event::EntityEnterLoveModeEvent(data)` before dispatch","Check `event_type()` equals `EventType::EntityEnterLoveModeEvent` first","Align plugin-api versions across the build","Make the catch-all return a `Result` or log instead of panicking"],"exampleFix":"// before\n<EntityEnterLoveModeEvent as Event>::data_from_event(Event::EntityBreedEvent(d));\n// after\n<EntityEnterLoveModeEvent as Event>::data_from_event(Event::EntityEnterLoveModeEvent(d));","handlingStrategy":"type-guard","validationCode":"if !matches!(event, Event::EntityEnterLoveModeEvent(_)) { return; }\n<crate::events::entity::entity_enter_love_mode::EntityEnterLoveModeEvent as Event>::data_from_event(event);","typeGuard":"fn as_entity_enter_love_mode(event: &Event) -> Option<&EntityEnterLoveModeEventData> {\n    match event { Event::EntityEnterLoveModeEvent(d) => Some(d), _ => None }\n}","tryCatchPattern":"// guard before unwrapping:\nif let Event::EntityEnterLoveModeEvent(data) = event {\n    // use data\n} else {\n    log::error!(\"misrouted event: expected EntityEnterLoveModeEvent\");\n}","preventionTips":["Match the expected variant before invoking `data_from_event`","Avoid copy-pasting variant names when constructing events in tests","Round-trip test each event implementation","Pin consistent plugin-api versions"],"tags":["rust","panic","event-dispatch","plugin-api"],"backgroundTag":"internal-invariant-violation","analyzedSha":"8d4639e25a57c15e47448ec327c780d41bbf2356","analyzedAt":"2026-09-09T15:32:22.916Z","contentChangedAt":"2026-09-09T15:32:22.916Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}