PageRenderTime 40ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/src/mcg76/game/blockhunt/utils/PortalManager.php

https://gitlab.com/Skull3x/BlockHunt
PHP | 121 lines | 79 code | 10 blank | 32 comment | 17 complexity | 95e699f5d0244edc94ee4356f08d7585 MD5 | raw file
  1. <?php
  2. namespace mcg76\game\blockhunt\utils;
  3. use pocketmine\math\Vector3 as Vector3;
  4. use pocketmine\level\Position;
  5. use pocketmine\Server;
  6. use pocketmine\utils\Config;
  7. use pocketmine\Player;
  8. use pocketmine\utils\TextFormat;
  9. use pocketmine\level\Level;
  10. use pocketmine\level\particle\PortalParticle;
  11. use pocketmine\utils\Random;
  12. use pocketmine\level\particle\ExplodeParticle;
  13. /**
  14. * MCG76 PortalManager
  15. *
  16. * Copyright (C) 2014 minecraftgenius76
  17. * YouTube Channel: http://www.youtube.com/user/minecraftgenius76
  18. *
  19. * @author minecraftgenius76@gmail.com
  20. *
  21. */
  22. class PortalManager {
  23. /**
  24. *
  25. * @param Player $player
  26. * @param string $destinationLevelName
  27. * @param Position $destinationPos
  28. * @return boolean
  29. */
  30. public static function doTeleporting(Player $player, $destinationLevelName, Position $destinationPos = null) {
  31. try {
  32. $player->onGround = true;
  33. if (($destinationPos != null && $destinationPos != false)) {
  34. if ($destinationLevelName != null && $destinationLevelName === $player->getLevel ()->getName ()) {
  35. $player->sendTip ( TextFormat::GRAY . "[BH] TP same world teleporting" );
  36. $player->teleport ( $destinationPos );
  37. $player->teleportImmediate($destinationPos);
  38. //$player->sendPopup ( TextFormat::GREEN . "[BH] Arrived destination:: " . TextFormat::GOLD . " at " . $destinationPos );
  39. } else {
  40. $player->sendTip ( TextFormat::GRAY . "TPW different world destination:" . $destinationLevelName );
  41. self::teleportWorldDestination ( $player, $destinationLevelName, $destinationPos );
  42. //$player->sendPopup ( TextFormat::GREEN . "[BH] Arrived destination:: " . TextFormat::GOLD . $destinationLevelName . TextFormat::GRAY . " at " . $destinationPos );
  43. }
  44. } else {
  45. $player->sendTip ( TextFormat::GRAY . "TPW different world :" . $destinationLevelName );
  46. self::teleportWorldDestination ( $player, $destinationLevelName, null );
  47. //$player->sendPopup ( TextFormat::GREEN . "[BH] Arrived destination:: " . TextFormat::GOLD . $destinationLevelName );
  48. }
  49. $player->onGround = false;
  50. return true;
  51. } catch ( \Exception $e ) {
  52. echo $e->getMessage () . "|" . $e->getLine () . " | " . $e->getTraceAsString ();
  53. }
  54. return false;
  55. }
  56. /**
  57. * teleporting
  58. *
  59. * @param Player $player
  60. * @param string $levelname
  61. * @param Position $pos
  62. */
  63. final static public function teleportWorldDestination(Player $player, $levelname, Position $pos = null) {
  64. if (is_null ( $levelname ) || empty ( $levelname )) {
  65. $player->sendMessage ( "[BH] unable teleport due missing destination level " . $levelname . "!" );
  66. return;
  67. }
  68. if (! $player->getServer ()->isLevelLoaded ( $levelname )) {
  69. $ret = $player->getServer ()->loadLevel ( $levelname );
  70. if (! $ret) {
  71. $player->sendMessage ( "[BH] Error on loading World: " . $levelname . ". please contact server administrator." );
  72. return;
  73. }
  74. }
  75. $level = $player->getServer ()->getLevelByName ( $levelname );
  76. if (is_null ( $level )) {
  77. $player->sendMessage ( "[BH] Unable find world: " . $levelname . ". please contact server administrator." );
  78. return;
  79. }
  80. // same world teleporting
  81. if ($pos instanceof Position) {
  82. //$level->loadChunk ( $level->getSafeSpawn ()->x, $level->getSafeSpawn ()->z );
  83. $player->teleport ( $level->getSafeSpawn () );
  84. // position
  85. //$level->loadChunk ( $pos->x, $pos->z );
  86. $player->sendMessage ( TextFormat::GRAY . "[BH] TPW [" . TextFormat::GOLD . $levelname . TextFormat::GRAY . "] at " . round ( $pos->x ) . " " . round ( $pos->y ) . " " . round ( $pos->z ) );
  87. $player->teleport ( new Position ( $pos->x, $pos->y, $pos->z, $level ) );
  88. $level->updateAllLight ( $pos );
  89. $level->updateAround ( $pos );
  90. // }
  91. } elseif (is_null ( $pos ) || empty ( $pos )) {
  92. //$level->loadChunk ( $level->getSafeSpawn ()->x, $level->getSafeSpawn ()->z );
  93. $player->sendMessage ( TextFormat::GRAY . "[BH] TPW [" . TextFormat::GOLD . $levelname . TextFormat::GRAY . "]" );
  94. $player->teleport ( $level->getSafeSpawn () );
  95. $level->updateAllLight ( $pos );
  96. $level->updateAround ( $pos );
  97. }
  98. }
  99. final static function addParticles(Level $level, Position $pos1, $count = 5)
  100. {
  101. $xd = ( float )280;
  102. $yd = ( float )280;
  103. $zd = ( float )280;
  104. $particle1 = new PortalParticle ($pos1);
  105. $random = new Random (( int )(\microtime(\true) * 1000) + \mt_rand());
  106. for ($i = 0; $i < $count; ++$i) {
  107. $particle1->setComponents($pos1->x + $random->nextSignedFloat() * $xd, $pos1->y + $random->nextSignedFloat() * $yd, $pos1->z + $random->nextSignedFloat() * $zd);
  108. $level->addParticle($particle1);
  109. }
  110. }
  111. }