1
0
cuberite-2a/source/cWorld.h
faketruth b5b920deda You can now run multiple worlds by defining them in settings.ini . However there's no way to change worlds on the fly yet
Players are now stored in separate folder /players instead of in the world folder (!so move the folder!)
Fixed a memory leak/error in cPickup.cpp
Multiple worlds are stored in cRoot
cClientHandle lists are taken out of cWorld and now stored in cServer
Worlds now have names to distinguish them by
Some functions in the Core plugin now distinguish between worlds

git-svn-id: http://mc-server.googlecode.com/svn/trunk@40 0a769ca7-a7f5-676a-18bf-c427514a06d6
2011-11-01 21:57:08 +00:00

164 lines
4.8 KiB
C++

#pragma once
#ifndef _WIN32
#include "BlockID.h"
#else
enum ENUM_ITEM_ID;
#endif
#include <list>
class cWaterSimulator;
class cChunkMap;
class cItem;
class cCriticalSection;
class cPlayer;
class cClientHandle;
class cChunk;
class cEntity;
class cBlockEntity;
class cWorld //tolua_export
{ //tolua_export
public:
typedef std::list< cClientHandle* > ClientList;
typedef std::list< cEntity* > EntityList;
typedef std::list< cChunk* > ChunkList;
typedef std::list< cPlayer* > PlayerList;
static cWorld* GetWorld(); //tolua_export
// Return time in seconds
inline static float GetTime() //tolua_export
{
return m_Time;
}
long long GetWorldTime() { return m_WorldTime; } //tolua_export
int GetGameMode() { return m_GameMode; } //return gamemode for world
void SetWorldTime(long long a_WorldTime) { m_WorldTime = a_WorldTime; } //tolua_export
cChunk* GetChunk( int a_X, int a_Y, int a_Z );
cChunk* GetChunkUnreliable( int a_X, int a_Y, int a_Z );
cChunk* GetChunkOfBlock( int a_X, int a_Y, int a_Z );
char GetHeight( int a_X, int a_Z ); //tolua_export
//void AddClient( cClientHandle* a_Client );
//void RemoveClient( cClientHandle* a_Client );
//ClientList & GetClients();
void AddPlayer( cPlayer* a_Player );
void RemovePlayer( cPlayer* a_Player );
PlayerList & GetAllPlayers();
typedef struct lua_State lua_State;
void GetAllPlayers( lua_State* L ); // >> EXPORTED IN MANUALBINDINGS <<
unsigned int GetNumPlayers(); //tolua_export
cPlayer* GetPlayer( const char* a_PlayerName ); //tolua_export
void AddEntity( cEntity* a_Entity );
void AddToRemoveEntityQueue( cEntity & a_Entity );
bool RemoveEntityFromChunk( cEntity & a_Entity, cChunk* a_CalledFrom = 0 );
EntityList & GetEntities();
cEntity* GetEntity( int a_UniqueID ); //tolua_export
void SetBlock( int a_X, int a_Y, int a_Z, char a_BlockType, char a_BlockMeta ); //tolua_export
void FastSetBlock( int a_X, int a_Y, int a_Z, char a_BlockType, char a_BlockMeta ); //tolua_export
char GetBlock( int a_X, int a_Y, int a_Z ); //tolua_export
char GetBlockMeta( int a_X, int a_Y, int a_Z ); //tolua_export
void SetBlockMeta( int a_X, int a_Y, int a_Z, char a_MetaData ); //tolua_export
bool DigBlock( int a_X, int a_Y, int a_Z, cItem & a_PickupItem ); //tolua_export
void SendBlockTo( int a_X, int a_Y, int a_Z, cPlayer* a_Player ); //tolua_export
const double & GetSpawnX() { return m_SpawnX; } //tolua_export
const double & GetSpawnY(); //tolua_export
const double & GetSpawnZ() { return m_SpawnZ; } //tolua_export
cBlockEntity* GetBlockEntity( int a_X, int a_Y, int a_Z ); //tolua_export
void GrowTree( int a_X, int a_Y, int a_Z ); //tolua_export
unsigned int GetWorldSeed() { return m_WorldSeed; } //tolua_export
const char* GetName(); //tolua_export
inline static void AbsoluteToRelative( int & a_X, int & a_Y, int & a_Z, int & a_ChunkX, int & a_ChunkY, int & a_ChunkZ )
{
(void)a_Y; // not unused anymore
a_ChunkX = a_X/16;
if(a_X < 0 && a_X % 16 != 0) a_ChunkX--;
a_ChunkY = 0;
a_ChunkZ = a_Z/16;
if(a_Z < 0 && a_Z % 16 != 0) a_ChunkZ--;
a_X = a_X - a_ChunkX*16;
//a_Y = a_Y - a_ChunkY*16;
a_Z = a_Z - a_ChunkZ*16;
}
inline static void BlockToChunk( int a_X, int a_Y, int a_Z, int & a_ChunkX, int & a_ChunkY, int & a_ChunkZ )
{
(void)a_Y; // not unused anymore
a_ChunkX = a_X/16;
if(a_X < 0 && a_X % 16 != 0) a_ChunkX--;
a_ChunkY = 0;
a_ChunkZ = a_Z/16;
if(a_Z < 0 && a_Z % 16 != 0) a_ChunkZ--;
}
void SaveAllChunks();
void Tick(float a_Dt);
void LockClientHandle();
void UnlockClientHandle();
void LockEntities();
void UnlockEntities();
void LockChunks();
void UnlockChunks();
void ReSpreadLighting( cChunk* a_Chunk );
void RemoveSpread( cChunk* a_Chunk );
void InitializeSpawn();
private:
friend class cRoot;
cWorld( const char* a_WorldName );
~cWorld();
struct sWorldState;
sWorldState* m_pState;
void RemoveEntity( cEntity* a_Entity );
void UnloadUnusedChunks();
double m_SpawnX;
double m_SpawnY;
double m_SpawnZ;
float m_LastUnload;
float m_LastSave;
static float m_Time; // Time in seconds
long long m_WorldTime; // Time in seconds*20, this is sent to clients (is wrapped)
int m_GameMode;
float m_WorldTimeFraction; // When this > 1.f m_WorldTime is incremented by 20
cWaterSimulator* m_WaterSimulator;
cCriticalSection* m_ClientHandleCriticalSection;
cCriticalSection* m_EntitiesCriticalSection;
cCriticalSection* m_ChunksCriticalSection;
cChunkMap* m_ChunkMap;
bool m_bAnimals;
float m_SpawnMonsterTime;
float m_SpawnMonsterRate;
unsigned int m_WorldSeed;
}; //tolua_export