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, CreatePoolEvent, CreateShipEvent,
6 CreateSpecialEntityEvent, CreateSpriteEvent, DeleteCharacterEvent, DeleteEvent, DestroyEvent,
7 DialogueEvent, DownedEvent, EnergyChangeEvent, EntityAttackedHookEvent, EventBus,
8 ExitIngameEvent, ExplosionEvent, GroupManipEvent, HealthChangeEvent, HelpDownedEvent,
9 InitializeCharacterEvent, InitializeSpectatorEvent, InitiateInviteEvent, InventoryManipEvent,
10 InviteResponseEvent, KillEvent, KnockbackEvent, LandOnGroundEvent, MakeAdminEvent,
11 MineBlockEvent, MountEvent, NpcInteractEvent, ParryHookEvent, PoiseChangeEvent, PossessEvent,
12 ProcessTradeActionEvent, RegrowHeadEvent, RemoveLightEmitterEvent, RequestSiteInfoEvent,
13 RespawnEvent, SetBattleModeEvent, SetLanternEvent, SetPetStayEvent, ShockwaveEvent, ShootEvent,
14 SoundEvent, 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 CreatePoolEvent
97 }
98
99 #[cfg(feature = "plugins")]
100 $macro! {
101 RequestPluginsEvent
102 }
103 };
104}
105
106pub(crate) fn register_event_busses(ecs: &mut specs::World) {
107 macro_rules! register_events {
108 ($($event:ty)*) => {
109 $(
110 ecs.insert(EventBus::<$event>::default());
111 )*
112 };
113 }
114 server_events!(register_events);
115}
116
117#[cfg(debug_assertions)]
125pub(super) fn check_event_handlers(ecs: &mut specs::World) {
126 struct CheckedEventHandlers;
127 if ecs.get_mut::<CheckedEventHandlers>().is_some() {
128 return;
129 }
130 ecs.insert(CheckedEventHandlers);
131
132 fn not_consumed<T>() -> ! {
133 panic!("Server event not consumed: {}", core::any::type_name::<T>());
134 }
135 fn multiple_handlers<T>() -> ! {
136 panic!(
137 "Server event has multiple handlers, only the first will receive events: {}",
138 core::any::type_name::<T>()
139 );
140 }
141
142 macro_rules! check_events {
143 ($($event:ty)*) => {
144 $(
145 let recv_count = ecs.get_mut::<EventBus<$event>>().expect("event bus not registered").recv_count();
146 match recv_count {
147 0 => not_consumed::<$event>(),
148 1 => {},
149 _ => multiple_handlers::<$event>(),
150 }
151 )*
152 };
153 }
154 server_events!(check_events);
155}