mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-09-08 10:53:05 +00:00
Removed global ServerScheduler - plugins now get their own isolated schedulers
This change breaks pretty much all API pertaining to synchronous task scheduling. Significant changes: - Server->getScheduler() has been removed - Plugin->getScheduler() has been added - every plugin now has its own scheduler - Because schedulers are now per-plugin, it is now unnecessary for PluginTask to exist because stopping plugin tasks on plugin disable is as simple as destroying the plugin's scheduler. Therefore PluginTask has now been removed and it is expected for things to now use the base Task class instead. For the most part, plugins will simply need to change Plugin->getServer()->getScheduler()->... to Plugin->getScheduler()->... Another highlight is that plugin tasks now no longer have global IDs - they are unique to each scheduler.
This commit is contained in:
@ -27,6 +27,7 @@ declare(strict_types=1);
|
||||
namespace pocketmine\plugin;
|
||||
|
||||
use pocketmine\command\CommandExecutor;
|
||||
use pocketmine\scheduler\TaskScheduler;
|
||||
use pocketmine\Server;
|
||||
use pocketmine\utils\Config;
|
||||
|
||||
@ -136,4 +137,9 @@ interface Plugin extends CommandExecutor{
|
||||
*/
|
||||
public function getPluginLoader();
|
||||
|
||||
/**
|
||||
* @return TaskScheduler
|
||||
*/
|
||||
public function getScheduler() : TaskScheduler;
|
||||
|
||||
}
|
||||
|
@ -26,6 +26,7 @@ namespace pocketmine\plugin;
|
||||
use pocketmine\command\Command;
|
||||
use pocketmine\command\CommandSender;
|
||||
use pocketmine\command\PluginIdentifiableCommand;
|
||||
use pocketmine\scheduler\TaskScheduler;
|
||||
use pocketmine\Server;
|
||||
use pocketmine\utils\Config;
|
||||
|
||||
@ -58,6 +59,9 @@ abstract class PluginBase implements Plugin{
|
||||
/** @var PluginLogger */
|
||||
private $logger;
|
||||
|
||||
/** @var TaskScheduler */
|
||||
private $scheduler;
|
||||
|
||||
/**
|
||||
* Called when the plugin is loaded, before calling onEnable()
|
||||
*/
|
||||
@ -119,6 +123,7 @@ abstract class PluginBase implements Plugin{
|
||||
$this->file = rtrim($file, "\\/") . "/";
|
||||
$this->configFile = $this->dataFolder . "config.yml";
|
||||
$this->logger = new PluginLogger($this);
|
||||
$this->scheduler = new TaskScheduler($this->logger);
|
||||
}
|
||||
}
|
||||
|
||||
@ -305,4 +310,10 @@ abstract class PluginBase implements Plugin{
|
||||
return $this->loader;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return TaskScheduler
|
||||
*/
|
||||
public function getScheduler() : TaskScheduler{
|
||||
return $this->scheduler;
|
||||
}
|
||||
}
|
||||
|
@ -657,7 +657,7 @@ class PluginManager{
|
||||
$this->server->getLogger()->logException($e);
|
||||
}
|
||||
|
||||
$this->server->getScheduler()->cancelTasks($plugin);
|
||||
$plugin->getScheduler()->shutdown();
|
||||
HandlerList::unregisterAll($plugin);
|
||||
foreach($plugin->getDescription()->getPermissions() as $perm){
|
||||
$this->removePermission($perm);
|
||||
@ -665,6 +665,14 @@ class PluginManager{
|
||||
}
|
||||
}
|
||||
|
||||
public function tickSchedulers(int $currentTick) : void{
|
||||
foreach($this->plugins as $p){
|
||||
if($p->isEnabled()){
|
||||
$p->getScheduler()->mainThreadHeartbeat($currentTick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function clearPlugins(){
|
||||
$this->disablePlugins();
|
||||
$this->plugins = [];
|
||||
|
Reference in New Issue
Block a user