Skip to content

Instantly share code, notes, and snippets.

@TheNewHEROBRINEX
Last active March 28, 2021 08:29
Show Gist options
  • Save TheNewHEROBRINEX/c48a37f36ea8bb311bf3f6f4e1536e26 to your computer and use it in GitHub Desktop.
Save TheNewHEROBRINEX/c48a37f36ea8bb311bf3f6f4e1536e26 to your computer and use it in GitHub Desktop.
Function to dynamically register event listeners in a PocketMine-MP plugin.
<?php
public function registerEventListeners() : void{
/** @var \SplFileInfo $file */
foreach(new RegexIterator(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__ . DIRECTORY_SEPARATOR . 'listener')), '/^.+Listener\.php$/') as $file){
/** @phpstan-var class-string<ListenerBase> $classFullName */
$classFullName = str_replace(DIRECTORY_SEPARATOR, '\\', substr($file->getPath(), strlen($this->getFile() . 'src' . DIRECTORY_SEPARATOR))) . '\\' . $file->getBasename('.php');
$eventListenerClass = new ReflectionClass($classFullName);
if(!$eventListenerClass->isAbstract()){
/** @var ListenerBase $eventListenerInstance */
$eventListenerInstance = $eventListenerClass->newInstance($this);
$this->getServer()->getPluginManager()->registerEvents($eventListenerInstance, $this);
$this->getLogger()->debug("Registered event listener " . get_class($eventListenerInstance));
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment