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