veloren_server/events/
event_types.rs1pub use common::event::{
2 ArcingEvent, AuraEvent, BonkEvent, BuffEvent, ChangeAbilityEvent, ChangeBodyEvent,
3 ChangeStanceEvent, ChatEvent, ClientDisconnectEvent, ClientDisconnectWithoutPersistenceEvent,
4 ComboChangeEvent, CommandEvent, CreateAuraEntityEvent, CreateItemDropEvent, CreateNpcEvent,
5 CreateNpcGroupEvent, CreateObjectEvent, CreateShipEvent, CreateSpecialEntityEvent,
6 CreateSpriteEvent, DeleteCharacterEvent, DeleteEvent, DestroyEvent, DialogueEvent, DownedEvent,
7 EnergyChangeEvent, EntityAttackedHookEvent, EventBus, ExitIngameEvent, ExplosionEvent,
8 GroupManipEvent, HealthChangeEvent, HelpDownedEvent, InitializeCharacterEvent,
9 InitializeSpectatorEvent, InitiateInviteEvent, InventoryManipEvent, InviteResponseEvent,
10 KillEvent, KnockbackEvent, LandOnGroundEvent, MakeAdminEvent, MineBlockEvent, MountEvent,
11 NpcInteractEvent, ParryHookEvent, PoiseChangeEvent, PossessEvent, ProcessTradeActionEvent,
12 RegrowHeadEvent, RemoveLightEmitterEvent, RequestSiteInfoEvent, RespawnEvent,
13 SetBattleModeEvent, SetLanternEvent, SetPetStayEvent, ShockwaveEvent, ShootEvent, SoundEvent,
14 StartInteractionEvent, StartTeleportingEvent, SummonBeamPillarsEvent, TamePetEvent,
15 TeleportToEvent, TeleportToPositionEvent, ThrowEvent, ToggleSpriteLightEvent, TransformEvent,
16 UpdateCharacterDataEvent, UpdateMapMarkerEvent,
17};
18
19#[cfg(feature = "plugins")]
20pub use common::event::RequestPluginsEvent;
21
22macro_rules! server_events {
25 ($macro:ident) => {
26 $macro! {
27 ClientDisconnectEvent
28 ClientDisconnectWithoutPersistenceEvent
29 ChatEvent
30 CommandEvent
31 CreateSpecialEntityEvent
32 CreateNpcEvent
33 CreateNpcGroupEvent
34 CreateShipEvent
35 CreateItemDropEvent
36 CreateObjectEvent
37 ExplosionEvent
38 BonkEvent
39 HealthChangeEvent
40 KillEvent
41 HelpDownedEvent
42 DownedEvent
43 PoiseChangeEvent
44 DeleteEvent
45 DestroyEvent
46 InventoryManipEvent
47 GroupManipEvent
48 RespawnEvent
49 ShootEvent
50 ThrowEvent
51 ShockwaveEvent
52 KnockbackEvent
53 LandOnGroundEvent
54 SetLanternEvent
55 NpcInteractEvent
56 DialogueEvent
57 InviteResponseEvent
58 InitiateInviteEvent
59 ProcessTradeActionEvent
60 MountEvent
61 SetPetStayEvent
62 PossessEvent
63 InitializeCharacterEvent
64 InitializeSpectatorEvent
65 UpdateCharacterDataEvent
66 ExitIngameEvent
67 AuraEvent
68 BuffEvent
69 EnergyChangeEvent
70 ComboChangeEvent
71 ParryHookEvent
72 RequestSiteInfoEvent
73 MineBlockEvent
74 TeleportToEvent
75 SoundEvent
76 CreateSpriteEvent
77 TamePetEvent
78 EntityAttackedHookEvent
79 ChangeAbilityEvent
80 UpdateMapMarkerEvent
81 MakeAdminEvent
82 DeleteCharacterEvent
83 ChangeStanceEvent
84 ChangeBodyEvent
85 RemoveLightEmitterEvent
86 TeleportToPositionEvent
87 StartTeleportingEvent
88 ToggleSpriteLightEvent
89 TransformEvent
90 StartInteractionEvent
91 CreateAuraEntityEvent
92 RegrowHeadEvent
93 SetBattleModeEvent
94 SummonBeamPillarsEvent
95 ArcingEvent
96 }
97
98 #[cfg(feature = "plugins")]
99 $macro! {
100 RequestPluginsEvent
101 }
102 };
103}
104
105pub(crate) fn register_event_busses(ecs: &mut specs::World) {
106 macro_rules! register_events {
107 ($($event:ty)*) => {
108 $(
109 ecs.insert(EventBus::<$event>::default());
110 )*
111 };
112 }
113 server_events!(register_events);
114}
115
116#[cfg(debug_assertions)]
124pub(super) fn check_event_handlers(ecs: &mut specs::World) {
125 struct CheckedEventHandlers;
126 if ecs.get_mut::<CheckedEventHandlers>().is_some() {
127 return;
128 }
129 ecs.insert(CheckedEventHandlers);
130
131 fn not_consumed<T>() -> ! {
132 panic!("Server event not consumed: {}", core::any::type_name::<T>());
133 }
134 fn multiple_handlers<T>() -> ! {
135 panic!(
136 "Server event has multiple handlers, only the first will receive events: {}",
137 core::any::type_name::<T>()
138 );
139 }
140
141 macro_rules! check_events {
142 ($($event:ty)*) => {
143 $(
144 let recv_count = ecs.get_mut::<EventBus<$event>>().expect("event bus not registered").recv_count();
145 match recv_count {
146 0 => not_consumed::<$event>(),
147 1 => {},
148 _ => multiple_handlers::<$event>(),
149 }
150 )*
151 };
152 }
153 server_events!(check_events);
154}