1
0

Deadbushes drop sticks

This commit is contained in:
Bond-009 2017-02-26 11:09:06 +01:00 committed by Lukas Pioch
parent 4656be19b7
commit ef85c2e686
5 changed files with 49 additions and 1 deletions

View File

@ -6,6 +6,7 @@ bearbin (Alexander Harkness)
beeduck beeduck
bibo38 bibo38
birkett (Anthony Birkett) birkett (Anthony Birkett)
Bond_009
derouinw derouinw
Diusrex Diusrex
Duralex Duralex

View File

@ -10,6 +10,7 @@
class cBlockDeadBushHandler : class cBlockDeadBushHandler :
public cBlockHandler public cBlockHandler
{ {
typedef cBlockHandler super;
public: public:
cBlockDeadBushHandler(BLOCKTYPE a_BlockType) cBlockDeadBushHandler(BLOCKTYPE a_BlockType)
: cBlockHandler(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 virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
{ {
UNUSED(a_Meta); UNUSED(a_Meta);
return 0; 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);
}
} ; } ;

View File

@ -473,6 +473,7 @@ void cBlockHandler::DropBlock(cChunkInterface & a_ChunkInterface, cWorldInterfac
case E_BLOCK_COCOA_POD: case E_BLOCK_COCOA_POD:
case E_BLOCK_CROPS: case E_BLOCK_CROPS:
case E_BLOCK_DARK_OAK_DOOR: case E_BLOCK_DARK_OAK_DOOR:
case E_BLOCK_DEAD_BUSH:
case E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB: case E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB:
case E_BLOCK_DOUBLE_STONE_SLAB: case E_BLOCK_DOUBLE_STONE_SLAB:
case E_BLOCK_DOUBLE_WOODEN_SLAB: case E_BLOCK_DOUBLE_WOODEN_SLAB:

View File

@ -745,7 +745,6 @@ bool cItemHandler::CanHarvestBlock(BLOCKTYPE a_BlockType)
case E_BLOCK_COBBLESTONE_STAIRS: case E_BLOCK_COBBLESTONE_STAIRS:
case E_BLOCK_COBBLESTONE_WALL: case E_BLOCK_COBBLESTONE_WALL:
case E_BLOCK_COBWEB: case E_BLOCK_COBWEB:
case E_BLOCK_DEAD_BUSH:
case E_BLOCK_DIAMOND_BLOCK: case E_BLOCK_DIAMOND_BLOCK:
case E_BLOCK_DIAMOND_ORE: case E_BLOCK_DIAMOND_ORE:
case E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB: case E_BLOCK_DOUBLE_RED_SANDSTONE_SLAB:

View File

@ -56,6 +56,7 @@ public:
switch (a_BlockType) switch (a_BlockType)
{ {
case E_BLOCK_COBWEB: case E_BLOCK_COBWEB:
case E_BLOCK_DEAD_BUSH:
case E_BLOCK_VINES: case E_BLOCK_VINES:
{ {
return true; return true;