pumpkinplus/modules/mechanics/player/
messages.rs1use crate::config::ConfigManager;
19use crate::mechanics::mechanic::Mechanic;
20use pumpkin_plugin_api::events::{
21 EventData, EventHandler, EventPriority, PlayerJoinEvent, PlayerLeaveEvent, PlayerLoginEvent,
22};
23use pumpkin_plugin_api::{Context, Server, text::TextComponent};
24use serde::{Deserialize, Serialize};
25
26#[derive(Default)]
28pub struct Messages;
29
30impl Mechanic for Messages {
31 fn enabled(&self) -> bool {
32 ConfigManager::get()
33 .map(|cm| cm.get_config::<MessagesConfig>().enabled)
34 .unwrap_or(true)
35 }
36
37 fn events(&self, context: &Context) {
38 context
39 .register_event_handler::<PlayerJoinEvent, _>(Messages, EventPriority::Highest, true)
40 .expect("failed to register join event handler");
41 context
42 .register_event_handler::<PlayerLeaveEvent, _>(Messages, EventPriority::Highest, true)
43 .expect("failed to register leave event handler");
44 context
45 .register_event_handler::<PlayerLoginEvent, _>(Messages, EventPriority::Highest, true)
46 .expect("failed to register login event handler");
47 }
48}
49
50impl EventHandler<PlayerJoinEvent> for Messages {
51 fn handle(
52 &self,
53 _server: Server,
54 mut event: EventData<PlayerJoinEvent>,
55 ) -> EventData<PlayerJoinEvent> {
56 let config: MessagesConfig = ConfigManager::get()
57 .map(|cm| cm.get_config())
58 .unwrap_or_default();
59 if config.join_msg.is_empty() {
60 return event;
61 }
62 let name = event.player.get_display_name().get_text();
63 event.join_message =
64 TextComponent::text(config.join_msg.replace("{player}", &name).as_str());
65 event
66 }
67}
68
69impl EventHandler<PlayerLeaveEvent> for Messages {
70 fn handle(
71 &self,
72 _server: Server,
73 mut event: EventData<PlayerLeaveEvent>,
74 ) -> EventData<PlayerLeaveEvent> {
75 let config: MessagesConfig = ConfigManager::get()
76 .map(|cm| cm.get_config())
77 .unwrap_or_default();
78 if config.leave_msg.is_empty() {
79 return event;
80 }
81 let name = event.player.get_display_name().get_text();
82 event.leave_message =
83 TextComponent::text(config.leave_msg.replace("{player}", &name).as_str());
84 event
85 }
86}
87
88impl EventHandler<PlayerLoginEvent> for Messages {
89 fn handle(
90 &self,
91 _server: Server,
92 mut event: EventData<PlayerLoginEvent>,
93 ) -> EventData<PlayerLoginEvent> {
94 let config: MessagesConfig = ConfigManager::get()
95 .map(|cm| cm.get_config())
96 .unwrap_or_default();
97 if config.kick_msg.is_empty() {
98 return event;
99 }
100 let name = event.player.get_display_name().get_text();
101 event.kick_message =
102 TextComponent::text(config.kick_msg.replace("{player}", &name).as_str());
103 event
104 }
105}
106
107#[derive(Debug, Clone, Default, Serialize, Deserialize)]
109pub struct MessagesConfig {
110 pub enabled: bool,
112 pub join_msg: String,
114 pub leave_msg: String,
116 pub kick_msg: String,
118}