summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLukas Pioch <lukas@zgow.de>2017-05-02 13:16:59 +0200
committerLukas Pioch <lukas@zgow.de>2017-05-08 06:31:45 +0200
commit5580d558a5ede21f856d7b77c3f1ab99a4f088c4 (patch)
tree24772f12098aac2d4576ca6a46bbec47a188f282 /src
parentCorrected brewingstand and added support for fuel (diff)
downloadcuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar.gz
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar.bz2
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar.lz
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar.xz
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.tar.zst
cuberite-5580d558a5ede21f856d7b77c3f1ab99a4f088c4.zip
Diffstat (limited to '')
-rw-r--r--src/Items/ItemBoat.h7
-rw-r--r--src/Items/ItemFishingRod.h7
-rw-r--r--src/Items/ItemMinecart.h7
-rw-r--r--src/Items/ItemPainting.h7
-rw-r--r--src/Simulator/SandSimulator.cpp7
-rw-r--r--src/World.cpp47
6 files changed, 70 insertions, 12 deletions
diff --git a/src/Items/ItemBoat.h b/src/Items/ItemBoat.h
index be1663eef..ced5ec3a8 100644
--- a/src/Items/ItemBoat.h
+++ b/src/Items/ItemBoat.h
@@ -96,7 +96,12 @@ public:
// Spawn block at water level
cBoat * Boat = new cBoat(x + 0.5, y + 0.5, z + 0.5);
- Boat->Initialize(*a_World);
+ if (!Boat->Initialize(*a_World))
+ {
+ delete Boat;
+ Boat = nullptr;
+ return false;
+ }
// Remove boat from players hand
if (!a_Player->IsGameModeCreative())
diff --git a/src/Items/ItemFishingRod.h b/src/Items/ItemFishingRod.h
index fa27e08f6..3958b12e5 100644
--- a/src/Items/ItemFishingRod.h
+++ b/src/Items/ItemFishingRod.h
@@ -251,7 +251,12 @@ public:
else
{
cFloater * Floater = new cFloater(a_Player->GetPosX(), a_Player->GetStance(), a_Player->GetPosZ(), a_Player->GetLookVector() * 15, a_Player->GetUniqueID(), static_cast<int>(100 + static_cast<unsigned int>(a_World->GetTickRandomNumber(800)) - (a_Player->GetEquippedItem().m_Enchantments.GetLevel(cEnchantments::enchLure) * 100)));
- Floater->Initialize(*a_World);
+ if (!Floater->Initialize(*a_World))
+ {
+ delete Floater;
+ Floater = nullptr;
+ return false;
+ }
a_Player->SetIsFishing(true, Floater->GetUniqueID());
}
return true;
diff --git a/src/Items/ItemMinecart.h b/src/Items/ItemMinecart.h
index 6344c0178..623342d41 100644
--- a/src/Items/ItemMinecart.h
+++ b/src/Items/ItemMinecart.h
@@ -73,7 +73,12 @@ public:
return false;
}
} // switch (m_ItemType)
- Minecart->Initialize(*a_World);
+ if (!Minecart->Initialize(*a_World))
+ {
+ delete Minecart;
+ Minecart = nullptr;
+ return false;
+ }
if (!a_Player->IsGameModeCreative())
{
diff --git a/src/Items/ItemPainting.h b/src/Items/ItemPainting.h
index dd35931dd..3432583ca 100644
--- a/src/Items/ItemPainting.h
+++ b/src/Items/ItemPainting.h
@@ -71,7 +71,12 @@ public:
};
cPainting * Painting = new cPainting(gPaintingTitlesList[a_World->GetTickRandomNumber(ARRAYCOUNT(gPaintingTitlesList) - 1)].Title, a_BlockFace, a_BlockX, a_BlockY, a_BlockZ);
- Painting->Initialize(*a_World);
+ if (!Painting->Initialize(*a_World))
+ {
+ delete Painting;
+ Painting = nullptr;
+ return false;
+ }
if (!a_Player->IsGameModeCreative())
{
diff --git a/src/Simulator/SandSimulator.cpp b/src/Simulator/SandSimulator.cpp
index 59990cea3..63fd8477d 100644
--- a/src/Simulator/SandSimulator.cpp
+++ b/src/Simulator/SandSimulator.cpp
@@ -62,7 +62,12 @@ void cSandSimulator::SimulateChunk(std::chrono::milliseconds a_Dt, int a_ChunkX,
);
*/
cFallingBlock * FallingBlock = new cFallingBlock(Pos, BlockType, a_Chunk->GetMeta(itr->x, itr->y, itr->z));
- FallingBlock->Initialize(m_World);
+ if (!FallingBlock->Initialize(m_World))
+ {
+ delete FallingBlock;
+ FallingBlock = nullptr;
+ continue;
+ }
a_Chunk->SetBlock(itr->x, itr->y, itr->z, E_BLOCK_AIR, 0);
}
}
diff --git a/src/World.cpp b/src/World.cpp
index 7c16ae980..2614ead7b 100644
--- a/src/World.cpp
+++ b/src/World.cpp
@@ -2183,7 +2183,11 @@ void cWorld::SpawnItemPickups(const cItems & a_Pickups, double a_BlockX, double
a_BlockX, a_BlockY, a_BlockZ,
*itr, IsPlayerCreated, SpeedX, SpeedY, SpeedZ
);
- Pickup->Initialize(*this);
+ if (!Pickup->Initialize(*this))
+ {
+ delete Pickup;
+ Pickup = nullptr;
+ }
}
}
@@ -2204,7 +2208,11 @@ void cWorld::SpawnItemPickups(const cItems & a_Pickups, double a_BlockX, double
a_BlockX, a_BlockY, a_BlockZ,
*itr, IsPlayerCreated, static_cast<float>(a_SpeedX), static_cast<float>(a_SpeedY), static_cast<float>(a_SpeedZ)
);
- Pickup->Initialize(*this);
+ if (!Pickup->Initialize(*this))
+ {
+ delete Pickup;
+ Pickup = nullptr;
+ }
}
}
@@ -2215,7 +2223,12 @@ void cWorld::SpawnItemPickups(const cItems & a_Pickups, double a_BlockX, double
UInt32 cWorld::SpawnFallingBlock(int a_X, int a_Y, int a_Z, BLOCKTYPE BlockType, NIBBLETYPE BlockMeta)
{
cFallingBlock * FallingBlock = new cFallingBlock(Vector3i(a_X, a_Y, a_Z), BlockType, BlockMeta);
- FallingBlock->Initialize(*this);
+ if (!FallingBlock->Initialize(*this))
+ {
+ delete FallingBlock;
+ FallingBlock = nullptr;
+ return cEntity::INVALID_ID;
+ }
return FallingBlock->GetUniqueID();
}
@@ -2232,7 +2245,12 @@ UInt32 cWorld::SpawnExperienceOrb(double a_X, double a_Y, double a_Z, int a_Rewa
}
cExpOrb * ExpOrb = new cExpOrb(a_X, a_Y, a_Z, a_Reward);
- ExpOrb->Initialize(*this);
+ if (!ExpOrb->Initialize(*this))
+ {
+ delete ExpOrb;
+ ExpOrb = nullptr;
+ return cEntity::INVALID_ID;
+ }
return ExpOrb->GetUniqueID();
}
@@ -2255,7 +2273,12 @@ UInt32 cWorld::SpawnMinecart(double a_X, double a_Y, double a_Z, int a_MinecartT
return cEntity::INVALID_ID;
}
} // switch (a_MinecartType)
- Minecart->Initialize(*this);
+ if (!Minecart->Initialize(*this))
+ {
+ delete Minecart;
+ Minecart = nullptr;
+ return cEntity::INVALID_ID;
+ }
return Minecart->GetUniqueID();
}
@@ -2273,6 +2296,7 @@ UInt32 cWorld::SpawnBoat(double a_X, double a_Y, double a_Z)
if (!Boat->Initialize(*this))
{
delete Boat;
+ Boat = nullptr;
return cEntity::INVALID_ID;
}
return Boat->GetUniqueID();
@@ -2284,7 +2308,12 @@ UInt32 cWorld::SpawnBoat(double a_X, double a_Y, double a_Z)
UInt32 cWorld::SpawnPrimedTNT(double a_X, double a_Y, double a_Z, int a_FuseTicks, double a_InitialVelocityCoeff)
{
cTNTEntity * TNT = new cTNTEntity(a_X, a_Y, a_Z, a_FuseTicks);
- TNT->Initialize(*this);
+ if (!TNT->Initialize(*this))
+ {
+ delete TNT;
+ TNT = nullptr;
+ return cEntity::INVALID_ID;
+ }
TNT->SetSpeed(
a_InitialVelocityCoeff * (GetTickRandomNumber(2) - 1), /** -1, 0, 1 */
a_InitialVelocityCoeff * 2,
@@ -2878,7 +2907,11 @@ void cWorld::SetChunkData(cSetChunkData & a_SetChunkData)
std::swap(a_SetChunkData.GetEntities(), Entities);
for (cEntityList::iterator itr = Entities.begin(), end = Entities.end(); itr != end; ++itr)
{
- (*itr)->Initialize(*this);
+ if (!(*itr)->Initialize(*this))
+ {
+ delete *itr;
+ *itr = nullptr;
+ }
}
// If a client is requesting this chunk, send it to them: