close() public method

public close ( )
Example #1
0
 /**
  * @param string $message Message to be broadcasted
  * @param string $reason  Reason showed in console
  */
 public function close($message = "", $reason = "generic reason")
 {
     foreach ($this->tasks as $task) {
         $task->cancel();
     }
     $this->tasks = [];
     if ($this->connected and !$this->closed) {
         if ($reason != "") {
             $pk = new DisconnectPacket();
             $pk->message = $reason;
             $this->directDataPacket($pk);
         }
         $this->connected = false;
         if ($this->username != "") {
             $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message));
             if ($this->server->getAutoSave() and $this->loggedIn === true) {
                 $this->save();
             }
         }
         foreach ($this->server->getOnlinePlayers() as $player) {
             if (!$player->canSee($this)) {
                 $player->showPlayer($this);
             }
         }
         $this->hiddenPlayers = [];
         foreach ($this->windowIndex as $window) {
             $this->removeWindow($window);
         }
         $this->interface->close($this, $reason);
         $chunkX = $chunkZ = null;
         foreach ($this->usedChunks as $index => $d) {
             if (PHP_INT_SIZE === 8) {
                 $chunkX = $index >> 32 << 32 >> 32;
                 $chunkZ = ($index & 0xffffffff) << 32 >> 32;
             } else {
                 list($chunkX, $chunkZ) = explode(":", $index);
                 $chunkX = (int) $chunkX;
                 $chunkZ = (int) $chunkZ;
             }
             $this->level->freeChunk($chunkX, $chunkZ, $this);
             unset($this->usedChunks[$index]);
         }
         parent::close();
         if ($this->loggedIn) {
             $this->server->removeOnlinePlayer($this);
         }
         $this->loggedIn = false;
         if (isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != "") {
             $this->server->broadcastMessage($ev->getQuitMessage());
         }
         $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
         $this->spawned = false;
         $this->server->getLogger()->info(TextFormat::AQUA . $this->username . TextFormat::WHITE . "/" . $this->ip . " logged out due to " . str_replace(["\n", "\r"], [" ", ""], $reason));
         $this->windows = new \SplObjectStorage();
         $this->windowIndex = [];
         $this->usedChunks = [];
         $this->loadQueue = [];
         $this->hasSpawned = [];
         $this->spawnPosition = null;
         unset($this->buffer);
     }
     $this->perm->clearPermissions();
     $this->server->removePlayer($this);
 }
Example #2
0
 /**
  * Note for plugin developers: use kick() with the isAdmin
  * flag set to kick without the "Kicked by admin" part instead of this method.
  *
  * @param string $message Message to be broadcasted
  * @param string $reason  Reason showed in console
  * @param bool $notify
  */
 public final function close($message = "", $reason = "generic reason", $notify = true)
 {
     if ($this->connected and !$this->closed) {
         if ($notify and strlen((string) $reason) > 0) {
             $pk = new DisconnectPacket();
             $pk->message = $reason;
             $this->directDataPacket($pk);
         }
         $this->connected = false;
         if (strlen($this->getName()) > 0) {
             $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message, true));
             if ($this->loggedIn === true and $ev->getAutoSave()) {
                 $this->save();
             }
         }
         foreach ($this->server->getOnlinePlayers() as $player) {
             if (!$player->canSee($this)) {
                 $player->showPlayer($this);
             }
         }
         $this->hiddenPlayers = [];
         foreach ($this->windowIndex as $window) {
             $this->removeWindow($window);
         }
         foreach ($this->usedChunks as $index => $d) {
             Level::getXZ($index, $chunkX, $chunkZ);
             $this->level->unregisterChunkLoader($this, $chunkX, $chunkZ);
             unset($this->usedChunks[$index]);
         }
         parent::close();
         $this->interface->close($this, $notify ? $reason : "");
         if ($this->loggedIn) {
             $this->server->removeOnlinePlayer($this);
         }
         $this->loggedIn = false;
         if (isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != "") {
             $this->server->broadcastMessage($ev->getQuitMessage());
         }
         $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
         $this->spawned = false;
         $this->server->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logOut", [TextFormat::AQUA . $this->getName() . TextFormat::WHITE, $this->ip, $this->port, $this->getServer()->getLanguage()->translateString($reason)]));
         $this->windows = new \SplObjectStorage();
         $this->windowIndex = [];
         $this->usedChunks = [];
         $this->loadQueue = [];
         $this->hasSpawned = [];
         $this->spawnPosition = null;
         unset($this->buffer);
     }
     if ($this->perm !== null) {
         $this->perm->clearPermissions();
         $this->perm = null;
     }
     if ($this->inventory !== null) {
         $this->inventory = null;
         $this->currentTransaction = null;
     }
     $this->chunk = null;
     $this->server->removePlayer($this);
 }
