|
Cuberite
A lightweight, fast and extensible game server for Minecraft
|
Go to the documentation of this file.
136 virtual int GetHeight(
int a_BlockX,
int a_BlockZ)
override;
148 bool TryGetHeight(
int a_BlockX,
int a_BlockZ,
int & a_Height);
220 int a_ChunkX,
int a_ChunkZ,
311 void PrepareChunk(
int a_ChunkX,
int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_CallAfter = {});
330 bool SetTrapdoorOpen(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
bool a_Open);
339 void QueueLightChunk(
int a_ChunkX,
int a_ChunkZ, std::unique_ptr<cChunkCoordCallback> a_Callback = {});
344 virtual bool ForEachChunkInRect(
int a_MinChunkX,
int a_MaxChunkX,
int a_MinChunkZ,
int a_MaxChunkZ, cChunkDataCallback & a_Callback)
override;
406 virtual bool WriteBlockArea(
cBlockArea & a_Area,
int a_MinBlockX,
int a_MinBlockY,
int a_MinBlockZ,
int a_DataTypes)
override;
422 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
432 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
434 return SpawnItemPickups(a_Pickups, {a_BlockX, a_BlockY, a_BlockZ}, {a_SpeedX, a_SpeedY, a_SpeedZ}, a_IsPlayerCreated);
442 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
444 return SpawnItemPickup({a_PosX, a_PosY, a_PosZ}, a_Item, {a_SpeedX, a_SpeedY, a_SpeedZ}, a_LifetimeTicks, a_CanCombine);
476 return SpawnMinecart({a_X, a_Y, a_Z}, a_MinecartType, a_Content, a_BlockHeight);
482 LOGWARNING(
"cWorld::SpawnBoat(double, double, double) is deprecated, use cWorld::SpawnBoat(Vector3d) instead.");
483 return SpawnBoat({a_X, a_Y, a_Z}, a_Material);
519 UInt32 SpawnPrimedTNT(
double a_X,
double a_Y,
double a_Z,
int a_FuseTimeInSec = 80,
double a_InitialVelocityCoeff = 1,
bool a_ShouldPlayFuseSound =
true)
521 LOGWARNING(
"cWorld::SpawnPrimedTNT(double, double, double) is deprecated, use cWorld::SpawnPrimedTNT(Vector3d) instead.");
522 return SpawnPrimedTNT({a_X, a_Y, a_Z}, a_FuseTimeInSec, a_InitialVelocityCoeff, a_ShouldPlayFuseSound);
560 return DigBlock({a_X, a_Y, a_Z}, a_Digger);
579 virtual void SendBlockTo(
int a_X,
int a_Y,
int a_Z,
const cPlayer & a_Player)
override;
583 bool SetSpawn(
int a_X,
int a_Y,
int a_Z);
610 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;
667 bool GrowRipePlant(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
bool a_IsByBonemeal =
false)
670 LOGWARNING(
"Warning: cWorld:GrowRipePlant function expects Vector3i-based coords rather than int-based coords. Emulating old-style call.");
763 void GetChunkStats(
int & a_NumValid,
int & a_NumDirty,
int & a_NumInLightingQueue);
794 void QueueBlockForTick(
int a_BlockX,
int a_BlockY,
int a_BlockZ,
int a_TicksToWait);
864 virtual UInt32 SpawnMob(
double a_PosX,
double a_PosY,
double a_PosZ,
eMonsterType a_MonsterType,
bool a_Baby =
false)
override;
910 virtual void Execute(
void)
override;
1094 std::vector<std::pair<std::chrono::milliseconds, std::function<void(
cWorld &)>>>
m_Tasks;
1108 void Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_LastTickDurationMSec);
1114 void TickMobs(std::chrono::milliseconds a_Dt);
1136 bool CanSpawnAt(
int a_X,
int & a_Y,
int a_Z);
int GetSpawnX(void) const
const AString & GetIniFileName(void) const
Returns the name of the world.ini file used by this world.
virtual bool IsChunkValid(cChunkCoords a_Coords) override
Called just before the chunk generation is started, to verify that it hasn't been generated in the me...
void RemoveClientFromChunks(cClientHandle *a_Client)
Removes the client from all chunks it is present in.
std::chrono::milliseconds m_WorldAge
The age of the world.
std::vector< BlockTickQueueItem * > m_BlockTickQueue
virtual void BroadcastUnleashEntity(const cEntity &a_Entity) override
virtual void BroadcastWeather(eWeather a_Weather, const cClientHandle *a_Exclude=nullptr) override
size_t GetLightingQueueLength(void)
UInt32 SpawnMobFinalize(std::unique_ptr< cMonster > a_Monster)
Wraps cEntity::Initialize, doing Monster-specific things before spawning the monster.
bool m_bCommandBlocksEnabled
Whether command blocks are enabled or not.
virtual cBroadcastInterface & GetBroadcastManager(void) 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.
void SetSavingEnabled(bool a_IsSavingEnabled)
Set whether saving chunks is enabled.
bool IsBlockDirectlyWatered(int a_BlockX, int a_BlockY, int a_BlockZ)
void FastSetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Sets the block at the specified coords to the specified value.
std::vector< sSetBlock > sSetBlockVector
size_t GetSaveQueueLength(void)
void GenerateRandomSpawn(int a_MaxSpawnRadius)
Generates a random spawnpoint on solid land by walking chunks and finding their biomes.
virtual void BroadcastBossBarUpdateHealth(const cEntity &a_Entity, UInt32 a_UniqueID, float a_FractionFilled) override
void SetTNTShrapnelLevel(eShrapnelLevel a_Flag)
std::vector< std::pair< OwnedEntity, cWorld * > > m_EntitiesToAdd
List of entities that are scheduled for adding, waiting for the Tick thread to add them.
bool IsWeatherStorm(void) const
Returns true if the current weather is stormy.
Container for a single chat message composed of multiple functional parts.
virtual void BroadcastLeashEntity(const cEntity &a_Entity, const cEntity &a_EntityLeashedTo) override
eExplosionSource
The source of an explosion.
cCSLock(cCriticalSection *a_CS)
size_t GetNumUnusedDirtyChunks(void) const
Returns the number of unused dirty chunks.
void CastThunderbolt(Vector3i a_Block)
Casts a thunderbolt at the specified coords.
size_t GetQueueLength() const
virtual std::vector< UInt32 > SpawnSplitExperienceOrbs(Vector3d a_Pos, int a_Reward) override
Spawns experience orbs of the specified total value at the given location.
void PlaceBlock(const Vector3i a_Position, const BLOCKTYPE a_BlockType, const NIBBLETYPE a_BlockMeta)
Replaces the specified block with another, and calls the OnPlaced block handler.
std::unique_ptr< cFireSimulator > m_FireSimulator
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.
bool IsWeatherWet(void) const
Returns true if the world currently has any precipitation - rain, storm or snow.
bool IsBiomeNoDownfall(EMCSBiome a_Biome)
Returns true if the biome has no downfall - deserts and savannas.
UInt32 SpawnEnderCrystal(Vector3d a_Pos, bool a_ShowBottom)
Spawns a new ender crystal at the specified block coords.
virtual void BroadcastEntityEquipment(const cEntity &a_Entity, short a_SlotNum, const cItem &a_Item, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastScoreUpdate(const AString &a_Objective, const AString &a_Player, cObjective::Score a_Score, Byte a_Mode) override
std::set< eMonsterType > m_AllowedMobs
bool ForEachEntity(cEntityCallback a_Callback)
Calls the callback for each entity in the entire world; returns true if all entities processed,...
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.
void ChunkLoadFailed(int a_ChunkX, int a_ChunkZ)
Marks the chunk as failed-to-load:
virtual void BroadcastDisplayObjective(const AString &a_Objective, cScoreboard::eDisplaySlot a_Display) override
virtual void SetDaylightCycleEnabled(bool a_IsDaylightCycleEnabled)
Sets the daylight cycle to true / false.
Manages the in-game maps of a single world - Thread safe.
virtual void BroadcastPlayerListUpdateDisplayName(const cPlayer &a_Player, const AString &a_CustomName, const cClientHandle *a_Exclude=nullptr) override
std::vector< cPlayer * > m_Players
void CollectPickupsByEntity(cEntity &a_Entity)
cLightingThread & GetLightingThread(void)
cScoreboard & GetScoreBoard(void)
Returns the associated scoreboard instance.
virtual void Execute(void) override
This function, overloaded by the descendants, is called in the new thread.
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).
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...
void QueueSaveAllChunks(void)
Queues a task to save all chunks onto the tick thread.
int GetTickRandomNumber(int a_Range)
Returns a random number in range [0 .
bool SetCommandBlockCommand(Vector3i a_BlockPos, const AString &a_Command)
Represents two sets of coords, minimum and maximum for each direction.
void Stop(cDeadlockDetect &a_DeadlockDetect)
Stops threads that belong to this world (part of deinit).
bool VillagersShouldHarvestCrops(void) const
std::unique_ptr< cEntity > OwnedEntity
AString GetLinkedEndWorldName(void) const
bool SetAreaBiome(int a_MinX, int a_MaxX, int a_MinZ, int a_MaxZ, EMCSBiome a_Biome)
Sets the biome at the area.
cRedstoneSimulator * InitializeRedstoneSimulator(cIniFile &a_IniFile)
Creates a new redstone simulator.
eShrapnelLevel m_TNTShrapnelLevel
The level of DoExplosionAt() projecting random affected blocks as FallingBlock entities See the eShra...
void InitializeAndLoadMobSpawningValues(cIniFile &a_IniFile)
Sets mob spawning values if nonexistant to their dimension specific defaults.
virtual cTickTimeLong GetWorldAge(void) const override
bool IsChunkQueued(int a_ChunkX, int a_ChunkZ) const
Returns true iff the chunk is in the loader / generator queue.
cFluidSimulator * GetLavaSimulator(void)
int GetDefaultWeatherInterval(eWeather a_Weather) const
Returns the default weather interval for the specific weather type.
bool CanSpawnAt(int a_X, int &a_Y, int a_Z)
Can the specified coordinates be used as a spawn point? Returns true if spawn position is valid and s...
virtual void SendBlockTo(int a_X, int a_Y, int a_Z, const cPlayer &a_Player) override
Sends the block at the specified coords to the player.
virtual void BroadcastSoundParticleEffect(const EffectID a_EffectID, Vector3i a_SrcPos, int a_Data, const cClientHandle *a_Exclude=nullptr) override
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.
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.
int GetSeed(void)
Returns the seed of the world.
void TickQueuedBlocks(void)
Processes the blocks queued for ticking with a delay (m_BlockTickQueue[])
void SetBlockMeta(Vector3i a_BlockPos, NIBBLETYPE a_MetaData)
Sets the meta for the specified block, while keeping the blocktype.
virtual cTickTime GetTimeOfDay(void) const override
void TickWeather(float a_Dt)
Handles the weather in each tick.
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.
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...
bool IsSavingEnabled(void) const
Get whether saving chunks is enabled.
std::vector< BlockTickQueueItem * > m_BlockTickQueueCopy
cCriticalSection m_CSTasks
Guards the m_Tasks.
virtual void BroadcastChatFailure(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
int m_MaxNetherPortalHeight
The fire simulator takes care of the fire blocks.
virtual void WakeUpSimulators(Vector3i a_Block) override
Wakes up the simulators for the specified block.
eShrapnelLevel GetTNTShrapnelLevel(void) const
void SetTicksUntilWeatherChange(int a_WeatherInterval)
NIBBLETYPE GetBlockMeta(Vector3i a_BlockPos) const
size_t GetPlayerCount() const
Returns the number of players currently in this world.
virtual ~cWorld() override
virtual void BroadcastSpawnEntity(cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
The interface through which the plugins are called for their OnChunkGenerating / OnChunkGenerated hoo...
bool IsWeatherStormAt(int a_BlockX, int a_BlockZ)
Returns true if the weather is stormy at the specified location.
bool IsWeatherRain(void) const
Returns true if the current weather is rainy.
UInt32 SpawnPrimedTNT(double a_X, double a_Y, double a_Z, int a_FuseTimeInSec=80, double a_InitialVelocityCoeff=1, bool a_ShouldPlayFuseSound=true)
bool m_VillagersShouldHarvestCrops
cChunkGeneratorCallbacks(cWorld &a_World)
int GrowPlantAt(Vector3i a_BlockPos, int a_NumStages=1)
Grows the plant at the specified position by at most a_NumStages.
void SendPlayerList(cPlayer *a_DestPlayer)
virtual void BroadcastTimeUpdate(const cClientHandle *a_Exclude=nullptr) override
virtual bool HasChunkAnyClients(cChunkCoords a_Coords) override
Called when the generator is overloaded to skip chunks that are no longer needed.
void RegenerateChunk(int a_ChunkX, int a_ChunkZ)
Regenerate the given chunk.
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...
cRedstoneSimulator * GetRedstoneSimulator(void)
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::unique_ptr< cSimulatorManager > m_SimulatorManager
bool IsGameModeAdventure(void) const
Returns true if the world is in Adventure mode.
unsigned int m_MaxPlayers
cTickTimeLong GetWorldTickAge() const
void SetCommandBlocksEnabled(bool a_Flag)
bool IsChunkValid(int a_ChunkX, int a_ChunkZ) const
Returns true iff the chunk is present and valid.
unsigned char NIBBLETYPE
The datatype used by nibbledata (meta, light, skylight)
void SetLinkedOverworldName(const AString &a_Name)
std::chrono::milliseconds m_WorldDate
The fully controllable age of the world.
cTickThread(cWorld &a_World)
void SetMaxViewDistance(int a_MaxViewDistance)
eWeather ChooseNewWeather(void)
Chooses a reasonable transition from the current weather to a new weather.
cIsThread(AString &&a_ThreadName)
virtual void BroadcastPlayerListUpdateGameMode(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
virtual void CallHookChunkGenerating(cChunkDesc &a_ChunkDesc) override
Called when the chunk is about to be generated.
cMapManager & GetMapManager(void)
Returns the associated map manager instance.
virtual void BroadcastEntityLook(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
void SendChunkTo(int a_ChunkX, int a_ChunkZ, cChunkSender::Priority a_Priority, cClientHandle *a_Client)
Sends the chunk to the client specified, if the client doesn't have the chunk yet.
bool m_BroadcastDeathMessages
virtual eDimension GetDimension(void) const override
int GetSpawnZ(void) const
virtual void SetMinNetherPortalHeight(int a_NewMinHeight) override
bool IsWeatherRainAt(int a_BlockX, int a_BlockZ)
Returns true if it is raining at the specified location.
bool m_bUseChatPrefixes
Whether prefixes such as [INFO] are prepended to SendMessageXXX() / BroadcastChatXXX() functions.
virtual bool IsChunkQueued(cChunkCoords a_Coords) override
Called to check whether the specified chunk is in the queued state.
int m_MaxNetherPortalWidth
virtual void BroadcastPlayerListRemovePlayer(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
virtual bool IsDaylightCycleEnabled(void) const
Is the daylight cycle enabled?
bool GetChunkData(cChunkCoords a_Coords, cChunkDataCallback &a_Callback) const
Calls the callback with the chunk's data, if available (with ChunkCS locked).
bool m_bFarmlandTramplingEnabled
Takes requests for generating chunks and processes them in a separate thread one by one.
bool IsGameModeCreative(void) const
Returns true if the world is in Creative mode.
void FastSetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Sets the block at the specified coords to the specified value.
int m_StorageCompressionFactor
bool IsFarmlandTramplingEnabled(void) const
Returns true if farmland trampling is enabled.
cFluidSimulator * m_WaterSimulator
AString GetLinkedOverworldName(void) const
std::chrono::milliseconds m_LastChunkCheck
void TickQueuedTasks(void)
Executes all tasks queued onto the tick thread.
bool m_IsDaylightCycleEnabled
cRedstoneSimulator * m_RedstoneSimulator
virtual void SendBlockTo(int a_BlockX, int a_BlockY, int a_BlockZ, const cPlayer &a_Player)=0
Sends the block on those coords to the player.
virtual void BroadcastSoundEffect(const AString &a_SoundName, Vector3d a_Position, float a_Volume, float a_Pitch, const cClientHandle *a_Exclude=nullptr) override
cChunkGeneratorCallbacks m_GeneratorCallbacks
The callbacks that the ChunkGenerator uses to store new chunks and interface to plugins.
void GenerateChunk(int a_ChunkX, int a_ChunkZ)
Generates the given chunk.
bool IsDeepSnowEnabled(void) const
virtual void BroadcastPlayerListUpdatePing() 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.
void MarkChunkDirty(int a_ChunkX, int a_ChunkZ)
void SetWeather(eWeather a_NewWeather)
Sets the specified weather; resets weather interval; asks and notifies plugins of the change.
bool ShouldUseChatPrefixes(void) const
virtual void SetMinNetherPortalWidth(int a_NewMinWidth) override
eMonsterType
Identifies individual monster type.
AString m_DataPath
The path to the root directory for the world files.
void ChangeWeather(void)
Forces a weather change in the next game tick.
virtual void BroadcastChatWarning(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
void Start()
Starts threads that belong to this world.
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
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.
bool IsGameModeSpectator(void) const
Returns true if the world is in Spectator mode.
eDimension m_Dimension
The dimension of the world, used by the client to provide correct lighting scheme.
std::unique_ptr< cSandSimulator > m_SandSimulator
void UnloadUnusedChunks(void)
Unloads all chunks immediately.
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.
UInt32 SpawnExperienceOrb(Vector3d a_Pos, int a_Reward)
Spawns an experience orb at the given location with the given reward.
Interface class used for comparing clients of two chunks.
const AString & GetDataPath(void) const
Returns the data path to the world data.
size_t m_UnusedDirtyChunksCap
The maximum number of allowed unused dirty chunks for this world.
bool IsPVPEnabled(void) const
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)
cTickTimeLong m_WorldTickAge
The time since this world began, in ticks.
Implementation of the callbacks that the ChunkGenerator uses to store new chunks and interface to plu...
The interface through which the generated chunks are handed to the cWorld or whoever created us.
UInt32 SpawnFallingBlock(int a_X, int a_Y, int a_Z, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
OBSOLETE, use the Vector3-based overload instead.
void BroadcastEntityProperties(const cEntity &a_Entity)
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.
bool DigBlock(Vector3i a_BlockPos, const cEntity *a_Digger=nullptr)
Replaces the specified block with air, and calls the OnBroken block handler.
bool SetSignLines(Vector3i a_BlockPos, 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.
bool DoWithPlayerByUUID(const cUUID &a_PlayerUUID, cPlayerListCallback a_Callback)
Finds the player over his uuid and calls the callback.
void InitializeSpawn(void)
virtual void BroadcastRemoveEntityEffect(const cEntity &a_Entity, int a_EffectID, const cClientHandle *a_Exclude=nullptr) override
bool SetTrapdoorOpen(int a_BlockX, int a_BlockY, int a_BlockZ, bool a_Open)
Set the state of a trapdoor.
NIBBLETYPE GetSkyDarkness()
Get the current darkness level based on the time.
size_t GetQueueLength(void)
int GetMaxCactusHeight(void) const
cChunkMap * GetChunkMap(void)
bool GrowTreeByBiome(Vector3i a_BlockPos)
Grows a tree at the specified coords, based on the biome in the place.
std::chrono::milliseconds m_LastSave
void QueueSetChunkData(SetChunkData &&a_SetChunkData)
Puts the chunk data into a queue to be set into the chunkmap in the tick thread.
Vector3< double > Vector3d
void SetNextBlockToTick(const Vector3i a_BlockPos)
Causes the specified block to be ticked on the next Tick() call.
virtual void BroadcastPlayerListHeaderFooter(const cCompositeChat &a_Header, const cCompositeChat &a_Footer) override
void RemoveChunkClient(int a_ChunkX, int a_ChunkZ, cClientHandle *a_Client)
Removes client from the chunk specified.
virtual void SetMaxNetherPortalWidth(int a_NewMaxWidth) override
int GetSpawnY(void) const
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 void BroadcastScoreboardObjective(const AString &a_Name, const AString &a_DisplayName, Byte a_Mode) override
BLOCKTYPE GetBlock(Vector3i a_BlockPos) const
Returns the block type at the specified position.
EMCSBiome
Biome IDs The first batch corresponds to the clientside biomes, used by MineCraft.
bool HasChunkAnyClients(int a_ChunkX, int a_ChunkZ) const
bool ShouldLavaSpawnFire(void) const
int m_MinThunderStormTicks
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.
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...
bool m_BroadcastAchievementMessages
int m_MaxViewDistance
The maximum view distance that a player can have in this 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.
bool m_IsSpawnExplicitlySet
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.
AString m_LinkedNetherWorldName
Name of the nether world - where Nether portals should teleport.
EMCSBiome GetBiomeAt(int a_BlockX, int a_BlockZ)
Returns the biome at the specified coords.
cChunkSender m_ChunkSender
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...
RAII for cCriticalSection - locks the CS on creation, unlocks on destruction.
bool SetCommandBlockCommand(int a_BlockX, int a_BlockY, int a_BlockZ, const AString &a_Command)
Sets the command block command.
bool GrowRipePlant(Vector3i a_BlockPos)
Grows the plant at the specified block to its ripe stage.
AString m_StorageSchema
Name of the storage schema used to load and save chunks.
virtual void SetMaxNetherPortalHeight(int a_NewMaxHeight) override
std::chrono::duration< signed int, std::ratio_multiply< std::chrono::milliseconds::period, std::ratio< 50 > >> cTickTime
UInt32 SpawnBoat(double a_X, double a_Y, double a_Z, cBoat::eMaterial a_Material)
cChunkGeneratorThread m_Generator
The thread responsible for generating chunks.
std::vector< SetChunkData > m_SetChunkDataQueue
Queue for the chunk data to be set into m_ChunkMap by the tick thread.
eWeather GetWeather(void) const
Returns the current weather.
This class bridges a vector of cItem for safe access via Lua.
BLOCKTYPE GetBlock(Vector3i a_BlockPos) const
NIBBLETYPE GetBlockMeta(Vector3i a_BlockPos) const
Returns the block meta at the specified position.
cSimulatorManager * GetSimulatorManager(void)
void TickQueuedEntityAdditions(void)
Adds the entities queued in the m_EntitiesToAdd queue into their chunk.
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 DoWithChunkAt(Vector3i a_BlockPos, cChunkCallback a_Callback)
Calls the callback for the chunk at the block position specified, with ChunkMapCS locked.
cLock(const cWorld &a_World)
virtual int GetMinNetherPortalWidth(void) const override
Returns or sets the minumim or maximum netherportal width.
bool GetBlockTypeMeta(Vector3i a_BlockPos, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_BlockMeta) const
Retrieves the block type and meta at the specified coords.
virtual void BroadcastEntityMetadata(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastEntityPosition(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
bool GetBlockInfo(Vector3i a_BlockPos, BLOCKTYPE &a_BlockType, NIBBLETYPE &a_Meta, NIBBLETYPE &a_SkyLight, NIBBLETYPE &a_BlockLight) const
Queries the whole block specification from the world.
cTickTimeLong GetWorldDate() const
virtual void BroadcastChatSuccess(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
void TabCompleteUserName(const AString &a_Text, AStringVector &a_Results)
Appends all usernames starting with a_Text (case-insensitive) into Results.
bool ShouldBroadcastDeathMessages(void) const
bool DoWithChunk(int a_ChunkX, int a_ChunkZ, cChunkCallback a_Callback)
Calls the callback for the chunk specified, with ChunkMapCS locked.
int GetMaxSugarcaneHeight(void) const
virtual int GetMaxNetherPortalHeight(void) const override
int m_MaxThunderStormTicks
unsigned char BLOCKTYPE
The datatype used by blockdata.
The actual world storage class.
void MarkChunkSaving(int a_ChunkX, int a_ChunkZ)
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,...
bool GetBlocks(sSetBlockVector &a_Blocks, bool a_ContinueOnFailure)
Retrieves block types of the specified blocks.
NIBBLETYPE GetBlockBlockLight(Vector3i a_BlockPos) const
Returns the block-light value at the specified block position.
void QueueUnloadUnusedChunks(void)
Queues a task to unload unused chunks onto the tick thread.
void Tick(std::chrono::milliseconds a_Dt, std::chrono::milliseconds a_LastTickDurationMSec)
bool IsWeatherSunnyAt(int a_BlockX, int a_BlockZ) const
Returns true if it is sunny at the specified location.
void LOGWARNING(std::string_view a_Format, const Args &... args)
OwnedEntity RemoveEntity(cEntity &a_Entity)
Removes the entity from the world.
virtual void BroadcastEntityAnimation(const cEntity &a_Entity, EntityAnimation a_Animation, const cClientHandle *a_Exclude=nullptr) override
AString m_LinkedEndWorldName
Name of the End world - where End portals should teleport.
void ScheduleTask(cTickTime a_DelayTicks, std::function< void(cWorld &)> a_Task)
Queues a lambda task onto the tick thread, with the specified delay.
virtual void OnChunkGenerated(cChunkDesc &a_ChunkDesc) override
Called after the chunk has been generated The interface may store the chunk, send it over network,...
eDimension
Dimension of a world.
bool ShouldBroadcastAchievementMessages(void) const
A simple RAII locker for the chunkmap - locks the chunkmap in its constructor, unlocks it in the dest...
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:
cChunkGeneratorThread & GetGenerator(void)
virtual void BroadcastAttachEntity(const cEntity &a_Entity, const cEntity &a_Vehicle) override
bool GrowTree(Vector3i a_BlockPos)
Grows a tree at the specified coords.
void TickQueuedChunkDataSets()
Sets the chunk data queued in the m_SetChunkDataQueue queue into their chunk.
eGameMode GetGameMode(void) const
Returns the current game mode.
eKind
The kind of the projectile.
void AddEntity(OwnedEntity a_Entity, cWorld *a_OldWorld=nullptr)
Adds the entity into its appropriate chunk; takes ownership of the entity ptr.
size_t GetStorageLoadQueueLength(void)
UInt32 SpawnFallingBlock(Vector3d a_Pos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Spawns an falling block entity at the given position.
virtual void BroadcastCollectEntity(const cEntity &a_Collected, const cEntity &a_Collector, unsigned a_Count, const cClientHandle *a_Exclude=nullptr) override
void TickMobs(std::chrono::milliseconds a_Dt)
Handles the mob spawning / moving / destroying each tick.
Priority
Tag indicating urgency of chunk to be sent.
bool GrowTreeFromSapling(Vector3i a_BlockPos)
Grows a tree from the sapling at the specified coords.
bool AreCommandBlocksEnabled(void) const
virtual bool DoWithBlockEntityAt(Vector3i a_Position, cBlockEntityCallback a_Callback) override
Calls the callback for the block entity at the specified coords; returns false if there's no block en...
const AString & GetName(void) const
Returns the name of the world.
cCriticalSection m_CSEntitiesToAdd
Guards m_EntitiesToAdd.
void SaveAllChunks(void)
Saves all chunks immediately.
virtual bool IsWeatherWetAtXYZ(Vector3i a_Position) override
Returns true if it is raining or storming at the specified location, and the rain reaches (the bottom...
cFluidSimulator * GetWaterSimulator(void)
bool IsWeatherSunny(void) const
Returns true if the current weather is sunny.
AString GetLinkedNetherWorldName(void) const
virtual int GetMaxNetherPortalWidth(void) const override
virtual void BroadcastEntityHeadLook(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastEntityEffect(const cEntity &a_Entity, int a_EffectID, int a_Amplifier, int a_Duration, const cClientHandle *a_Exclude=nullptr) override
void UpdateSkyDarkness(void)
int m_MinNetherPortalWidth
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.
virtual void BroadcastBlockAction(Vector3i a_BlockPos, Byte a_Byte1, Byte a_Byte2, BLOCKTYPE a_BlockType, const cClientHandle *a_Exclude=nullptr) override
cLightingThread m_Lighting
int GetTicksUntilWeatherChange(void) const
void ChunkLighted(int a_ChunkX, int a_ChunkZ, const cChunkDef::BlockNibbles &a_BlockLight, const cChunkDef::BlockNibbles &a_SkyLight)
std::chrono::duration< signed long long int, cTickTime::period > cTickTimeLong
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.
UInt32 SpawnMinecart(Vector3d a_Pos, int a_MinecartType, const cItem &a_Content=cItem(), int a_BlockHeight=1)
Spawns an minecart at the given coordinates.
size_t GetNumChunks() const
Returns the number of chunks loaded
size_t GetLoadQueueLength(void)
bool ForEachLoadedChunk(cFunctionRef< bool(int, int)> a_Callback)
Calls the callback for each loaded chunk.
bool IsGameModeSurvival(void) const
Returns true if the world is in Survival mode.
std::atomic< bool > m_IsSavingEnabled
Whether or not writing chunks to disk is currently enabled.
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.
NIBBLETYPE GetBlockSkyLight(Vector3i a_BlockPos) const
Returns the sky light value at the specified block position.
std::map< cMonster::eFamily, cTickTimeLong > m_LastSpawnMonster
void SetLinkedEndWorldName(const AString &a_Name)
virtual void BroadcastChat(const AString &a_Message, const cClientHandle *a_Exclude=nullptr, eMessageType a_ChatPrefix=mtCustom) override
cCriticalSection m_CSSetChunkDataQueue
CS protecting m_SetChunkDataQueue.
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 SetSpawn(int a_X, int a_Y, int a_Z)
Set default spawn at the given coordinates.
virtual int GetMinNetherPortalHeight(void) const override
Returns or sets the minumim or maximum netherportal height.
virtual bool IsWeatherWetAt(int a_BlockX, int a_BlockZ) override
Returns true if it is raining or storming at the specified location.
virtual void BroadcastPlayerListAddPlayer(const cPlayer &a_Player, const cClientHandle *a_Exclude=nullptr) override
UInt32 SpawnFallingBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Spawns an falling block entity at the given position.
virtual void BroadcastChatInfo(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
cWorldStorage & GetStorage(void)
void SetShouldUseChatPrefixes(bool a_Flag)
NIBBLETYPE BlockNibbles[NumBlocks/2]
The type used for block data in nibble format, AXIS_ORDER ordering.
AString m_LinkedOverworldName
The name of the overworld that portals in this world should link to.
virtual void BroadcastChatFatal(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
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.
The interface that all chunk generators must implement to provide the generated chunks.
virtual void BroadcastChatDeath(const AString &a_Message, const cClientHandle *a_Exclude=nullptr) override
bool m_ShouldLavaSpawnFire
size_t GetStorageSaveQueueLength(void)
std::vector< UInt32 > SpawnSplitExperienceOrbs(double a_X, double a_Y, double a_Z, int a_Reward)
OBSOLETE, use the Vector3d-based overload instead.
int m_MinNetherPortalHeight
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.
Despite the class name, this simulator takes care of all blocks that fall when suspended in the air.
virtual void CallHookChunkGenerated(cChunkDesc &a_ChunkDesc) override
Called after the chunk is generated, before it is handed to the chunk sink.
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 IsChunkLighted(int a_ChunkX, int a_ChunkZ)
virtual bool ForEachPlayer(cPlayerListCallback a_Callback) override
Calls the callback for each player in the list; returns true if all players processed,...
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.
bool CheckPlayerSpawnPoint(int a_PosX, int a_PosY, int a_PosZ)
Check if player starting point is acceptable.
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.
void ForceSendChunkTo(int a_ChunkX, int a_ChunkZ, cChunkSender::Priority a_Priority, cClientHandle *a_Client)
Sends the chunk to the client specified, even if the client already has the chunk.
void SetBlock(Vector3i a_BlockPos, BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta)
Sets the block at the specified coords to the specified value.
size_t GetGeneratorQueueLength(void)
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.
void SetLinkedNetherWorldName(const AString &a_Name)
bool UseBlockEntity(cPlayer *a_Player, int a_X, int a_Y, int a_Z)
a_Player rclked block entity at the coords specified, handle it returns true if the use was successfu...
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.
void MarkChunkSaved(int a_ChunkX, int a_ChunkZ)
bool DigBlock(int a_X, int a_Y, int a_Z, cEntity *a_Digger=nullptr)
OBSOLETE, use the Vector3-based overload instead.
cFluidSimulator * m_LavaSimulator
bool GetLargeTreeAdjustment(Vector3i &a_BlockPos, NIBBLETYPE a_SaplingMeta)
Checks if the sapling at the specified block coord is a part of a large-tree sapling (2x2).
int GetMaxViewDistance(void) const
void QueueTask(std::function< void(cWorld &)> a_Task)
Queues a task onto the tick thread.
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 BroadcastDestroyEntity(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
void WakeUpSimulatorsInArea(const cCuboid &a_Area)
Wakes up the simulators for the specified area of blocks.
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.
virtual void SetTimeOfDay(cTickTime a_TimeOfDay) override
std::vector< std::pair< std::chrono::milliseconds, 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...
virtual void BroadcastThunderbolt(Vector3i a_BlockPos, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastBlockBreakAnimation(UInt32 a_EntityID, Vector3i a_BlockPos, Int8 a_Stage, const cClientHandle *a_Exclude=nullptr) override
bool GrowTreeImage(const sSetBlockVector &a_Blocks)
Imprints the specified blocks into the world, as long as each log block replaces only allowed blocks.
std::vector< AString > AStringVector
virtual void BroadcastEntityVelocity(const cEntity &a_Entity, const cClientHandle *a_Exclude=nullptr) override
virtual void BroadcastDetachEntity(const cEntity &a_Entity, const cEntity &a_PreviousVehicle) override