diff options
author | Bond-009 <bond.009@outlook.com> | 2017-02-26 11:09:06 +0100 |
---|---|---|
committer | Lukas Pioch <lukas@zgow.de> | 2017-03-19 21:57:41 +0100 |
commit | ef85c2e686f79234f5f472b2f498e5bc3e07ce24 (patch) | |
tree | b7d07e333fcbb80b4617eef4695d10b42542aa83 /src/Blocks/BlockDeadBush.h | |
parent | Removed development plugins from settings file (diff) | |
download | cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar.gz cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar.bz2 cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar.lz cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar.xz cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.tar.zst cuberite-ef85c2e686f79234f5f472b2f498e5bc3e07ce24.zip |
Diffstat (limited to 'src/Blocks/BlockDeadBush.h')
-rw-r--r-- | src/Blocks/BlockDeadBush.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Blocks/BlockDeadBush.h b/src/Blocks/BlockDeadBush.h index b86e3557e..9afa2d323 100644 --- a/src/Blocks/BlockDeadBush.h +++ b/src/Blocks/BlockDeadBush.h @@ -10,6 +10,7 @@ class cBlockDeadBushHandler : public cBlockHandler { + typedef cBlockHandler super; public: cBlockDeadBushHandler(BLOCKTYPE a_BlockType) : cBlockHandler(a_BlockType) @@ -37,11 +38,56 @@ public: } } + virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override + { + // Drop 0-3 sticks + cFastRandom random; + int chance = random.NextInt(3); + if (chance != 0) + { + a_Pickups.push_back(cItem(E_ITEM_STICK, static_cast<char>(chance), 0)); + } + } + virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override { UNUSED(a_Meta); return 0; } + + virtual void DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_BlockPluginInterface, cEntity * a_Digger, int a_BlockX, int a_BlockY, int a_BlockZ, bool a_CanDrop) override + { + if (a_CanDrop && (a_Digger != nullptr) && (a_Digger->GetEquippedWeapon().m_ItemType == E_ITEM_SHEARS)) + { + NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ); + cItems Drops; + Drops.Add(m_BlockType, 1, Meta); + + // Allow plugins to modify the pickups: + a_BlockPluginInterface.CallHookBlockToPickups(a_Digger, a_BlockX, a_BlockY, a_BlockZ, m_BlockType, Meta, Drops); + + // Spawn the pickups: + if (!Drops.empty()) + { + MTRand r1; + + // Mid-block position first + double MicroX, MicroY, MicroZ; + MicroX = a_BlockX + 0.5; + MicroY = a_BlockY + 0.5; + MicroZ = a_BlockZ + 0.5; + + // Add random offset second + MicroX += r1.rand(1) - 0.5; + MicroZ += r1.rand(1) - 0.5; + + a_WorldInterface.SpawnItemPickups(Drops, MicroX, MicroY, MicroZ); + } + return; + } + + super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ, a_CanDrop); + } } ; |