Example #3
0
 /**
  * @param string $message Message to be broadcasted
  * @param string $reason  Reason showed in console
  */
 public function close($message = "", $reason = "generic reason")
 {
     foreach ($this->tasks as $task) {
         $task->cancel();
     }
     $this->tasks = [];
     if ($this->connected and !$this->closed) {
         $this->connected = false;
         if ($this->username != "") {
             $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message));
             if ($this->server->getAutoSave() and $this->loggedIn === true) {
                 $this->save();
             }
         }
         foreach ($this->windowIndex as $window) {
             $this->removeWindow($window);
         }
         $this->interface->close($this, $reason);
         $chunkX = $chunkZ = null;
         foreach ($this->usedChunks as $index => $d) {
             Level::getXZ($index, $chunkX, $chunkZ);
             $this->level->freeChunk($chunkX, $chunkZ, $this);
             unset($this->usedChunks[$index]);
         }
         parent::close();
         $this->loggedIn = false;
         if (isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != "") {
             $this->server->broadcastMessage($ev->getQuitMessage());
         }
         $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
         $this->spawned = false;
         $this->server->getLogger()->info(TextFormat::AQUA . $this->username . TextFormat::WHITE . "[/" . $this->ip . ":" . $this->port . "] logged out due to " . str_replace(["\n", "\r"], [" ", ""], $reason));
         $this->windows = new \SplObjectStorage();
         $this->windowIndex = [];
         $this->usedChunks = [];
         $this->loadQueue = [];
         $this->hasSpawned = [];
         $this->spawnPosition = null;
         unset($this->buffer);
     }
     $this->perm->clearPermissions();
     $this->server->removePlayer($this);
 }
Example #4
0
 /**
  * Note for plugin developers: use kick() with the isAdmin
  * flag set to kick without the "Kicked by admin" part instead of this method.
  *
  * @param string $message Message to be broadcasted
  * @param string $reason Reason showed in console
  * @param bool   $notify
  */
 public final function close($message = "", $reason = "generic reason", $notify = true)
 {
     if ($this->connected and !$this->closed) {
         if ($notify and strlen((string) $reason) > 0) {
             $pk = new DisconnectPacket();
             $pk->message = $reason;
             $this->directDataPacket($pk);
         }
         //$this->setLinked();
         if ($this->fishingHook instanceof FishingHook) {
             $this->fishingHook->close();
             $this->fishingHook = null;
         }
         $this->removeEffect(Effect::HEALTH_BOOST);
         $this->connected = false;
         if (strlen($this->getName()) > 0) {
             $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message, true));
             if ($this->loggedIn === true and $ev->getAutoSave()) {
                 $this->save();
             }
         }
         foreach ($this->server->getOnlinePlayers() as $player) {
             if (!$player->canSee($this)) {
                 $player->showPlayer($this);
             }
         }
         $this->hiddenPlayers = [];
         foreach ($this->windowIndex as $window) {
             $this->removeWindow($window);
         }
         foreach ($this->usedChunks as $index => $d) {
             Level::getXZ($index, $chunkX, $chunkZ);
             $this->level->unregisterChunkLoader($this, $chunkX, $chunkZ);
             unset($this->usedChunks[$index]);
         }
         parent::close();
         $this->interface->close($this, $notify ? $reason : "");
         if ($this->loggedIn) {
             $this->server->removeOnlinePlayer($this);
         }
         $this->loggedIn = false;
         if (isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != "") {
             if ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_MESSAGE) {
                 $this->server->broadcastMessage($ev->getQuitMessage());
             } elseif ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_TIP) {
                 $this->server->broadcastTip(str_replace("@player", $this->getName(), $this->server->playerLogoutMsg));
             } elseif ($this->server->playerMsgType === Server::PLAYER_MSG_TYPE_POPUP) {
                 $this->server->broadcastPopup(str_replace("@player", $this->getName(), $this->server->playerLogoutMsg));
             }
         }
         $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
         $this->spawned = false;
         $this->server->getLogger()->info($this->getServer()->getLanguage()->translateString("pocketmine.player.logOut", [TextFormat::AQUA . $this->getName() . TextFormat::WHITE, $this->ip, $this->port, $this->getServer()->getLanguage()->translateString($reason)]));
         $this->windows = new \SplObjectStorage();
         $this->windowIndex = [];
         $this->usedChunks = [];
         $this->loadQueue = [];
         $this->hasSpawned = [];
         $this->spawnPosition = null;
         unset($this->buffer);
         if ($this->server->dserverConfig["enable"] and $this->server->dserverConfig["queryAutoUpdate"]) {
             $this->server->updateQuery();
         }
     }
     if ($this->perm !== null) {
         $this->perm->clearPermissions();
         $this->perm = null;
     }
     $this->inventory = null;
     $this->transactionQueue = null;
     $this->chunk = null;
     $this->server->removePlayer($this);
 }
