void Mineserver::Watcher_Login::operator()(Mineserver::Game::pointer_t game, Mineserver::Network_Client::pointer_t client, Mineserver::Network_Message::pointer_t message) const { std::cout << "Login watcher called!" << std::endl; const Mineserver::Network_Message_Login* msg = reinterpret_cast<Mineserver::Network_Message_Login*>(&(*message)); Mineserver::Game_Player::pointer_t player(new Mineserver::Game_Player); player->setName(msg->username); std::cout << "Player login v." << msg->version << ": " << msg->username << std::endl; game->addPlayer(player); game->associateClient(client, player); boost::shared_ptr<Mineserver::Network_Message_Login> loginMessage = boost::make_shared<Mineserver::Network_Message_Login>(); loginMessage->mid = 0x01; loginMessage->version = 1; loginMessage->seed = 1; loginMessage->mode = 0; loginMessage->dimension = 0; loginMessage->difficulty = 2; loginMessage->worldHeight = 128; loginMessage->maxPlayers = 128; client->outgoing().push_back(loginMessage); for (int x = -5; x <= 5; ++x) { for (int z = -5; z <= 5; ++z) { boost::shared_ptr<Mineserver::Network_Message_ChunkPrepare> chunkPrepareMessage = boost::make_shared<Mineserver::Network_Message_ChunkPrepare>(); chunkPrepareMessage->mid = 0x32; chunkPrepareMessage->x = x; chunkPrepareMessage->z = z; chunkPrepareMessage->mode = 1; client->outgoing().push_back(chunkPrepareMessage); } } Mineserver::World::pointer_t world = game->getWorld(0); for (int x = -5; x <= 5; ++x) { for (int z = -5; z <= 5; ++z) { boost::shared_ptr<Mineserver::Network_Message_Chunk> chunkMessage = boost::make_shared<Mineserver::Network_Message_Chunk>(); chunkMessage->mid = 0x33; chunkMessage->posX = x; chunkMessage->posY = 0; chunkMessage->posZ = z; chunkMessage->sizeX = 15; chunkMessage->sizeY = 127; chunkMessage->sizeZ = 15; chunkMessage->chunk = world->generateChunk(x, z); client->outgoing().push_back(chunkMessage); } } boost::shared_ptr<Mineserver::Network_Message_SpawnPosition> spawnPositionMessage = boost::make_shared<Mineserver::Network_Message_SpawnPosition>(); spawnPositionMessage->mid = 0x06; spawnPositionMessage->x = 0; spawnPositionMessage->y = 100; spawnPositionMessage->z = 0; client->outgoing().push_back(spawnPositionMessage); boost::shared_ptr<Mineserver::Network_Message_PositionLook> positionLookMessage = boost::make_shared<Mineserver::Network_Message_PositionLook>(); positionLookMessage->mid = 0x0D; positionLookMessage->x = 0; positionLookMessage->y = 100; positionLookMessage->z = 0; positionLookMessage->stance = 100; positionLookMessage->yaw = 0; positionLookMessage->pitch = 0; positionLookMessage->onGround = 0; client->outgoing().push_back(positionLookMessage); }