mirror of
https://gitea.sffempire.ru/Kolyah35/minecraft-pe-0.6.1.git
synced 2026-03-20 15:03:32 +00:00
the whole game
This commit is contained in:
67
src/server/ServerLevel.cpp
Executable file
67
src/server/ServerLevel.cpp
Executable file
@@ -0,0 +1,67 @@
|
||||
#include "ServerLevel.h"
|
||||
#include "../network/RakNetInstance.h"
|
||||
#include "../network/packet/SetTimePacket.h"
|
||||
#include "../network/packet/SetHealthPacket.h"
|
||||
#include "../world/level/tile/LevelEvent.h"
|
||||
ServerLevel::ServerLevel(LevelStorage* levelStorage, const std::string& levelName, const LevelSettings& settings, int generatorVersion, Dimension* fixedDimension /* = NULL */)
|
||||
: super(levelStorage, levelName, settings, generatorVersion, fixedDimension),
|
||||
allPlayersAreSleeping(false){
|
||||
|
||||
}
|
||||
|
||||
void ServerLevel::updateSleepingPlayerList() {
|
||||
bool allPlayersWasSleeping = allPlayersAreSleeping;
|
||||
allPlayersAreSleeping = !players.empty();
|
||||
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
|
||||
Player* player = *it;
|
||||
if(!player->isSleeping()) {
|
||||
allPlayersAreSleeping = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!allPlayersWasSleeping && allPlayersAreSleeping) {
|
||||
levelEvent(NULL, LevelEvent::ALL_PLAYERS_SLEEPING, 0, 0, 0, 0);
|
||||
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
|
||||
(*it)->setAllPlayersSleeping();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ServerLevel::awakenAllPlayers() {
|
||||
allPlayersAreSleeping = false;
|
||||
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
|
||||
Player* player = *it;
|
||||
if(player->isSleeping()) {
|
||||
player->stopSleepInBed(false, false, true);
|
||||
player->health = Player::MAX_HEALTH;
|
||||
player->lastHealth = Player::MAX_HEALTH;
|
||||
}
|
||||
}
|
||||
SetHealthPacket packet(Player::MAX_HEALTH);
|
||||
raknetInstance->send(packet);
|
||||
}
|
||||
|
||||
bool ServerLevel::allPlayersSleeping() {
|
||||
if(allPlayersAreSleeping && !isClientSide) {
|
||||
// all players are sleeping, but have they slept long enough?
|
||||
for(PlayerList::iterator it = players.begin(); it != players.end(); ++it) {
|
||||
if(!(*it)->isSleepingLongEnough()) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// yep
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void ServerLevel::tick(){
|
||||
super::tick();
|
||||
if(allPlayersSleeping()) {
|
||||
long newTime = levelData.getTime() + TICKS_PER_DAY;
|
||||
levelData.setTime(newTime - (newTime % TICKS_PER_DAY));
|
||||
SetTimePacket packet(levelData.getTime());
|
||||
raknetInstance->send(packet);
|
||||
awakenAllPlayers();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user