4 #define MAX_PLAYERS 65535 154 virtual int GetHeight(
int a_BlockX,
int a_BlockZ)
override;
159 bool TryGetHeight(
int a_BlockX,
int a_BlockZ,
int & a_Height);
232 int a_ChunkX,
int a_ChunkZ,
261 void AddPlayer(std::unique_ptr<cPlayer> a_Player,
cWorld * a_OldWorld =
nullptr);
271 bool IsPlayerReferencedInWorldOrChunk(
cPlayer & a_Player);
349 void PrepareChunk(
int a_ChunkX,
int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_CallAfter = {});
364 bool SetTrapdoorOpen(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
bool a_Open);
373 void QueueLightChunk(
int a_ChunkX,
int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_Callback = {});
378 virtual bool ForEachChunkInRect(
int a_MinChunkX,
int a_MaxChunkX,
int a_MinChunkZ,
int a_MaxChunkZ, cChunkDataCallback & a_Callback)
override;
394 return SetBlock({a_BlockX, a_BlockY, a_BlockZ}, a_BlockType, a_BlockMeta);
402 m_ChunkMap->FastSetBlock(a_BlockPos, a_BlockType, a_BlockMeta);
411 return FastSetBlock({a_BlockX, a_BlockY, a_BlockZ}, a_BlockType, a_BlockMeta);
426 return m_ChunkMap->GetBlock({a_BlockX, a_BlockY, a_BlockZ});
441 return m_ChunkMap->GetBlockMeta({a_BlockX, a_BlockY, a_BlockZ});
455 void SetBlockMeta(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
NIBBLETYPE a_MetaData,
bool a_ShouldMarkDirty =
true,
bool a_ShouldInformClients =
true)
457 return SetBlockMeta({a_BlockX, a_BlockY, a_BlockZ}, a_MetaData, a_ShouldMarkDirty, a_ShouldInformClients);
501 return GetBlockTypeMeta({a_BlockX, a_BlockY, a_BlockZ}, a_BlockType, a_BlockMeta);
514 return GetBlockInfo({a_BlockX, a_BlockY, a_BlockZ}, a_BlockType, a_Meta, a_SkyLight, a_BlockLight);
524 virtual bool WriteBlockArea(
cBlockArea & a_Area,
int a_MinBlockX,
int a_MinBlockY,
int a_MinBlockZ,
int a_DataTypes)
override;
540 virtual void SpawnItemPickups(
const cItems & a_Pickups,
double a_BlockX,
double a_BlockY,
double a_BlockZ,
double a_FlyAwaySpeed = 1.0,
bool a_IsPlayerCreated =
false)
override 550 virtual void SpawnItemPickups(
const cItems & a_Pickups,
double a_BlockX,
double a_BlockY,
double a_BlockZ,
double a_SpeedX,
double a_SpeedY,
double a_SpeedZ,
bool a_IsPlayerCreated =
false)
override 552 return SpawnItemPickups(a_Pickups, {a_BlockX, a_BlockY, a_BlockZ}, {a_SpeedX, a_SpeedY, a_SpeedZ}, a_IsPlayerCreated);
560 virtual UInt32 SpawnItemPickup(
double a_PosX,
double a_PosY,
double a_PosZ,
const cItem & a_Item,
float a_SpeedX = 0.f,
float a_SpeedY = 0.f,
float a_SpeedZ = 0.f,
int a_LifetimeTicks = 6000,
bool a_CanCombine =
true)
override 562 return SpawnItemPickup({a_PosX, a_PosY, a_PosZ}, a_Item, {a_SpeedX, a_SpeedY, a_SpeedZ}, a_LifetimeTicks, a_CanCombine);
586 return SpawnMinecart({a_X, a_Y, a_Z}, a_MinecartType, a_Content, a_BlockHeight);
592 LOGWARNING(
"cWorld::SpawnBoat(double, double, double) is deprecated, use cWorld::SpawnBoat(Vector3d) instead.");
593 return SpawnBoat({a_X, a_Y, a_Z}, a_Material);
629 UInt32 SpawnPrimedTNT(
double a_X,
double a_Y,
double a_Z,
int a_FuseTimeInSec = 80,
double a_InitialVelocityCoeff = 1)
631 LOGWARNING(
"cWorld::SpawnPrimedTNT(double, double, double) is deprecated, use cWorld::SpawnPrimedTNT(Vector3d) instead.");
632 return SpawnPrimedTNT({a_X, a_Y, a_Z}, a_FuseTimeInSec, a_InitialVelocityCoeff);
689 bool SetSpawn(
double a_X,
double a_Y,
double a_Z);
704 LOGWARNING(
"cWorld::WakeUpSimulators(int, int, int) is deprecated, use cWorld::WakeUpSimulators(Vector3i) instead.");
709 void WakeUpSimulatorsInArea(
int a_MinBlockX,
int a_MaxBlockX,
int a_MinBlockY,
int a_MaxBlockY,
int a_MinBlockZ,
int a_MaxBlockZ);
744 virtual void DoExplosionAt(
double a_ExplosionSize,
double a_BlockX,
double a_BlockY,
double a_BlockZ,
bool a_CanCauseFire,
eExplosionSource a_Source,
void * a_SourceData)
override;
810 bool GrowTree(
int a_BlockX,
int a_BlockY,
int a_BlockZ);
842 bool GrowRipePlant(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
bool a_IsByBonemeal =
false)
849 int GrowCactus(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
int a_NumBlocksToGrow);
855 int GrowSugarcane(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
int a_NumBlocksToGrow);
946 void GetChunkStats(
int & a_NumValid,
int & a_NumDirty,
int & a_NumInLightingQueue);
977 void QueueBlockForTick(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
int a_TicksToWait);
1055 virtual UInt32 SpawnMob(
double a_PosX,
double a_PosY,
double a_PosZ,
eMonsterType a_MonsterType,
bool a_Baby =
false)
override;
1101 virtual void Execute(
void)
override;
1112 virtual void OnChunkGenerated (
cChunkDesc & a_ChunkDesc)
override;
1118 virtual void CallHookChunkGenerating(
cChunkDesc & a_ChunkDesc)
override;
1119 virtual void CallHookChunkGenerated (
cChunkDesc & a_ChunkDesc)
override;
1271 std::vector<std::pair<Int64, std::function<void(cWorld &)>>>
m_Tasks;
1314 void Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_LastTickDurationMSec);
1320 void TickMobs(std::chrono::milliseconds a_Dt);
1338 bool CanSpawnAt(
double a_X,
double & a_Y,
double a_Z);
virtual bool IsDaylightCycleEnabled(void) const
Is the daylight cycle enabled?
size_t GetNumChunks() const
Returns the number of chunks loaded.
AString GetLinkedOverworldName(void) const
virtual cBroadcastInterface & GetBroadcastManager(void) override
void SaveAllChunks(void)
Saves all chunks immediately.
virtual void BroadcastEntityEffect(const cEntity &a_Entity, int a_EffectID, int a_Amplifier, int a_Duration, const cClientHandle *a_Exclude=nullptr) override
void SetBlocks(const sSetBlockVector &a_Blocks)
Performs the specified single-block set operations simultaneously, as if SetBlock() was called for ea...
virtual void BroadcastEntityRelMove(const cEntity &a_Entity, Vector3< Int8 > a_RelMove, const cClientHandle *a_Exclude=nullptr) override
virtual bool ForEachEntityInBox(const cBoundingBox &a_Box, cEntityCallback a_Callback) override
Calls the callback for each entity that has a nonempty intersection with the specified boundingbox...
NIBBLETYPE GetBlockSkyLight(Vector3i a_BlockPos)
Returns the sky light value at the specified block position.
bool m_IsMelonStemBonemealable
bool DigBlock(Vector3i a_BlockPos)
Replaces the specified block with air, and calls the apropriate block handlers (OnBreaking(), OnBroken()).
bool ForEachLoadedChunk(cFunctionRef< bool(int, int)> a_Callback)
Calls the callback for each loaded chunk.
bool TryGetHeight(int a_BlockX, int a_BlockZ, int &a_Height)
Retrieves the world height at the specified coords; returns false if chunk not loaded / generated...
virtual UInt32 SpawnMob(double a_PosX, double a_PosY, double a_PosZ, eMonsterType a_MonsterType, bool a_Baby=false) override
Spawns a mob of the specified type.
std::chrono::duration< int, std::ratio_multiply< std::chrono::milliseconds::period, std::ratio< 50 >>> cTickTime
bool IsBlockDirectlyWatered(int a_BlockX, int a_BlockY, int a_BlockZ)
virtual void BroadcastEntityAnimation(const cEntity &a_Entity, Int8 a_Animation, const cClientHandle *a_Exclude=nullptr) override
std::list< cClientHandlePtr > cClientHandlePtrs
const AString & GetIniFileName(void) const
Returns the name of the world.ini file used by this world.
std::vector< std::pair< Int64, std::function< void(cWorld &)> > > m_Tasks
Tasks that have been queued onto the tick thread, possibly to be executed at target tick in the futur...
cClientHandlePtrs m_ClientsToAdd
Clients that are scheduled for adding, waiting for TickClients to add them.
eDimension
Dimension of a world.
void InitializeSpawn(void)
BLOCKTYPE GetBlock(Vector3i a_BlockPos)
Returns the block type at the specified position.
virtual void BroadcastScoreboardObjective(const AString &a_Name, const AString &a_DisplayName, Byte a_Mode) override
AString m_LinkedOverworldName
The name of the overworld that portals in this world should link to.
bool GetChunkBlockTypes(int a_ChunkX, int a_ChunkZ, BLOCKTYPE *a_BlockTypes)
Gets the chunk's blocks, only the block types.
virtual void SpawnItemPickups(const cItems &a_Pickups, double a_BlockX, double a_BlockY, double a_BlockZ, double a_SpeedX, double a_SpeedY, double a_SpeedZ, bool a_IsPlayerCreated=false) override
OBSOLETE, use the Vector3d-based overload instead.
void GenerateChunk(int a_ChunkX, int a_ChunkZ)
Generates the given chunk.
void SetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
OBSOLETE, use the Vector3-based overload instead.
bool GetBlockInfo(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_Meta, NIBBLETYPE &a_SkyLight, NIBBLETYPE &a_BlockLight)
Queries the whole block specification from the world.
virtual void BroadcastSpawnEntity(cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
int m_MinNetherPortalWidth
virtual void SetMinNetherPortalWidth(int a_NewMinWidth) override
std::unique_ptr< cChunkMap > m_ChunkMap
virtual void BroadcastPlayerListUpdateDisplayName(const cPlayer &a_Player, const AString &a_CustomName, const cClientHandle *a_Exclude=nullptr) override
bool ForEachFurnaceInChunk(int a_ChunkX, int a_ChunkZ, cFurnaceCallback a_Callback)
Calls the callback for each furnace in the specified chunk; returns true if all furnaces processed...
virtual void SetTimeOfDay(int a_TimeOfDay) override
bool SetTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
Set the state of a trapdoor.
virtual bool DoWithBlockEntityAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBlockEntityCallback a_Callback) override
Calls the callback for the block entity at the specified coords; returns false if there's no block en...
bool ShouldUseChatPrefixes(void) const
virtual void SetMaxNetherPortalHeight(int a_NewMaxHeight) override
void RemoveClientFromChunkSender(cClientHandle *a_Client)
Removes client from ChunkSender's queue of chunks to be sent.
cChunkGeneratorThread m_Generator
The thread responsible for generating chunks.
std::list< cClientHandle * > cClientHandles
virtual int GetMaxNetherPortalHeight(void) const override
std::shared_ptr< cClientHandle > cClientHandlePtr
bool ForEachDropSpenserInChunk(int a_ChunkX, int a_ChunkZ, cDropSpenserCallback a_Callback)
Calls the callback for each dropspenser in the specified chunk; returns true if all dropspensers proc...
bool m_IsCropsBonemealable
virtual void BroadcastEntityEquipment(const cEntity &a_Entity, short a_SlotNum, const cItem &a_Item, const cClientHandle *a_Exclude=nullptr) override
bool GetBlockTypeMeta(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_BlockMeta)
OBSOLETE, use the Vector3i-based overload instead.
int GrowSugarcane(int a_BlockX, int a_BlockY, int a_BlockZ, int a_NumBlocksToGrow)
Grows a sugarcane present at the block specified by the amount of blocks specified, up to the max height specified in the config; returns the amount of blocks the sugarcane grew inside this call.
cFluidSimulator * m_WaterSimulator
size_t GetNumUnusedDirtyChunks(void) const
Returns the number of unused dirty chunks.
virtual int GetMinNetherPortalHeight(void) const override
Returns or sets the minumim or maximum netherportal height.
bool CanSpawnAt(double a_X, double &a_Y, double a_Z)
Can the specified coordinates be used as a spawn point? Returns true if spawn position is valid and s...
unsigned char BLOCKTYPE
The datatype used by blockdata.
bool m_IsMelonBonemealable
virtual UInt32 SpawnItemPickup(double a_PosX, double a_PosY, double a_PosZ, const cItem &a_Item, float a_SpeedX=0.f, float a_SpeedY=0.f, float a_SpeedZ=0.f, int a_LifetimeTicks=6000, bool a_CanCombine=true) override
OBSOLETE, use the Vector3d-based overload instead.
AString GetLinkedNetherWorldName(void) const
bool GrowTreeFromSapling(Vector3i a_BlockPos, NIBBLETYPE a_SaplingMeta)
Grows a tree at the specified coords, based on the sapling meta provided.
bool DoWithChunkAt(Vector3i a_BlockPos, cChunkCallback a_Callback)
Calls the callback for the chunk at the block position specified, with ChunkMapCS locked...
bool m_IsSpawnExplicitlySet
void TouchChunk(int a_ChunkX, int a_ChunkZ)
Touches the chunk, causing it to be loaded or generated.
void QueueSetChunkData(cSetChunkDataPtr a_SetChunkData)
Puts the chunk data into a queue to be set into the chunkmap in the tick thread.
Despite the class name, this simulator takes care of all blocks that fall when suspended in the air...
bool SetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, const AString &a_Line1, const AString &a_Line2, const AString &a_Line3, const AString &a_Line4, cPlayer *a_Player=nullptr)
Sets the sign text, asking plugins for permission first.
void ForceSendChunkTo(int a_ChunkX, int a_ChunkZ, cChunkSender::eChunkPriority a_Priority, cClientHandle *a_Client)
Sends the chunk to the client specified, even if the client already has the chunk.
bool ForEachDispenserInChunk(int a_ChunkX, int a_ChunkZ, cDispenserCallback a_Callback)
Calls the callback for each dispenser in the specified chunk; returns true if all dispensers processe...
std::map< cMonster::eFamily, cTickTimeLong > m_LastSpawnMonster
int m_MinNetherPortalHeight
std::chrono::milliseconds m_WorldAge
The age of the world.
virtual void BroadcastBlockBreakAnimation(UInt32 a_EntityID, Vector3i a_BlockPos, Int8 a_Stage, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastEntityMetadata(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual int GetMinNetherPortalWidth(void) const override
Returns or sets the minumim or maximum netherportal width.
bool DoWithDropperAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDropperCallback a_Callback)
Calls the callback for the dropper at the specified coords; returns false if there's no dropper at th...
eWeather ChooseNewWeather(void)
Chooses a reasonable transition from the current weather to a new weather.
int m_MaxThunderStormTicks
bool m_IsCarrotsBonemealable
bool DigBlock(int a_X, int a_Y, int a_Z)
OBSOLETE, use the Vector3-based overload instead.
std::unique_ptr< cFireSimulator > m_FireSimulator
void AddEntity(OwnedEntity a_Entity)
Adds the entity into its appropriate chunk; takes ownership of the entity ptr.
bool DoWithBrewingstandAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBrewingstandCallback a_Callback)
Calls the callback for the brewingstand at the specified coords; returns false if there's no brewings...
void RemoveClientFromChunks(cClientHandle *a_Client)
Removes the client from all chunks it is present in.
bool IsDeepSnowEnabled(void) const
int GetMaxViewDistance(void) const
bool GrowTreeByBiome(int a_BlockX, int a_BlockY, int a_BlockZ)
Grows a tree at the specified coords, based on the biome in the place.
void ChunkLighted(int a_ChunkX, int a_ChunkZ, const cChunkDef::BlockNibbles &a_BlockLight, const cChunkDef::BlockNibbles &a_SkyLight)
void QueueUnloadUnusedChunks(void)
Queues a task to unload unused chunks onto the tick thread.
UInt32 SpawnFallingBlock(Vector3i a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Spawns an falling block entity at the given position.
void UpdateSkyDarkness(void)
bool IsBiomeCold(EMCSBiome a_Biome)
Returns true if the biome is cold (has snow and snowfall at higher elevations but not at regular heig...
virtual void BroadcastPlayerListUpdatePing(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
void ChangeWeather(void)
Forces a weather change in the next game tick.
void Start()
Starts threads that belong to this world.
virtual bool IsWeatherWetAtXYZ(Vector3i a_Pos)
Returns true if the specified location has wet weather (rain or storm), using the same logic as IsWea...
bool IsPVPEnabled(void) const
static const char * GetClassStatic(void)
bool GrowTreeImage(const sSetBlockVector &a_Blocks)
Imprints the specified blocks into the world, as long as each log block replaces only allowed blocks...
int m_MaxViewDistance
The maximum view distance that a player can have in this world.
virtual bool DoWithBedAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBedCallback a_Callback) override
Calls the callback for the bed at the specified coords; returns false if there's no bed at those coor...
cCriticalSection m_CSEntitiesToAdd
Guards m_EntitiesToAdd.
bool DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback a_Callback)
Calls the callback for the chunk specified, with ChunkMapCS locked.
virtual void BroadcastRemoveEntityEffect(const cEntity &a_Entity, int a_EffectID, const cClientHandle *a_Exclude=nullptr) override
void SendPlayerList(cPlayer *a_DestPlayer)
UInt32 SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartType, const cItem &a_Content=cItem(), int a_BlockHeight=1)
OBSOLETE, use the Vector3d-based overload instead.
void SetLinkedNetherWorldName(const AString &a_Name)
bool IsWeatherWet(void) const
Returns true if the world currently has any precipitation - rain, storm or snow.
std::atomic< bool > m_IsSavingEnabled
Whether or not writing chunks to disk is currently enabled.
The interface through which the plugins are called for their OnChunkGenerating / OnChunkGenerated hoo...
virtual void BroadcastDisplayObjective(const AString &a_Objective, cScoreboard::eDisplaySlot a_Display) override
cSimulatorManager * GetSimulatorManager(void)
bool DoWithNoteBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cNoteBlockCallback a_Callback)
Calls the callback for the noteblock at the specified coords; returns false if there's no noteblock a...
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
int GrowPlantAt(Vector3i a_BlockPos, int a_NumStages=1)
Grows the plant at the specified position by at most a_NumStages.
std::list< cPlayer * > cPlayerList
virtual void SetDaylightCycleEnabled(bool a_IsDaylightCycleEnabled)
Sets the daylight cycle to true / false.
bool HasChunkAnyClients(int a_ChunkX, int a_ChunkZ) const
eWeather GetWeather(void) const
Returns the current weather.
bool DoWithMobHeadAt(int a_BlockX, int a_BlockY, int a_BlockZ, cMobHeadCallback a_Callback)
Calls the callback for the mob head block at the specified coords; returns false if there's no mob he...
cCriticalSection m_CSSetChunkDataQueue
CS protecting m_SetChunkDataQueue.
void MarkChunkSaved(int a_ChunkX, int a_ChunkZ)
Represents two sets of coords, minimum and maximum for each direction.
bool IsChunkQueued(int a_ChunkX, int a_ChunkZ) const
Returns true iff the chunk is in the loader / generator queue.
void QueueBlockForTick(int a_BlockX, int a_BlockY, int a_BlockZ, int a_TicksToWait)
Queues the block to be ticked after the specified number of game ticks.
bool DropBlockAsPickups(Vector3i a_BlockPos, const cEntity *a_Digger=nullptr, const cItem *a_Tool=nullptr)
Digs the specified block, and spawns the appropriate pickups for it.
EMCSBiome
Biome IDs The first batch corresponds to the clientside biomes, used by MineCraft.
eKind
The kind of the projectile.
virtual void BroadcastDetachEntity(const cEntity &a_Entity, const cEntity &a_PreviousVehicle) override
bool m_BroadcastDeathMessages
size_t GetSaveQueueLength(void)
bool IsWeatherSunnyAt(int a_BlockX, int a_BlockZ)
Returns true if it is sunny at the specified location.
virtual void WakeUpSimulators(Vector3i a_Block) override
Wakes up the simulators for the specified block.
void SpawnItemPickups(const cItems &a_Pickups, Vector3i a_BlockPos, double a_FlyAwaySpeed=1.0, bool a_IsPlayerCreated=false)
Spawns item pickups for each item in the list.
void QueueSaveAllChunks(void)
Queues a task to save all chunks onto the tick thread.
eShrapnelLevel GetTNTShrapnelLevel(void) const
bool DoWithEntityByID(UInt32 a_UniqueID, cEntityCallback a_Callback)
Calls the callback if the entity with the specified ID is found, with the entity object as the callba...
bool IsGameModeSpectator(void) const
Returns true if the world is in Spectator mode.
void TickMobs(std::chrono::milliseconds a_Dt)
Handles the mob spawning / moving / destroying each tick.
NIBBLETYPE GetBlockMeta(Vector3i a_BlockPos)
Returns the block meta at the specified position.
UInt32 SpawnItemPickup(Vector3d a_Pos, const cItem &a_Item, Vector3f a_Speed, int a_LifetimeTicks=6000, bool a_CanCombine=true)
Spawns a single pickup containing the specified item.
std::unique_ptr< cPlayer > RemovePlayer(cPlayer &a_Player, bool a_RemoveFromChunk)
Removes the player from the world.
virtual void BroadcastEntityRelMoveLook(const cEntity &a_Entity, Vector3< Int8 > a_RelMove, const cClientHandle *a_Exclude=nullptr) override
UInt32 SpawnBoat(double a_X, double a_Y, double a_Z, cBoat::eMaterial a_Material)
eMonsterType
Identifies individual monster type, as well as their network type-ID.
Takes requests for generating chunks and processes them in a separate thread one by one...
std::vector< cSetChunkDataPtr > cSetChunkDataPtrs
void QueueTask(std::function< void(cWorld &)> a_Task)
Queues a task onto the tick thread.
cFluidSimulator * GetWaterSimulator(void)
int GetDefaultWeatherInterval(eWeather a_Weather)
Returns the default weather interval for the specific weather type.
virtual void BroadcastChatWarning(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastChatFailure(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
void GetChunkStats(int &a_NumValid, int &a_NumDirty, int &a_NumInLightingQueue)
Returns the number of chunks loaded and dirty, and in the lighting queue.
UInt32 SpawnExperienceOrb(Vector3d a_Pos, int a_Reward)
Spawns an experience orb at the given location with the given reward.
void PrepareChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr< cChunkCoordCallback > a_CallAfter={})
Queues the chunk for preparing - making sure that it's generated and lit.
void TickWeather(float a_Dt)
Handles the weather in each tick.
int GetMaxSugarcaneHeight(void) const
virtual void BroadcastSoundEffect(const AString &a_SoundName, Vector3d a_Position, float a_Volume, float a_Pitch, const cClientHandle *a_Exclude=nullptr) override
bool ForEachDropperInChunk(int a_ChunkX, int a_ChunkZ, cDropperCallback a_Callback)
Calls the callback for each dropper in the specified chunk; returns true if all droppers processed...
void SetLinkedEndWorldName(const AString &a_Name)
bool m_IsGrassBonemealable
bool IsBiomeNoDownfall(EMCSBiome a_Biome)
Returns true if the biome has no downfall - deserts and savannas.
virtual void BroadcastChatFatal(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
bool IsWeatherSunny(void) const
Returns true if the current weather is sunny.
void MarkChunkDirty(int a_ChunkX, int a_ChunkZ)
int GetTickRandomNumber(int a_Range)
Returns a random number in range [0 .
int m_MinThunderStormTicks
Manages the in-game maps of a single world - Thread safe.
cRedstoneSimulator * InitializeRedstoneSimulator(cIniFile &a_IniFile)
Creates a new redstone simulator.
cEntityList m_EntitiesToAdd
List of entities that are scheduled for adding, waiting for the Tick thread to add them...
virtual bool WriteBlockArea(cBlockArea &a_Area, int a_MinBlockX, int a_MinBlockY, int a_MinBlockZ, int a_DataTypes) override
Writes the block area into the specified coords.
std::vector< AString > AStringVector
std::vector< OwnedEntity > cEntityList
void SetLinkedOverworldName(const AString &a_Name)
bool AddChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle *a_Client)
Adds client to a chunk, if not already present; returns true if added, false if present.
virtual void BroadcastBlockEntity(Vector3i a_BlockPos, const cClientHandle *a_Exclude=nullptr) override
If there is a block entity at the specified coods, sends it to all clients except a_Exclude...
cLightingThread m_Lighting
cCriticalSection m_CSPlayers
int m_StorageCompressionFactor
bool ForEachBrewingstandInChunk(int a_ChunkX, int a_ChunkZ, cBrewingstandCallback a_Callback)
Calls the callback for each brewingstand in the specified chunk; returns true if all brewingstands pr...
size_t m_UnusedDirtyChunksCap
The maximum number of allowed unused dirty chunks for this world.
bool m_IsBeetrootsBonemealable
void SetShouldUseChatPrefixes(bool a_Flag)
Container for a single chat message composed of multiple functional parts.
bool GetBlocks(sSetBlockVector &a_Blocks, bool a_ContinueOnFailure)
Retrieves block types of the specified blocks.
bool GetLargeTreeAdjustment(int &a_BlockX, int &a_BlockY, int &a_BlockZ, NIBBLETYPE a_SaplingMeta)
Checks if the sapling at the specified block coord is a part of a large-tree sapling (2x2)...
virtual void BroadcastDestroyEntity(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
void InitializeAndLoadMobSpawningValues(cIniFile &a_IniFile)
Sets mob spawning values if nonexistant to their dimension specific defaults.
void AddQueuedPlayers(void)
Adds the players queued in the m_PlayersToAdd queue into the m_Players list.
cCriticalSection m_CSTasks
Guards the m_Tasks.
void TickQueuedBlocks(void)
Processes the blocks queued for ticking with a delay (m_BlockTickQueue[])
bool GrowTree(int a_BlockX, int a_BlockY, int a_BlockZ)
Grows a tree at the specified coords.
bool DoWithDispenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDispenserCallback a_Callback)
Calls the callback for the dispenser at the specified coords; returns false if there's no dispenser a...
cCriticalSection m_CSClients
Guards m_Clients.
void SetSavingEnabled(bool a_IsSavingEnabled)
Set whether saving chunks is enabled.
double GetSpawnY(void) const
bool m_bCommandBlocksEnabled
Whether command blocks are enabled or not.
bool GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_BlockMeta)
Retrieves the block type and meta at the specified coords.
virtual void BroadcastSoundParticleEffect(const EffectID a_EffectID, Vector3i a_SrcPos, int a_Data, const cClientHandle *a_Exclude=nullptr) override
Interface class used for comparing clients of two chunks.
bool GetSignLines(int a_BlockX, int a_BlockY, int a_BlockZ, AString &a_Line1, AString &a_Line2, AString &a_Line3, AString &a_Line4)
Retrieves the test on the sign at the specified coords; returns false if there's no sign at those coo...
UInt32 SpawnFallingBlock(int a_X, int a_Y, int a_Z, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
OBSOLETE, use the Vector3i-based overload instead.
virtual void BroadcastAttachEntity(const cEntity &a_Entity, const cEntity &a_Vehicle) override
virtual bool ForEachChunkInRect(int a_MinChunkX, int a_MaxChunkX, int a_MinChunkZ, int a_MaxChunkZ, cChunkDataCallback &a_Callback) override
Calls the callback for each chunk in the coords specified (all cords are inclusive).
eGameMode GetGameMode(void) const
Returns the current game mode.
cLightingThread & GetLightingThread(void)
bool ForEachBlockEntityInChunk(int a_ChunkX, int a_ChunkZ, cBlockEntityCallback a_Callback)
Calls the callback for each block entity in the specified chunk; returns true if all block entities p...
virtual void BroadcastTimeUpdate(const cClientHandle *a_Exclude=nullptr) override
NIBBLETYPE GetSkyDarkness()
Get the current darkness level based on the time.
bool GrowRipePlant(Vector3i a_BlockPos)
Grows the plant at the specified block to its ripe stage.
const AString & GetDataPath(void) const
Returns the data path to the world data.
std::chrono::duration< Int64, cTickTime::period > cTickTimeLong
cFluidSimulator * GetLavaSimulator(void)
cMapManager & GetMapManager(void)
Returns the associated map manager instance.
virtual bool IsWeatherWetAt(int a_BlockX, int a_BlockZ) override
Returns true if it is raining or storming at the specified location.
bool m_IsTallGrassBonemealable
cWorld(const AString &a_WorldName, const AString &a_DataPath, cDeadlockDetect &a_DeadlockDetect, const AStringVector &a_WorldNames, eDimension a_Dimension=dimOverworld, const AString &a_LinkedOverworldName={})
Construct the world and read settings from its ini file.
void TickClients(float a_Dt)
Ticks all clients that are in this world.
bool IsGameModeAdventure(void) const
Returns true if the world is in Adventure mode.
void SetMaxViewDistance(int a_MaxViewDistance)
void Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_LastTickDurationMSec)
std::list< cClientHandle * > cClientHandles
virtual int GetTimeOfDay(void) const override
cTickTimeLong m_LastTimeUpdate
virtual void BroadcastBlockAction(Vector3i a_BlockPos, Byte a_Byte1, Byte a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle *a_Exclude=nullptr) override
AString m_DataPath
The path to the root directory for the world files.
void CollectPickupsByPlayer(cPlayer &a_Player)
void MarkChunkSaving(int a_ChunkX, int a_ChunkZ)
bool ForEachEntity(cEntityCallback a_Callback)
Calls the callback for each entity in the entire world; returns true if all entities processed...
bool FindAndDoWithPlayer(const AString &a_PlayerNameHint, cPlayerListCallback a_Callback)
Finds a player from a partial or complete player name and calls the callback - case-insensitive.
cChunkSender m_ChunkSender
size_t GetQueueLength(void)
virtual void SpawnItemPickups(const cItems &a_Pickups, double a_BlockX, double a_BlockY, double a_BlockZ, double a_FlyAwaySpeed=1.0, bool a_IsPlayerCreated=false) override
OBSOLETE, use the Vector3d-based overload instead.
bool m_VillagersShouldHarvestCrops
bool IsChunkLighted(int a_ChunkX, int a_ChunkZ)
virtual Int64 GetWorldAge(void) const override
bool IsGameModeCreative(void) const
Returns true if the world is in Creative mode.
cScoreboard & GetScoreBoard(void)
Returns the associated scoreboard instance.
UInt32 CreateProjectile(Vector3d a_Pos, cProjectileEntity::eKind a_Kind, cEntity *a_Creator, const cItem *a_Item, const Vector3d *a_Speed=nullptr)
Creates a projectile of the specified type.
std::vector< UInt32 > SpawnSplitExperienceOrbs(double a_X, double a_Y, double a_Z, int a_Reward)
OBSOLETE, use the Vector3d-based overload instead.
bool DoWithNearestPlayer(Vector3d a_Pos, double a_RangeLimit, cPlayerListCallback a_Callback, bool a_CheckLineOfSight=true, bool a_IgnoreSpectator=true)
Calls the callback for nearest player for given position, Returns false if player not found...
void Stop(cDeadlockDetect &a_DeadlockDetect)
Stops threads that belong to this world (part of deinit).
virtual void BroadcastPlayerListAddPlayer(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
void LOGWARNING(const char *a_Format, fmt::ArgList a_ArgList)
AString GetLinkedEndWorldName(void) const
bool DoWithCommandBlockAt(int a_BlockX, int a_BlockY, int a_BlockZ, cCommandBlockCallback a_Callback)
Calls the callback for the command block at the specified coords; returns false if there's no command...
size_t GetLightingQueueLength(void)
std::set< eMonsterType > m_AllowedMobs
virtual void BroadcastChatSuccess(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
bool ForEachEntityInChunk(int a_ChunkX, int a_ChunkZ, cEntityCallback a_Callback)
Calls the callback for each entity in the specified chunk; returns true if all entities processed...
virtual eDimension GetDimension(void) const override
NIBBLETYPE GetBlockSkyLight(int a_BlockX, int a_BlockY, int a_BlockZ)
OBSOLETE, use the Vector3-based overload instead.
virtual void BroadcastPlayerListUpdateGameMode(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
void CompareChunkClients(int a_ChunkX1, int a_ChunkZ1, int a_ChunkX2, int a_ChunkZ2, cClientDiffCallback &a_Callback)
Compares clients of two chunks, calls the callback accordingly.
bool m_IsPotatoesBonemealable
bool m_IsCactusBonemealable
virtual void SetMinNetherPortalHeight(int a_NewMinHeight) override
bool VillagersShouldHarvestCrops(void) const
UInt32 SpawnMinecart(Vector3d a_Pos, int a_MinecartType, const cItem &a_Content=cItem(), int a_BlockHeight=1)
Spawns an minecart at the given coordinates.
bool m_IsSaplingBonemealable
bool DoWithChestAt(int a_BlockX, int a_BlockY, int a_BlockZ, cChestCallback a_Callback)
Calls the callback for the chest at the specified coords; returns false if there's no chest at those ...
void SetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ, NIBBLETYPE a_MetaData, bool a_ShouldMarkDirty=true, bool a_ShouldInformClients=true)
OBSOLETE, use the Vector3-based overload instead.
size_t GetStorageSaveQueueLength(void)
void FastSetBlock(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
OBSOLETE, use the Vector3-based overload instead.
virtual void BroadcastLeashEntity(const cEntity &a_Entity, const cEntity &a_EntityLeashedTo) override
virtual void BroadcastChatInfo(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
bool ShouldLavaSpawnFire(void) const
cWorldStorage & GetStorage(void)
void ScheduleTask(int a_DelayTicks, std::function< void(cWorld &)> a_Task)
Queues a lambda task onto the tick thread, with the specified delay.
int GetMaxCactusHeight(void) const
bool DoWithPlayer(const AString &a_PlayerName, cPlayerListCallback a_Callback)
Calls the callback for the player of the given name; returns true if the player was found and the cal...
double GetSpawnZ(void) const
eShrapnelLevel m_TNTShrapnelLevel
The level of DoExplosionAt() projecting random affected blocks as FallingBlock entities See the eShra...
size_t GetLoadQueueLength(void)
std::list< cPlayer * > cPlayerList
void CastThunderbolt(Vector3i a_Block)
Casts a thunderbolt at the specified coords.
bool m_IsPumpkinStemBonemealable
bool IsChunkValid(int a_ChunkX, int a_ChunkZ) const
Returns true iff the chunk is present and valid.
The root of the object hierarchy.
void ChunkLoadFailed(int a_ChunkX, int a_ChunkZ)
Marks the chunk as failed-to-load:
bool GetChunkData(cChunkCoords a_Coords, cChunkDataCallback &a_Callback) const
Calls the callback with the chunk's data, if available (with ChunkCS locked).
bool ShouldBroadcastDeathMessages(void) const
void GenerateRandomSpawn(int a_MaxSpawnRadius)
Generates a random spawnpoint on solid land by walking chunks and finding their biomes.
virtual void BroadcastParticleEffect(const AString &a_ParticleName, Vector3f a_Src, Vector3f a_Offset, float a_ParticleData, int a_ParticleAmount, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastTeleportEntity(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastPlayerListRemovePlayer(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
eExplosionSource
The source of an explosion.
NIBBLETYPE GetBlockBlockLight(Vector3i a_BlockPos)
Returns the block-light value at the specified block position.
BLOCKTYPE GetBlock(int a_BlockX, int a_BlockY, int a_BlockZ)
OBSOLETE, use the Vector3-based overload instead.
void WakeUpSimulatorsInArea(const cCuboid &a_Area)
Wakes up the simulators for the specified area of blocks.
int GetTicksUntilWeatherChange(void) const
virtual int GetHeight(int a_BlockX, int a_BlockZ) override
Returns the world height at the specified coords; waits for the chunk to get loaded / generated...
void SetNextBlockTick(int a_BlockX, int a_BlockY, int a_BlockZ)
Sets the blockticking to start at the specified block.
UInt32 SpawnMobFinalize(std::unique_ptr< cMonster > a_Monster)
Wraps cEntity::Initialize, doing Monster-specific things before spawning the monster.
std::vector< BlockTickQueueItem * > m_BlockTickQueue
cClientHandlePtrs m_Clients
List of clients in this world, these will be ticked by this world.
cChunkMap * GetChunkMap(void)
bool SetSpawn(double a_X, double a_Y, double a_Z)
Set default spawn at the given coordinates.
bool IsWeatherRain(void) const
Returns true if the current weather is rainy.
bool GrowRipePlant(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_IsByBonemeal=false)
OBSOLETE, use the Vector3-based overload instead.
bool SetBiomeAt(int a_BlockX, int a_BlockZ, EMCSBiome a_Biome)
Sets the biome at the specified coords.
virtual void BroadcastCollectEntity(const cEntity &a_Pickup, const cPlayer &a_Player, int a_Count, const cClientHandle *a_Exclude=nullptr) override
void TickQueuedTasks(void)
Executes all tasks queued onto the tick thread.
virtual ~cWorld() override
const AString & GetName(void) const
Returns the name of the world.
bool SetAreaBiome(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, EMCSBiome a_Biome)
Sets the biome at the area.
int GrowCactus(int a_BlockX, int a_BlockY, int a_BlockZ, int a_NumBlocksToGrow)
Grows a cactus present at the block specified by the amount of blocks specified, up to the max height...
int GetQueueLength() const
Implementation of the callbacks that the ChunkGenerator uses to store new chunks and interface to plu...
virtual std::vector< UInt32 > SpawnSplitExperienceOrbs(Vector3d a_Pos, int a_Reward) override
Spawns experience orbs of the specified total value at the given location.
virtual void BroadcastScoreUpdate(const AString &a_Objective, const AString &a_Player, cObjective::Score a_Score, Byte a_Mode) override
cCriticalSection m_CSPlayersToAdd
Guards m_PlayersToAdd.
cChunkGeneratorThread & GetGenerator(void)
void SetCommandBlocksEnabled(bool a_Flag)
bool SetCommandBlockCommand(int a_BlockX, int a_BlockY, int a_BlockZ, const AString &a_Command)
Sets the command block command.
bool IsGameModeSurvival(void) const
Returns true if the world is in Survival mode.
cClientHandles m_ClientsToRemove
Clients that are scheduled for removal (ticked in another world), waiting for TickClients() to remove...
void ReplaceBlocks(const sSetBlockVector &a_Blocks, BLOCKTYPE a_FilterBlockType)
Replaces world blocks with a_Blocks, if they are of type a_FilterBlockType.
bool IsWeatherRainAt(int a_BlockX, int a_BlockZ)
Returns true if it is raining at the specified location.
bool DoWithBeaconAt(int a_BlockX, int a_BlockY, int a_BlockZ, cBeaconCallback a_Callback)
Calls the callback for the beacon at the specified coords; returns false if there's no beacon at thos...
virtual int GetMaxNetherPortalWidth(void) const override
virtual void BroadcastEntityHeadLook(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
bool IsWeatherStormAt(int a_BlockX, int a_BlockZ)
Returns true if the weather is stormy at the specified location.
bool IsWeatherStorm(void) const
Returns true if the current weather is stormy.
virtual void BroadcastChatDeath(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
int m_MaxNetherPortalWidth
virtual void BroadcastUnleashEntity(const cEntity &a_Entity) override
AString m_LinkedNetherWorldName
Name of the nether world - where Nether portals should teleport.
virtual void BroadcastEntityVelocity(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual void DoExplosionAt(double a_ExplosionSize, double a_BlockX, double a_BlockY, double a_BlockZ, bool a_CanCauseFire, eExplosionSource a_Source, void *a_SourceData) override
Does an explosion with the specified strength at the specified coordinates.
cChunkGeneratorCallbacks m_GeneratorCallbacks
The callbacks that the ChunkGenerator uses to store new chunks and interface to plugins.
virtual void BroadcastWeather(eWeather a_Weather, const cClientHandle *a_Exclude=nullptr) override
RAII for cCriticalSection - locks the CS on creation, unlocks on destruction.
bool ForEachChestInChunk(int a_ChunkX, int a_ChunkZ, cChestCallback a_Callback)
Calls the callback for each chest in the specified chunk; returns true if all chests processed...
UInt32 SpawnPrimedTNT(double a_X, double a_Y, double a_Z, int a_FuseTimeInSec=80, double a_InitialVelocityCoeff=1)
bool m_IsSugarcaneBonemealable
void QueueLightChunk(int a_ChunkX, int a_ChunkZ, std::unique_ptr< cChunkCoordCallback > a_Callback={})
Queues a chunk for lighting; a_Callback is called after the chunk is lighted.
void FastSetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Sets the block at the specified coords to the specified value.
bool IsTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ)
Is the trapdoor open? Returns false if there is no trapdoor at the specified coords.
bool m_bUseChatPrefixes
Whether prefixes such as [INFO] are prepended to SendMessageXXX() / BroadcastChatXXX() functions...
int GetGeneratorQueueLength(void)
bool DoWithPlayerByUUID(const cUUID &a_PlayerUUID, cPlayerListCallback a_Callback)
Finds the player over his uuid and calls the callback.
void RemoveChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle *a_Client)
Removes client from the chunk specified.
std::unique_ptr< cEntity > OwnedEntity
void SetTicksUntilWeatherChange(int a_WeatherInterval)
bool GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_Meta, NIBBLETYPE &a_SkyLight, NIBBLETYPE &a_BlockLight)
Queries the whole block specification from the world.
void SendBlockEntity(int a_BlockX, int a_BlockY, int a_BlockZ, cClientHandle &a_Client)
If there is a block entity at the specified coords, sends it to the client specified.
AString m_StorageSchema
Name of the storage schema used to load and save chunks.
void SetTNTShrapnelLevel(eShrapnelLevel a_Flag)
cItems PickupsFromBlock(Vector3i a_BlockPos, const cEntity *a_Digger=nullptr, const cItem *a_Tool=nullptr)
Returns all the pickups that would result if the a_Digger dug up the block at a_BlockPos using a_Tool...
NIBBLETYPE BlockNibbles[NumBlocks/2]
The type used for block data in nibble format, AXIS_ORDER ordering.
bool ShouldBroadcastAchievementMessages(void) const
NIBBLETYPE GetBlockBlockLight(int a_BlockX, int a_BlockY, int a_BlockZ)
OBSOLETE, use the Vector3-based overload instead.
EMCSBiome GetBiomeAt(int a_BlockX, int a_BlockZ)
Returns the biome at the specified coords.
void SendChunkTo(int a_ChunkX, int a_ChunkZ, cChunkSender::eChunkPriority a_Priority, cClientHandle *a_Client)
Sends the chunk to the client specified, if the client doesn't have the chunk yet.
void UseBlockEntity(cPlayer *a_Player, int a_BlockX, int a_BlockY, int a_BlockZ)
a_Player is using block entity at [x, y, z], handle that:
void TabCompleteUserName(const AString &a_Text, AStringVector &a_Results)
Appends all usernames starting with a_Text (case-insensitive) into Results.
bool HasEntity(UInt32 a_UniqueID)
Returns true if an entity with the specified UniqueID exists in the world.
cRedstoneSimulator * GetRedstoneSimulator(void)
bool GrowMelonPumpkin(int a_BlockX, int a_BlockY, int a_BlockZ, BLOCKTYPE a_BlockType)
Grows a melon or a pumpkin next to the block specified (assumed to be the stem); returns true if the ...
bool CheckPlayerSpawnPoint(int a_PosX, int a_PosY, int a_PosZ)
Check if player starting point is acceptable.
The interface through which the generated chunks are handed to the cWorld or whoever created us...
void AddPlayer(std::unique_ptr< cPlayer > a_Player, cWorld *a_OldWorld=nullptr)
Adds the player to the world.
AString m_LinkedEndWorldName
Name of the End world - where End portals should teleport.
int GetSeed(void)
Returns the seed of the world.
cSetChunkDataPtrs m_SetChunkDataQueue
Queue for the chunk data to be set into m_ChunkMap by the tick thread.
bool m_IsPumpkinBonemealable
cTickTimeLong m_LastChunkCheck
The fire simulator takes care of the fire blocks.
bool m_ShouldLavaSpawnFire
cRedstoneSimulator * m_RedstoneSimulator
std::unique_ptr< cSimulatorManager > m_SimulatorManager
virtual void BroadcastUseBed(const cEntity &a_Entity, Vector3i a_BlockPos) override
void SetBlockMeta(Vector3i a_BlockPos, NIBBLETYPE a_MetaData, bool a_ShouldMarkDirty=true, bool a_ShouldInformClients=true)
Sets the meta for the specified block, while keeping the blocktype.
size_t GetStorageLoadQueueLength(void)
std::list< cClientHandlePtr > cClientHandlePtrs
virtual void BroadcastEntityLook(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
bool DoWithFlowerPotAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFlowerPotCallback a_Callback)
Calls the callback for the flower pot at the specified coords; returns false if there's no flower pot...
eDimension m_Dimension
The dimension of the world, used by the client to provide correct lighting scheme.
bool DoWithFurnaceAt(int a_BlockX, int a_BlockY, int a_BlockZ, cFurnaceCallback a_Callback)
Calls the callback for the furnace at the specified coords; returns false if there's no furnace at th...
OwnedEntity RemoveEntity(cEntity &a_Entity)
Removes the entity from the world.
void UnloadUnusedChunks(void)
Unloads all chunks immediately.
void SetWeather(eWeather a_NewWeather)
Sets the specified weather; resets weather interval; asks and notifies plugins of the change...
void SetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Sets the block at the specified coords to the specified value.
void WakeUpSimulators(int a_BlockX, int a_BlockY, int a_BlockZ)
virtual void BroadcastThunderbolt(Vector3i a_BlockPos, const cClientHandle *a_Exclude=nullptr) override
void SetChunkAlwaysTicked(int a_ChunkX, int a_ChunkZ, bool a_AlwaysTicked=true)
Increments (a_AlwaysTicked == true) or decrements (false) the m_AlwaysTicked counter for the specifie...
NIBBLETYPE GetBlockMeta(int a_BlockX, int a_BlockY, int a_BlockZ)
OBSOLETE, use the Vector3-based overload instead.
void SetChunkData(cSetChunkData &a_SetChunkData)
Sets the specified chunk data into the chunkmap.
The actual world storage class.
cFluidSimulator * m_LavaSimulator
bool m_BroadcastAchievementMessages
std::unique_ptr< cSetChunkData > cSetChunkDataPtr
The interface that all chunk generators must implement to provide the generated chunks.
void RegenerateChunk(int a_ChunkX, int a_ChunkZ)
Regenerate the given chunk:
virtual void SetMaxNetherPortalWidth(int a_NewMaxWidth) override
cFluidSimulator * InitializeFluidSimulator(cIniFile &a_IniFile, const char *a_FluidName, BLOCKTYPE a_SimulateBlock, BLOCKTYPE a_StationaryBlock)
Creates a new fluid simulator, loads its settings from the inifile (a_FluidName section) ...
int m_MaxNetherPortalHeight
std::vector< sSetBlock > sSetBlockVector
std::vector< BlockTickQueueItem * > m_BlockTickQueueCopy
bool IsSavingEnabled(void) const
Get whether saving chunks is enabled.
std::list< std::pair< std::unique_ptr< cPlayer >, cWorld * > > cAwaitingPlayerList
virtual void SendBlockTo(int a_X, int a_Y, int a_Z, cPlayer &a_Player) override
Sends the block on those coords to the player.
A simple RAII locker for the chunkmap - locks the chunkmap in its constructor, unlocks it in the dest...
std::unique_ptr< cSandSimulator > m_SandSimulator
virtual UInt32 SpawnExperienceOrb(double a_X, double a_Y, double a_Z, int a_Reward) override
OBSOLETE, use the Vector3d-based overload instead.
virtual void BroadcastEntityStatus(const cEntity &a_Entity, Int8 a_Status, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastChat(const AString &a_Message, const cClientHandle *a_Exclude=nullptr, eMessageType a_ChatPrefix=mtCustom) override
This class bridges a vector of cItem for safe access via Lua.
bool m_IsBigFlowerBonemealable
bool AreCommandBlocksEnabled(void) const
std::chrono::milliseconds m_TimeOfDay
unsigned int m_MaxPlayers
cAwaitingPlayerList m_PlayersToAdd
List of players that are scheduled for adding, waiting for the Tick thread to add them...
bool m_IsDaylightCycleEnabled
bool DoWithDropSpenserAt(int a_BlockX, int a_BlockY, int a_BlockZ, cDropSpenserCallback a_Callback)
Calls the callback for the dropspenser at the specified coords; returns false if there's no dropspens...
double GetSpawnX(void) const
virtual bool ForEachPlayer(cPlayerListCallback a_Callback) override
Calls the callback for each player in the list; returns true if all players processed, false if the callback aborted by returning true.