PageRenderTime 56ms CodeModel.GetById 13ms RepoModel.GetById 1ms app.codeStats 0ms

/src/SkygridRex/skywars/portal/PortalManager.php

https://gitlab.com/Skull3x/SimpleSkyWars
PHP | 129 lines | 107 code | 14 blank | 8 comment | 19 complexity | b87a29e2fcf205bcd0eaa328cab1be08 MD5 | raw file
  1. <?php
  2. namespace SkygridRex\skywars\portal;
  3. use pocketmine\math\Vector3 as Vector3;
  4. use pocketmine\level\Position;
  5. use pocketmine\entity\Entity;
  6. use pocketmine\Server;
  7. use pocketmine\utils\Config;
  8. use SkygridRex\skywars\SkyWarsPlugIn;
  9. use pocketmine\Player;
  10. use SkygridRex\skyblock\BlockBuilder;
  11. class PortalManager {
  12. private $pgin;
  13. public function __construct(SkyWarsPlugIn $pg) {
  14. $this->pgin = $pg;
  15. }
  16. public function trigger(Player $e) {
  17. foreach ( $this->pgin->portals as $p ) {
  18. if ($p->inside ( $e->getPosition() )) {
  19. $p->teleport ( $e->getPosition());
  20. break;
  21. }
  22. }
  23. }
  24. public function loadPortals() {
  25. $path = $this->pgin->getDataFolder () . "portals/";
  26. if (! file_exists ( $path )) {
  27. @mkdir ( $this->pgin->getDataFolder () );
  28. @mkdir ( $path );
  29. return;
  30. }
  31. $handler = opendir ( $path );
  32. while ( ($filename = readdir ( $handler )) !== false ) {
  33. if ($filename != "." && $filename != "..") {
  34. $data = new Config ( $path . $filename, Config::YAML );
  35. $this->log("load level portal :".$path.$filename);
  36. $this->log(" world :".$data->get ( "pointLevel"));
  37. $this->log(" destination :".$data->get ( "destinationLevel"));
  38. if (($pLevel = Server::getInstance ()->getLevelByName ( $data->get ( "pointLevel" ) )) === null)
  39. continue;
  40. if (($dLevel = Server::getInstance ()->getLevelByName ( $data->get ( "destinationLevel" ) )) === null)
  41. continue;
  42. $name = str_replace ( ".yml", "", $filename );
  43. $p1 = new Position ( $data->get ( "point1X" ), $data->get ( "point1Y" ), $data->get ( "point1Z" ), $pLevel );
  44. $p2 = new Position ( $data->get ( "point2X" ), $data->get ( "point2Y" ), $data->get ( "point2Z" ), $pLevel );
  45. //$destination = new Position ( $data->get ( "destinationX" ), $data->get ( "destinationY" ), $data->get ( "destinationZ" ), $dLevel );
  46. $destination = $data->get ( "destination" );
  47. $this->pgin->portals [$name] = new Portal ($p1,$p2,$name,$destination);
  48. $this->log(" position: ".$p1. " | ".$p2 . " ".$destination);
  49. //rebuild the portal
  50. //$level = PortalManager::getLevel($this->pgin->getServer(), $name);
  51. if ($pLevel!=null) {
  52. $builder = new BlockBuilder($this->pgin);
  53. $p1->y = $p1->y+1;
  54. $builder->renderPortal($pLevel, $p1, $destination);
  55. }
  56. }
  57. }
  58. closedir ( $handler );
  59. }
  60. public function addPortal(Portal $p) {
  61. $this->pgin->portals [$p->name] = $p;
  62. $p->save ( $this->pgin->getDataFolder () . "portals/" );
  63. $this->log("save portal ".$p->name . " | ".$p->destination);
  64. }
  65. public function deletePortal($name) {
  66. if (! isset ( $this->pgin->portals [$name] ))
  67. return false;
  68. $this->pgin->portals [$name]->delete ( $this->pgin->getDataFolder () . "portals/" );
  69. unset ( $this->pgin->portals [$name] );
  70. return true;
  71. }
  72. public static function isLevelLoaded(Player $player, $levelhome) {
  73. $level = null;
  74. if (!$player->getServer()->isLevelGenerated($levelhome)) {
  75. $player->sendMessage("unable to find world name [".$levelhome."]");
  76. return ;
  77. }
  78. if (!$player->getServer()->isLevelLoaded($levelhome)) {
  79. $player->getServer()->loadLevel($levelhome);
  80. }
  81. if ($player->getServer()->isLevelLoaded($levelhome)) {
  82. $player->sendMessage("level loaded -".$levelhome);
  83. $level = $player->getServer()->getLevelByName($levelhome);
  84. if ($level==null) {
  85. //$this->log("level not found: ".$levelhome);
  86. $player->sendMessage("level not found: ".$levelhome);
  87. return null;
  88. }
  89. }
  90. return $level;
  91. }
  92. public static function getLevel($server, $levelhome) {
  93. $level = null;
  94. if (!$server->isLevelGenerated($levelhome)) {
  95. //$player->sendMessage("unable to find world name [".$levelhome."]");
  96. return ;
  97. }
  98. if (!$server->isLevelLoaded($levelhome)) {
  99. $server->loadLevel($levelhome);
  100. }
  101. if ($server->isLevelLoaded($levelhome)) {
  102. //$player->sendMessage("level loaded -".$levelhome);
  103. $level = $server->getLevelByName($levelhome);
  104. if ($level==null) {
  105. //$this->log("level not found: ".$levelhome);
  106. //$player->sendMessage("level not found: ".$levelhome);
  107. return null;
  108. }
  109. }
  110. return $level;
  111. }
  112. private function log($msg) {
  113. $this->pgin->getLogger ()->info ( $msg );
  114. }
  115. }