I'm sending ChangeDimensionPacket to player correctly, but I have not idea how to unshow it. I've tried sending PlayStatusPacket , but player can't move and don't have loaded chunks + is in nether dimension after it:/
If I got you right, you are sending the player the packet before teleporting the player to another world? Correct me if I'm wrong.
Nope. But it depends when are you sending the packet. Plus, sending the packet after the client has already been sent the same packet will set the client in a loop too. Sending the packet during PlayerJoinEvent may put the client in a never-ending "Building Terrain" screen, but sending the packet during PlayerLoginEvent works just fine. Make sure you aren't sending the packet twice. Maybe a function... PHP: public function sendDimensionPacket(Player $player, int $dimension){ if( (!isset($player->dimension) && $dimension === DimensionIds::OVERWORLD) || $player->dimension === $dimension ){ return;//throw new \Error("Attempted to send ChangeDimensionPacket with the dimension the client already is in."); } $player->dimension = $dimension; $pk = new ChangeDimensionPacket(); $pk->dimension = $dimension; $pk->position = $player;//->asVector3() $player->dataPacket($pk);}/** @var Player $player */$this->sendDimensionPacket($player, DimensionIds::NETHER);