/** * Install a $plugin on $server * * @param GameServer $server * @param Plugin $plugin * @return GameServer|null */ public function installPlugin(GameServer $server, Plugin $plugin) { /** @var ResourceEvent $event */ $event = $this->dispatchEvent('pre_install_plugin', new ResourceEvent($server, array('plugin' => $plugin))); if ($event->isStopped()) { $this->flashHelper->setFlash($event->getMessageType(), $event->getMessage(), $event->getMessageParameters()); return null; } try { $server->installPlugin($this->templating, $plugin); $server->addPlugin($plugin); } catch (MissingPacketException $e) { $this->flashHelper->setFlash(ResourceEvent::TYPE_ERROR, 'dedipanel.game.missingPacket', array('%plugin%' => strval($plugin), '%packet%' => $e->getPackets())); return null; } catch (NotImplementedException $e) { $this->flashHelper->setFlash(ResourceEvent::TYPE_ERROR, 'dedipanel.game.cant_install_plugin'); return null; } catch (ConnectionErrorException $e) { $this->flashHelper->setFlash(ResourceEvent::TYPE_ERROR, 'dedipanel.machine.connection_failed'); return null; } $this->manager->persist($server); $this->manager->flush(); $this->flashHelper->setFlash(ResourceEvent::TYPE_SUCCESS, 'dedipanel.flashes.install_plugin'); $this->dispatchEvent('post_install_plugin', $event); return $server; }