Как скрыть игрока в табе(Nametag, DisplayName)
КОД:
case "hideall":
if (!$sender instanceof Player) {
$sender->sendMessage("§cЭта команда доступна только игрокам.");
return false;
}
$player = $sender;
$name = strtolower($player->getName());
if (isset($this->hiddenPlayers[$name]) && $this->hiddenPlayers[$name] === true) {
$player->setDataFlag(Entity::DATA_FLAGS, Entity::DATA_FLAG_INVISIBLE, false);
$player->setNameTagVisible(true);
foreach ($this->getServer()->getOnlinePlayers() as $otherPlayer) {
if ($otherPlayer !== $player) {
$otherPlayer->showPlayer($player);
}
}
unset($this->hiddenPlayers[$name]);
$player->sendPopup($this->messages['hideall-show']);
} else {
$player->setDataFlag(Entity::DATA_FLAGS, Entity::DATA_FLAG_INVISIBLE, true);
$player->setNameTagVisible(false);
Foreach ($this->getServer()->getOnlinePlayers() as $players) {
if ($players != $sender) {
$players->hidePlayer($sender);
}
}
$this->hiddenPlayers[$name] = true;
$player->sendPopup($this->messages['hideall-hide']);
}
return true;
Я знаю можно setDisplayName(“”) но тогда будет виден что-то прозрачное
еще лучше есть(
if (isset($this->hiddenPlayers[$name]) && $this->hiddenPlayers[$name] === true) {
$player->setInvisible(false);
$player->setNameTagVisible(true);
$player->setDisplayName($player->getName());
foreach ($this->getServer()->getOnlinePlayers() as $otherPlayer) {
if ($otherPlayer !== $player) {
$otherPlayer->showPlayer($player);
}
}
$this->getServer()->addOnlinePlayer($player);
unset($this->hiddenPlayers[$name]);
$player->sendPopup($this->messages['hideall-show']);
} else {
$player->setInvisible(true);
$player->setNameTagVisible(false);
foreach ($this->getServer()->getOnlinePlayers() as $otherPlayer) {
if ($otherPlayer !== $player) {
$otherPlayer->hidePlayer($player);
}
}
$this->getServer()->removeOnlinePlayer($player);
$this->hiddenPlayers[$name] = true;
$player->sendPopup($this->messages['hideall-hide']);
}
Использовать у Server.php addOnlinePlayer и removeOnlinePlayer
public function addOnlinePlayer(Player $player){
$this->updatePlayerListData($player->getUniqueId(), $player->getId(), $player->getDisplayName(), $player->getSkinId(), $player->getSkinData());
$this->playerList[$player->getRawUniqueId()] = $player;
}
public function removeOnlinePlayer(Player $player){
if(isset($this->playerList[$player->getRawUniqueId()])){
unset($this->playerList[$player->getRawUniqueId()]);
$pk = new PlayerListPacket();
$pk->type = PlayerListPacket::TYPE_REMOVE;
$pk->entries[] = [$player->getUniqueId()];
$this->broadcastPacket($this->playerList, $pk);
}
}