PluginManager: Track enabled plugins in a separate array

This commit is contained in:
Dylan K. Taylor 2018-06-13 16:54:04 +01:00
parent 763e20ba4e
commit 0ff6b7b572

View File

@ -56,6 +56,11 @@ class PluginManager{
*/ */
protected $plugins = []; protected $plugins = [];
/**
* @var Plugin[]
*/
protected $enabledPlugins = [];
/** /**
* @var Permission[] * @var Permission[]
*/ */
@ -610,6 +615,8 @@ class PluginManager{
$plugin->getScheduler()->setEnabled(true); $plugin->getScheduler()->setEnabled(true);
$plugin->setEnabled(true); $plugin->setEnabled(true);
$this->enabledPlugins[$plugin->getDescription()->getName()] = $plugin;
$this->server->getPluginManager()->callEvent(new PluginEnableEvent($plugin)); $this->server->getPluginManager()->callEvent(new PluginEnableEvent($plugin));
}catch(\Throwable $e){ }catch(\Throwable $e){
$this->server->getLogger()->logException($e); $this->server->getLogger()->logException($e);
@ -689,6 +696,8 @@ class PluginManager{
$this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.disable", [$plugin->getDescription()->getFullName()])); $this->server->getLogger()->info($this->server->getLanguage()->translateString("pocketmine.plugin.disable", [$plugin->getDescription()->getFullName()]));
$this->callEvent(new PluginDisableEvent($plugin)); $this->callEvent(new PluginDisableEvent($plugin));
unset($this->enabledPlugins[$plugin->getDescription()->getName()]);
try{ try{
$plugin->setEnabled(false); $plugin->setEnabled(false);
}catch(\Throwable $e){ }catch(\Throwable $e){
@ -703,16 +712,15 @@ class PluginManager{
} }
public function tickSchedulers(int $currentTick) : void{ public function tickSchedulers(int $currentTick) : void{
foreach($this->plugins as $p){ foreach($this->enabledPlugins as $p){
if($p->isEnabled()){ $p->getScheduler()->mainThreadHeartbeat($currentTick);
$p->getScheduler()->mainThreadHeartbeat($currentTick);
}
} }
} }
public function clearPlugins(){ public function clearPlugins(){
$this->disablePlugins(); $this->disablePlugins();
$this->plugins = []; $this->plugins = [];
$this->enabledPlugins = [];
$this->fileAssociations = []; $this->fileAssociations = [];
$this->permissions = []; $this->permissions = [];
$this->defaultPerms = []; $this->defaultPerms = [];