public function onPlayerQuitEvent(PlayerQuitEvent $event) { $message = $event->getQuitMessage(); if ($message instanceof TranslationContainer) { $message = $this->getServer()->getLanguage()->translateString($message->getText(), $message->getParameters()); } AnnounceSystem::getInstance()->pushBroadCastPopup($message, 2); $event->setQuitMessage(null); }
/** * @param PlayerQuitEvent $event */ public function onPlayerQuit(PlayerQuitEvent $event) { // Quit message (nick): $message = $event->getQuitMessage(); if ($message instanceof TranslationContainer) { foreach ($message->getParameters() as $i => $m) { $message->setParameter($i, str_replace($event->getPlayer()->getName(), $event->getPlayer()->getDisplayName(), $m)); } } elseif ($message instanceof TextContainer) { $message->setText(str_replace($event->getPlayer()->getName(), $event->getPlayer()->getDisplayName(), $message->getText())); } else { $message = str_replace($event->getPlayer()->getName(), $event->getPlayer()->getDisplayName(), $message); } $event->setQuitMessage($message); // Session destroy: if ($this->getPlugin()->sessionExists($event->getPlayer())) { $this->getPlugin()->removeSession($event->getPlayer()); } }
/** * 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); }
/** * @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); }
/** * @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); }
/** * 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); }
/** * @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); }
/** * @param PlayerQuitEvent $event * * @priority HIGHEST */ public function onPlayerQuit(PlayerQuitEvent $event) { $player = $event->getPlayer(); //Motd Update if (CustomAlerts::getAPI()->isMotdCustom()) { CustomAlerts::getAPI()->setMotdMessage(CustomAlerts::getAPI()->getDefaultMotdMessage()); } else { CustomAlerts::getAPI()->setMotdMessage($this->plugin->translateColors("&", $this->plugin->getServer()->getMotd())); } //Motd Update Event $this->plugin->getServer()->getPluginManager()->callEvent(new CustomAlertsMotdUpdateEvent($this->plugin->getServer()->getMotd())); $this->plugin->getServer()->getNetwork()->setName(CustomAlerts::getAPI()->getMotdMessage()); CustomAlerts::getAPI()->setQuitMessage($event->getQuitMessage()); //Check if Quit message is hidden if (CustomAlerts::getAPI()->isQuitHidden()) { CustomAlerts::getAPI()->setQuitMessage(""); } else { //Check if Quit message is custom if (CustomAlerts::getAPI()->isQuitCustom()) { CustomAlerts::getAPI()->setQuitMessage(CustomAlerts::getAPI()->getDefaultQuitMessage($player)); } } //Quit Event $this->plugin->getServer()->getPluginManager()->callEvent(new CustomAlertsQuitEvent($player, $event->getQuitMessage())); $event->setQuitMessage(CustomAlerts::getAPI()->getQuitMessage()); }