diff --git a/rust/src/events/join.rs b/rust/src/events/join.rs new file mode 100644 index 0000000..055f6fa --- /dev/null +++ b/rust/src/events/join.rs @@ -0,0 +1,25 @@ +use std::sync::Arc; + +use pumpkin::{ + plugin::{BoxFuture, EventHandler, player::player_join::PlayerJoinEvent}, + server::Server, +}; +use pumpkin_api_macros::with_runtime; +use pumpkin_util::text::{TextComponent, color::NamedColor}; + +pub struct PatchBukkitJoinHandler; + +#[with_runtime(global)] +impl EventHandler for PatchBukkitJoinHandler { + fn handle_blocking<'a>( + &self, + _server: &Arc, + event: &'a mut PlayerJoinEvent, + ) -> BoxFuture<'a, ()> { + Box::pin(async { + event.join_message = + TextComponent::text(format!("Welcome, {}!", event.player.gameprofile.name)) + .color_named(NamedColor::Green); + }) + } +} diff --git a/rust/src/events/mod.rs b/rust/src/events/mod.rs new file mode 100644 index 0000000..4339eb5 --- /dev/null +++ b/rust/src/events/mod.rs @@ -0,0 +1,17 @@ +use std::sync::Arc; + +use pumpkin::plugin::{Context, EventPriority}; + +use crate::events::join::PatchBukkitJoinHandler; + +pub mod join; + +pub async fn register_handlers(server: &Arc) { + server + .register_event( + Arc::new(PatchBukkitJoinHandler), + EventPriority::Highest, + true, + ) + .await; +} diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 8075ce2..98fc300 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -6,6 +6,7 @@ use pumpkin_api_macros::{plugin_impl, plugin_method}; pub mod config; pub mod directories; +pub mod events; pub mod java; pub mod plugin; @@ -16,12 +17,16 @@ use java::{ resources::{cleanup_stale_files, sync_embedded_resources}, }; -use crate::{java::jar::read_configs_from_jar, plugin::manager::PluginManager}; +use crate::{ + events::register_handlers, java::jar::read_configs_from_jar, plugin::manager::PluginManager, +}; async fn on_load_inner(plugin: &mut PatchBukkitPlugin, server: Arc) -> Result<(), String> { server.init_log(); log::info!("Starting PatchBukkit"); + register_handlers(&server).await; + // Setup directories let dirs = setup_directories(&server)?;