Example #5
0
 public function onUpdate($currentTick)
 {
     $p = $this->player;
     if ($this->closed == true || $this->dead == true || !$p instanceof Player || !$p->isSleeping()) {
         if (!$this->closed) {
             parent::close();
         }
         $this->player = false;
         return false;
     } else {
         if ($this->healTick >= 60) {
             $p->heal(1);
             $this->healTick = 0;
         }
         $this->healTick++;
         $name = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
         $name .= "Healing...";
         if ($this->healTick < 55) {
             $name .= "\n    " . (3 - floor($this->healTick * 0.05)) . "...";
             $name .= ["-", "\\", ".|", "/"][floor($this->healTick * 0.5) % 4];
         }
         $property = (new \ReflectionClass("\\pocketmine\\Player"))->getProperty("sleeping");
         $property->setAccessible(true);
         $b = $this->getLevel()->getBlock($property->getValue($p));
         $xTabel = [1 => 2, 3 => -2, 9 => 2, 11 => -2];
         $x = isset($xTabel[$dmg = $b->getDamage()]) ? $xTabel[$dmg] : 0.5;
         $zTabel = [0 => -2, 2 => 2, 8 => -2, 10 => 2];
         $z = isset($zTabel[$dmg]) ? $zTabel[$dmg] : 0.5;
         $this->x = $b->x + $x . ($this->y = $p->y + 19);
         $this->z = $b->z + $z;
         if ($this->nameTag !== $name) {
             $this->nameTag = $name;
             $this->despawnFrom($p);
         }
         $this->spawnTo($p);
         $pk = new MovePlayerPacket();
         $pk->eid = $this->id;
         $pk->x = $this->x;
         $pk->y = $this->y;
         $pk->z = $this->z;
         $pk->yaw = 0;
         $pk->bodyYaw = 0;
         $pk->pitch = 0;
         $p->getServer()->broadcastPacket($this->hasSpawned, $pk);
     }
     return true;
 }
Example #6
0
 /**
  * @param string $message Message to be broadcasted
  * @param string $reason  Reason showed in console
  */
 public function close($message = "", $reason = "generic reason")
 {
     foreach ($this->tasks as $task) {
         $task->cancel();
     }
     $this->tasks = [];
     if ($this->connected === true) {
         if ($this->username != "") {
             $this->server->getPluginManager()->callEvent($ev = new PlayerQuitEvent($this, $message));
             if ($this->loggedIn === true) {
                 $this->save();
             }
         }
         $this->connected = false;
         $this->interface->close($this, $reason);
         $this->getLevel()->freeAllChunks($this);
         parent::close();
         $this->loggedIn = false;
         if (isset($ev) and $this->username != "" and $this->spawned !== false and $ev->getQuitMessage() != "") {
             $this->server->broadcastMessage($ev->getQuitMessage());
         }
         $this->server->getPluginManager()->unsubscribeFromPermission(Server::BROADCAST_CHANNEL_USERS, $this);
         $this->spawned = false;
         $this->server->getLogger()->info(TextFormat::AQUA . $this->username . TextFormat::WHITE . "[/" . $this->ip . ":" . $this->port . "] logged out due to " . str_replace(["\n", "\r"], [" ", ""], $reason));
         $this->windows = new \SplObjectStorage();
         $this->windowIndex = [];
         $this->usedChunks = [];
         $this->loadQueue = [];
         unset($this->buffer);
     }
     $this->server->removePlayer($this);
 }
Example #7
0
 public function onUpdate($currentTick)
 {
     $p = $this->player;
     if ($this->closed == true || $this->dead == true || $p instanceof Player && !$p->spawned) {
         if (!$this->closed) {
             parent::close();
         }
         $this->player = false;
         return false;
     } else {
         if ((($pitch = $p->getPitch()) >= 2 || $pitch <= -12) && !$p->isSleeping()) {
             $this->despawnFrom($p);
             return true;
         } else {
             $name = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";
             if ($p->dead) {
                 $name .= "You Dead...";
             } else {
                 $name .= "Health: " . $p->getHealth() . "/" . $p->getMaxHealth() . " " . $p->getHealth() / $p->getMaxHealth() * 100 . "%";
             }
             if ($p->isSleeping()) {
                 $property = (new \ReflectionClass("\\pocketmine\\Player"))->getProperty("sleeping");
                 $property->setAccessible(true);
                 $b = $this->getLevel()->getBlock($property->getValue($p));
                 $xTabel = [1 => 2, 3 => -2, 9 => 2, 11 => -2];
                 $x = isset($xTabel[$dmg = $b->getDamage()]) ? $xTabel[$dmg] : 0.5;
                 $zTabel = [0 => -2, 2 => 2, 8 => -2, 10 => 2];
                 $z = isset($zTabel[$dmg]) ? $zTabel[$dmg] : 0.5;
                 $this->x = $b->x + $x;
                 $this->y = $p->y + 19;
                 $this->z = $b->z + $z;
             } else {
                 $this->x = $p->x - sin($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI * 3);
                 $this->y = $p->y + 20;
                 $this->z = $p->z + cos($p->getyaw() / 180 * M_PI) * cos($p->getPitch() / 180 * M_PI * 3);
             }
             if ($this->nameTag !== $name) {
                 $this->nameTag = $name;
                 $this->despawnFrom($p);
             }
             $this->spawnTo($p);
             $pk = new MovePlayerPacket();
             $pk->eid = $this->id;
             $pk->x = $this->x;
             $pk->y = $this->y;
             $pk->z = $this->z;
             $pk->yaw = 0;
             $pk->bodyYaw = 0;
             $pk->pitch = 0;
             $p->getServer()->broadcastPacket($this->hasSpawned, $pk);
         }
     }
     return true;
 }