1#![allow(async_fn_in_trait)]
3use crate::{event::EventContext, types, EventSubscriptions, Server};
4pub trait EventHandler: EventSubscriptions + Send + Sync {
5 async fn on_player_join(
7 &self,
8 _server: &Server,
9 _event: &mut EventContext<'_, types::PlayerJoinEvent>,
10 ) {
11 }
12 async fn on_player_quit(
14 &self,
15 _server: &Server,
16 _event: &mut EventContext<'_, types::PlayerQuitEvent>,
17 ) {
18 }
19 async fn on_player_move(
21 &self,
22 _server: &Server,
23 _event: &mut EventContext<'_, types::PlayerMoveEvent>,
24 ) {
25 }
26 async fn on_player_jump(
28 &self,
29 _server: &Server,
30 _event: &mut EventContext<'_, types::PlayerJumpEvent>,
31 ) {
32 }
33 async fn on_player_teleport(
35 &self,
36 _server: &Server,
37 _event: &mut EventContext<'_, types::PlayerTeleportEvent>,
38 ) {
39 }
40 async fn on_player_change_world(
42 &self,
43 _server: &Server,
44 _event: &mut EventContext<'_, types::PlayerChangeWorldEvent>,
45 ) {
46 }
47 async fn on_player_toggle_sprint(
49 &self,
50 _server: &Server,
51 _event: &mut EventContext<'_, types::PlayerToggleSprintEvent>,
52 ) {
53 }
54 async fn on_player_toggle_sneak(
56 &self,
57 _server: &Server,
58 _event: &mut EventContext<'_, types::PlayerToggleSneakEvent>,
59 ) {
60 }
61 async fn on_chat(&self, _server: &Server, _event: &mut EventContext<'_, types::ChatEvent>) {}
63 async fn on_player_food_loss(
65 &self,
66 _server: &Server,
67 _event: &mut EventContext<'_, types::PlayerFoodLossEvent>,
68 ) {
69 }
70 async fn on_player_heal(
72 &self,
73 _server: &Server,
74 _event: &mut EventContext<'_, types::PlayerHealEvent>,
75 ) {
76 }
77 async fn on_player_hurt(
79 &self,
80 _server: &Server,
81 _event: &mut EventContext<'_, types::PlayerHurtEvent>,
82 ) {
83 }
84 async fn on_player_death(
86 &self,
87 _server: &Server,
88 _event: &mut EventContext<'_, types::PlayerDeathEvent>,
89 ) {
90 }
91 async fn on_player_respawn(
93 &self,
94 _server: &Server,
95 _event: &mut EventContext<'_, types::PlayerRespawnEvent>,
96 ) {
97 }
98 async fn on_player_skin_change(
100 &self,
101 _server: &Server,
102 _event: &mut EventContext<'_, types::PlayerSkinChangeEvent>,
103 ) {
104 }
105 async fn on_player_fire_extinguish(
107 &self,
108 _server: &Server,
109 _event: &mut EventContext<'_, types::PlayerFireExtinguishEvent>,
110 ) {
111 }
112 async fn on_player_start_break(
114 &self,
115 _server: &Server,
116 _event: &mut EventContext<'_, types::PlayerStartBreakEvent>,
117 ) {
118 }
119 async fn on_block_break(
121 &self,
122 _server: &Server,
123 _event: &mut EventContext<'_, types::BlockBreakEvent>,
124 ) {
125 }
126 async fn on_player_block_place(
128 &self,
129 _server: &Server,
130 _event: &mut EventContext<'_, types::PlayerBlockPlaceEvent>,
131 ) {
132 }
133 async fn on_player_block_pick(
135 &self,
136 _server: &Server,
137 _event: &mut EventContext<'_, types::PlayerBlockPickEvent>,
138 ) {
139 }
140 async fn on_player_item_use(
142 &self,
143 _server: &Server,
144 _event: &mut EventContext<'_, types::PlayerItemUseEvent>,
145 ) {
146 }
147 async fn on_player_item_use_on_block(
149 &self,
150 _server: &Server,
151 _event: &mut EventContext<'_, types::PlayerItemUseOnBlockEvent>,
152 ) {
153 }
154 async fn on_player_item_use_on_entity(
156 &self,
157 _server: &Server,
158 _event: &mut EventContext<'_, types::PlayerItemUseOnEntityEvent>,
159 ) {
160 }
161 async fn on_player_item_release(
163 &self,
164 _server: &Server,
165 _event: &mut EventContext<'_, types::PlayerItemReleaseEvent>,
166 ) {
167 }
168 async fn on_player_item_consume(
170 &self,
171 _server: &Server,
172 _event: &mut EventContext<'_, types::PlayerItemConsumeEvent>,
173 ) {
174 }
175 async fn on_player_attack_entity(
177 &self,
178 _server: &Server,
179 _event: &mut EventContext<'_, types::PlayerAttackEntityEvent>,
180 ) {
181 }
182 async fn on_player_experience_gain(
184 &self,
185 _server: &Server,
186 _event: &mut EventContext<'_, types::PlayerExperienceGainEvent>,
187 ) {
188 }
189 async fn on_player_punch_air(
191 &self,
192 _server: &Server,
193 _event: &mut EventContext<'_, types::PlayerPunchAirEvent>,
194 ) {
195 }
196 async fn on_player_sign_edit(
198 &self,
199 _server: &Server,
200 _event: &mut EventContext<'_, types::PlayerSignEditEvent>,
201 ) {
202 }
203 async fn on_player_lectern_page_turn(
205 &self,
206 _server: &Server,
207 _event: &mut EventContext<'_, types::PlayerLecternPageTurnEvent>,
208 ) {
209 }
210 async fn on_player_item_damage(
212 &self,
213 _server: &Server,
214 _event: &mut EventContext<'_, types::PlayerItemDamageEvent>,
215 ) {
216 }
217 async fn on_player_item_pickup(
219 &self,
220 _server: &Server,
221 _event: &mut EventContext<'_, types::PlayerItemPickupEvent>,
222 ) {
223 }
224 async fn on_player_held_slot_change(
226 &self,
227 _server: &Server,
228 _event: &mut EventContext<'_, types::PlayerHeldSlotChangeEvent>,
229 ) {
230 }
231 async fn on_player_item_drop(
233 &self,
234 _server: &Server,
235 _event: &mut EventContext<'_, types::PlayerItemDropEvent>,
236 ) {
237 }
238 async fn on_player_transfer(
240 &self,
241 _server: &Server,
242 _event: &mut EventContext<'_, types::PlayerTransferEvent>,
243 ) {
244 }
245 async fn on_command(
247 &self,
248 _server: &Server,
249 _event: &mut EventContext<'_, types::CommandEvent>,
250 ) {
251 }
252 async fn on_player_diagnostics(
254 &self,
255 _server: &Server,
256 _event: &mut EventContext<'_, types::PlayerDiagnosticsEvent>,
257 ) {
258 }
259 async fn on_world_liquid_flow(
261 &self,
262 _server: &Server,
263 _event: &mut EventContext<'_, types::WorldLiquidFlowEvent>,
264 ) {
265 }
266 async fn on_world_liquid_decay(
268 &self,
269 _server: &Server,
270 _event: &mut EventContext<'_, types::WorldLiquidDecayEvent>,
271 ) {
272 }
273 async fn on_world_liquid_harden(
275 &self,
276 _server: &Server,
277 _event: &mut EventContext<'_, types::WorldLiquidHardenEvent>,
278 ) {
279 }
280 async fn on_world_sound(
282 &self,
283 _server: &Server,
284 _event: &mut EventContext<'_, types::WorldSoundEvent>,
285 ) {
286 }
287 async fn on_world_fire_spread(
289 &self,
290 _server: &Server,
291 _event: &mut EventContext<'_, types::WorldFireSpreadEvent>,
292 ) {
293 }
294 async fn on_world_block_burn(
296 &self,
297 _server: &Server,
298 _event: &mut EventContext<'_, types::WorldBlockBurnEvent>,
299 ) {
300 }
301 async fn on_world_crop_trample(
303 &self,
304 _server: &Server,
305 _event: &mut EventContext<'_, types::WorldCropTrampleEvent>,
306 ) {
307 }
308 async fn on_world_leaves_decay(
310 &self,
311 _server: &Server,
312 _event: &mut EventContext<'_, types::WorldLeavesDecayEvent>,
313 ) {
314 }
315 async fn on_world_entity_spawn(
317 &self,
318 _server: &Server,
319 _event: &mut EventContext<'_, types::WorldEntitySpawnEvent>,
320 ) {
321 }
322 async fn on_world_entity_despawn(
324 &self,
325 _server: &Server,
326 _event: &mut EventContext<'_, types::WorldEntityDespawnEvent>,
327 ) {
328 }
329 async fn on_world_explosion(
331 &self,
332 _server: &Server,
333 _event: &mut EventContext<'_, types::WorldExplosionEvent>,
334 ) {
335 }
336 async fn on_world_close(
338 &self,
339 _server: &Server,
340 _event: &mut EventContext<'_, types::WorldCloseEvent>,
341 ) {
342 }
343}
344#[doc(hidden)]
345pub async fn dispatch_event(
346 server: &Server,
347 handler: &impl EventHandler,
348 envelope: &types::EventEnvelope,
349) {
350 let Some(payload) = &envelope.payload else {
351 return;
352 };
353 match payload {
354 types::event_envelope::Payload::PlayerJoin(e) => {
355 let mut context = EventContext::new(&envelope.event_id, e);
356 handler.on_player_join(server, &mut context).await;
357 server.send_event_result(context).await.ok();
358 }
359 types::event_envelope::Payload::PlayerQuit(e) => {
360 let mut context = EventContext::new(&envelope.event_id, e);
361 handler.on_player_quit(server, &mut context).await;
362 server.send_event_result(context).await.ok();
363 }
364 types::event_envelope::Payload::PlayerMove(e) => {
365 let mut context = EventContext::new(&envelope.event_id, e);
366 handler.on_player_move(server, &mut context).await;
367 server.send_event_result(context).await.ok();
368 }
369 types::event_envelope::Payload::PlayerJump(e) => {
370 let mut context = EventContext::new(&envelope.event_id, e);
371 handler.on_player_jump(server, &mut context).await;
372 server.send_event_result(context).await.ok();
373 }
374 types::event_envelope::Payload::PlayerTeleport(e) => {
375 let mut context = EventContext::new(&envelope.event_id, e);
376 handler.on_player_teleport(server, &mut context).await;
377 server.send_event_result(context).await.ok();
378 }
379 types::event_envelope::Payload::PlayerChangeWorld(e) => {
380 let mut context = EventContext::new(&envelope.event_id, e);
381 handler.on_player_change_world(server, &mut context).await;
382 server.send_event_result(context).await.ok();
383 }
384 types::event_envelope::Payload::PlayerToggleSprint(e) => {
385 let mut context = EventContext::new(&envelope.event_id, e);
386 handler.on_player_toggle_sprint(server, &mut context).await;
387 server.send_event_result(context).await.ok();
388 }
389 types::event_envelope::Payload::PlayerToggleSneak(e) => {
390 let mut context = EventContext::new(&envelope.event_id, e);
391 handler.on_player_toggle_sneak(server, &mut context).await;
392 server.send_event_result(context).await.ok();
393 }
394 types::event_envelope::Payload::Chat(e) => {
395 let mut context = EventContext::new(&envelope.event_id, e);
396 handler.on_chat(server, &mut context).await;
397 server.send_event_result(context).await.ok();
398 }
399 types::event_envelope::Payload::PlayerFoodLoss(e) => {
400 let mut context = EventContext::new(&envelope.event_id, e);
401 handler.on_player_food_loss(server, &mut context).await;
402 server.send_event_result(context).await.ok();
403 }
404 types::event_envelope::Payload::PlayerHeal(e) => {
405 let mut context = EventContext::new(&envelope.event_id, e);
406 handler.on_player_heal(server, &mut context).await;
407 server.send_event_result(context).await.ok();
408 }
409 types::event_envelope::Payload::PlayerHurt(e) => {
410 let mut context = EventContext::new(&envelope.event_id, e);
411 handler.on_player_hurt(server, &mut context).await;
412 server.send_event_result(context).await.ok();
413 }
414 types::event_envelope::Payload::PlayerDeath(e) => {
415 let mut context = EventContext::new(&envelope.event_id, e);
416 handler.on_player_death(server, &mut context).await;
417 server.send_event_result(context).await.ok();
418 }
419 types::event_envelope::Payload::PlayerRespawn(e) => {
420 let mut context = EventContext::new(&envelope.event_id, e);
421 handler.on_player_respawn(server, &mut context).await;
422 server.send_event_result(context).await.ok();
423 }
424 types::event_envelope::Payload::PlayerSkinChange(e) => {
425 let mut context = EventContext::new(&envelope.event_id, e);
426 handler.on_player_skin_change(server, &mut context).await;
427 server.send_event_result(context).await.ok();
428 }
429 types::event_envelope::Payload::PlayerFireExtinguish(e) => {
430 let mut context = EventContext::new(&envelope.event_id, e);
431 handler
432 .on_player_fire_extinguish(server, &mut context)
433 .await;
434 server.send_event_result(context).await.ok();
435 }
436 types::event_envelope::Payload::PlayerStartBreak(e) => {
437 let mut context = EventContext::new(&envelope.event_id, e);
438 handler.on_player_start_break(server, &mut context).await;
439 server.send_event_result(context).await.ok();
440 }
441 types::event_envelope::Payload::BlockBreak(e) => {
442 let mut context = EventContext::new(&envelope.event_id, e);
443 handler.on_block_break(server, &mut context).await;
444 server.send_event_result(context).await.ok();
445 }
446 types::event_envelope::Payload::PlayerBlockPlace(e) => {
447 let mut context = EventContext::new(&envelope.event_id, e);
448 handler.on_player_block_place(server, &mut context).await;
449 server.send_event_result(context).await.ok();
450 }
451 types::event_envelope::Payload::PlayerBlockPick(e) => {
452 let mut context = EventContext::new(&envelope.event_id, e);
453 handler.on_player_block_pick(server, &mut context).await;
454 server.send_event_result(context).await.ok();
455 }
456 types::event_envelope::Payload::PlayerItemUse(e) => {
457 let mut context = EventContext::new(&envelope.event_id, e);
458 handler.on_player_item_use(server, &mut context).await;
459 server.send_event_result(context).await.ok();
460 }
461 types::event_envelope::Payload::PlayerItemUseOnBlock(e) => {
462 let mut context = EventContext::new(&envelope.event_id, e);
463 handler
464 .on_player_item_use_on_block(server, &mut context)
465 .await;
466 server.send_event_result(context).await.ok();
467 }
468 types::event_envelope::Payload::PlayerItemUseOnEntity(e) => {
469 let mut context = EventContext::new(&envelope.event_id, e);
470 handler
471 .on_player_item_use_on_entity(server, &mut context)
472 .await;
473 server.send_event_result(context).await.ok();
474 }
475 types::event_envelope::Payload::PlayerItemRelease(e) => {
476 let mut context = EventContext::new(&envelope.event_id, e);
477 handler.on_player_item_release(server, &mut context).await;
478 server.send_event_result(context).await.ok();
479 }
480 types::event_envelope::Payload::PlayerItemConsume(e) => {
481 let mut context = EventContext::new(&envelope.event_id, e);
482 handler.on_player_item_consume(server, &mut context).await;
483 server.send_event_result(context).await.ok();
484 }
485 types::event_envelope::Payload::PlayerAttackEntity(e) => {
486 let mut context = EventContext::new(&envelope.event_id, e);
487 handler.on_player_attack_entity(server, &mut context).await;
488 server.send_event_result(context).await.ok();
489 }
490 types::event_envelope::Payload::PlayerExperienceGain(e) => {
491 let mut context = EventContext::new(&envelope.event_id, e);
492 handler
493 .on_player_experience_gain(server, &mut context)
494 .await;
495 server.send_event_result(context).await.ok();
496 }
497 types::event_envelope::Payload::PlayerPunchAir(e) => {
498 let mut context = EventContext::new(&envelope.event_id, e);
499 handler.on_player_punch_air(server, &mut context).await;
500 server.send_event_result(context).await.ok();
501 }
502 types::event_envelope::Payload::PlayerSignEdit(e) => {
503 let mut context = EventContext::new(&envelope.event_id, e);
504 handler.on_player_sign_edit(server, &mut context).await;
505 server.send_event_result(context).await.ok();
506 }
507 types::event_envelope::Payload::PlayerLecternPageTurn(e) => {
508 let mut context = EventContext::new(&envelope.event_id, e);
509 handler
510 .on_player_lectern_page_turn(server, &mut context)
511 .await;
512 server.send_event_result(context).await.ok();
513 }
514 types::event_envelope::Payload::PlayerItemDamage(e) => {
515 let mut context = EventContext::new(&envelope.event_id, e);
516 handler.on_player_item_damage(server, &mut context).await;
517 server.send_event_result(context).await.ok();
518 }
519 types::event_envelope::Payload::PlayerItemPickup(e) => {
520 let mut context = EventContext::new(&envelope.event_id, e);
521 handler.on_player_item_pickup(server, &mut context).await;
522 server.send_event_result(context).await.ok();
523 }
524 types::event_envelope::Payload::PlayerHeldSlotChange(e) => {
525 let mut context = EventContext::new(&envelope.event_id, e);
526 handler
527 .on_player_held_slot_change(server, &mut context)
528 .await;
529 server.send_event_result(context).await.ok();
530 }
531 types::event_envelope::Payload::PlayerItemDrop(e) => {
532 let mut context = EventContext::new(&envelope.event_id, e);
533 handler.on_player_item_drop(server, &mut context).await;
534 server.send_event_result(context).await.ok();
535 }
536 types::event_envelope::Payload::PlayerTransfer(e) => {
537 let mut context = EventContext::new(&envelope.event_id, e);
538 handler.on_player_transfer(server, &mut context).await;
539 server.send_event_result(context).await.ok();
540 }
541 types::event_envelope::Payload::Command(e) => {
542 let mut context = EventContext::new(&envelope.event_id, e);
543 handler.on_command(server, &mut context).await;
544 server.send_event_result(context).await.ok();
545 }
546 types::event_envelope::Payload::PlayerDiagnostics(e) => {
547 let mut context = EventContext::new(&envelope.event_id, e);
548 handler.on_player_diagnostics(server, &mut context).await;
549 server.send_event_result(context).await.ok();
550 }
551 types::event_envelope::Payload::WorldLiquidFlow(e) => {
552 let mut context = EventContext::new(&envelope.event_id, e);
553 handler.on_world_liquid_flow(server, &mut context).await;
554 server.send_event_result(context).await.ok();
555 }
556 types::event_envelope::Payload::WorldLiquidDecay(e) => {
557 let mut context = EventContext::new(&envelope.event_id, e);
558 handler.on_world_liquid_decay(server, &mut context).await;
559 server.send_event_result(context).await.ok();
560 }
561 types::event_envelope::Payload::WorldLiquidHarden(e) => {
562 let mut context = EventContext::new(&envelope.event_id, e);
563 handler.on_world_liquid_harden(server, &mut context).await;
564 server.send_event_result(context).await.ok();
565 }
566 types::event_envelope::Payload::WorldSound(e) => {
567 let mut context = EventContext::new(&envelope.event_id, e);
568 handler.on_world_sound(server, &mut context).await;
569 server.send_event_result(context).await.ok();
570 }
571 types::event_envelope::Payload::WorldFireSpread(e) => {
572 let mut context = EventContext::new(&envelope.event_id, e);
573 handler.on_world_fire_spread(server, &mut context).await;
574 server.send_event_result(context).await.ok();
575 }
576 types::event_envelope::Payload::WorldBlockBurn(e) => {
577 let mut context = EventContext::new(&envelope.event_id, e);
578 handler.on_world_block_burn(server, &mut context).await;
579 server.send_event_result(context).await.ok();
580 }
581 types::event_envelope::Payload::WorldCropTrample(e) => {
582 let mut context = EventContext::new(&envelope.event_id, e);
583 handler.on_world_crop_trample(server, &mut context).await;
584 server.send_event_result(context).await.ok();
585 }
586 types::event_envelope::Payload::WorldLeavesDecay(e) => {
587 let mut context = EventContext::new(&envelope.event_id, e);
588 handler.on_world_leaves_decay(server, &mut context).await;
589 server.send_event_result(context).await.ok();
590 }
591 types::event_envelope::Payload::WorldEntitySpawn(e) => {
592 let mut context = EventContext::new(&envelope.event_id, e);
593 handler.on_world_entity_spawn(server, &mut context).await;
594 server.send_event_result(context).await.ok();
595 }
596 types::event_envelope::Payload::WorldEntityDespawn(e) => {
597 let mut context = EventContext::new(&envelope.event_id, e);
598 handler.on_world_entity_despawn(server, &mut context).await;
599 server.send_event_result(context).await.ok();
600 }
601 types::event_envelope::Payload::WorldExplosion(e) => {
602 let mut context = EventContext::new(&envelope.event_id, e);
603 handler.on_world_explosion(server, &mut context).await;
604 server.send_event_result(context).await.ok();
605 }
606 types::event_envelope::Payload::WorldClose(e) => {
607 let mut context = EventContext::new(&envelope.event_id, e);
608 handler.on_world_close(server, &mut context).await;
609 server.send_event_result(context).await.ok();
610 }
611 }
612}