Classes with event handlers must implement the Listener interface.
Without implementing Listener, your event handlers will not be recognized by PocketMine-MP.
Incorrect:
use pocketmine\event\player\PlayerJoinEvent;class MyEventHandler { public function onJoin(PlayerJoinEvent $event): void { // This will never be called - missing Listener interface }}
Correct:
use pocketmine\event\Listener;use pocketmine\event\player\PlayerJoinEvent;class MyEventHandler implements Listener { public function onJoin(PlayerJoinEvent $event): void { // Now this will work }}
Listeners must be registered with the server’s plugin manager to receive events.
This check may produce false positives if registration happens dynamically or in external classes.
Missing registration:
class Main extends PluginBase { public function onEnable(): void { // Listener exists but is never registered // Events won't be received! }}
Correct registration:
class Main extends PluginBase { public function onEnable(): void { // Register the listener $this->getServer()->getPluginManager()->registerEvents( new MyEventHandler($this), $this ); }}
class Main extends PluginBase implements Listener { public function onEnable(): void { // Main class is also a listener $this->getServer()->getPluginManager()->registerEvents( $this, $this ); } public function onPlayerJoin(PlayerJoinEvent $event): void { // Event handler in main class }}
use pocketmine\plugin\PluginBase;use pocketmine\event\Listener;use pocketmine\event\player\PlayerJoinEvent;use pocketmine\event\player\PlayerQuitEvent;// Listener classclass PlayerListener implements Listener { private Main $plugin; public function __construct(Main $plugin) { $this->plugin = $plugin; } public function onJoin(PlayerJoinEvent $event): void { $event->setJoinMessage("Welcome " . $event->getPlayer()->getName()); } public function onQuit(PlayerQuitEvent $event): void { $event->setQuitMessage($event->getPlayer()->getName() . " left"); }}// Main classclass Main extends PluginBase { public function onEnable(): void { // Register the listener $this->getServer()->getPluginManager()->registerEvents( new PlayerListener($this), $this ); }}