Improved cBlockHandler::DropBlock
This commit is contained in:
parent
52d86728e6
commit
fdabfd77e2
@ -19,16 +19,16 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
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, bool a_DropVerbatim) override
|
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
|
||||||
{
|
{
|
||||||
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
if (Meta & 0x8)
|
if (Meta & 0x8)
|
||||||
{
|
{
|
||||||
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY - 1, a_BlockZ, a_CanDrop, a_DropVerbatim);
|
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY - 1, a_BlockZ, a_CanDrop);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ, a_CanDrop, a_DropVerbatim);
|
super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ, a_CanDrop);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,56 +419,44 @@ void cBlockHandler::ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cBlockHandler::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, bool a_DropVerbatim)
|
void cBlockHandler::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)
|
||||||
{
|
{
|
||||||
cItems Pickups;
|
cItems Pickups;
|
||||||
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta(a_BlockX, a_BlockY, a_BlockZ);
|
||||||
|
|
||||||
if (a_CanDrop)
|
if (a_CanDrop)
|
||||||
{
|
{
|
||||||
if (!a_DropVerbatim)
|
if ((a_Digger != NULL) && (a_Digger->GetEquippedWeapon().m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0))
|
||||||
{
|
{
|
||||||
ConvertToPickups(Pickups, Meta);
|
switch (m_BlockType)
|
||||||
|
{
|
||||||
|
case E_BLOCK_CAKE:
|
||||||
|
case E_BLOCK_CARROTS:
|
||||||
|
case E_BLOCK_COCOA_POD:
|
||||||
|
case E_BLOCK_DOUBLE_STONE_SLAB:
|
||||||
|
case E_BLOCK_DOUBLE_WOODEN_SLAB:
|
||||||
|
case E_BLOCK_FIRE:
|
||||||
|
case E_BLOCK_FARMLAND:
|
||||||
|
case E_BLOCK_MELON_STEM:
|
||||||
|
case E_BLOCK_MOB_SPAWNER:
|
||||||
|
case E_BLOCK_NETHER_WART:
|
||||||
|
case E_BLOCK_POTATOES:
|
||||||
|
case E_BLOCK_PUMPKIN_STEM:
|
||||||
|
case E_BLOCK_SNOW:
|
||||||
|
case E_BLOCK_SUGARCANE:
|
||||||
|
case E_BLOCK_TALL_GRASS:
|
||||||
|
case E_BLOCK_CROPS:
|
||||||
|
{
|
||||||
|
// Silktouch can't be used for these blocks
|
||||||
|
ConvertToPickups(Pickups, Meta);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default: Pickups.Add(m_BlockType, 1, Meta); break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// TODO: Add a proper overridable function for this
|
ConvertToPickups(Pickups, Meta);
|
||||||
if (a_Digger != NULL)
|
|
||||||
{
|
|
||||||
cEnchantments Enchantments = a_Digger->GetEquippedWeapon().m_Enchantments;
|
|
||||||
if ((Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0) && a_Digger->IsPlayer())
|
|
||||||
{
|
|
||||||
switch (m_BlockType)
|
|
||||||
{
|
|
||||||
case E_BLOCK_CAKE:
|
|
||||||
case E_BLOCK_CARROTS:
|
|
||||||
case E_BLOCK_COCOA_POD:
|
|
||||||
case E_BLOCK_DOUBLE_STONE_SLAB:
|
|
||||||
case E_BLOCK_DOUBLE_WOODEN_SLAB:
|
|
||||||
case E_BLOCK_FIRE:
|
|
||||||
case E_BLOCK_FARMLAND:
|
|
||||||
case E_BLOCK_MELON_STEM:
|
|
||||||
case E_BLOCK_MOB_SPAWNER:
|
|
||||||
case E_BLOCK_NETHER_WART:
|
|
||||||
case E_BLOCK_POTATOES:
|
|
||||||
case E_BLOCK_PUMPKIN_STEM:
|
|
||||||
case E_BLOCK_SNOW:
|
|
||||||
case E_BLOCK_SUGARCANE:
|
|
||||||
case E_BLOCK_TALL_GRASS:
|
|
||||||
case E_BLOCK_CROPS:
|
|
||||||
{
|
|
||||||
// Silktouch can't be used for this blocks
|
|
||||||
ConvertToPickups(Pickups, Meta);
|
|
||||||
break;
|
|
||||||
};
|
|
||||||
default: Pickups.Add(m_BlockType, 1, Meta);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Pickups.Add(m_BlockType, 1, Meta);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -82,7 +82,7 @@ public:
|
|||||||
@param a_CanDrop Informs the handler whether the block should be dropped at all. One example when this is false is when stone is destroyed by hand
|
@param a_CanDrop Informs the handler whether the block should be dropped at all. One example when this is false is when stone is destroyed by hand
|
||||||
@param a_DropVerbatim Calls ConvertToVerbatimPickups() instead of its counterpart, meaning the block itself is dropped by default (due to a speical tool or enchantment)
|
@param a_DropVerbatim Calls ConvertToVerbatimPickups() instead of its counterpart, meaning the block itself is dropped by default (due to a speical tool or enchantment)
|
||||||
*/
|
*/
|
||||||
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 = true, bool a_DropVerbatim = false);
|
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 = true);
|
||||||
|
|
||||||
/// Checks if the block can stay at the specified relative coords in the chunk
|
/// Checks if the block can stay at the specified relative coords in the chunk
|
||||||
virtual bool CanBeAt(cChunkInterface & a_ChunkInterface, int a_RelX, int a_RelY, int a_RelZ, const cChunk & a_Chunk);
|
virtual bool CanBeAt(cChunkInterface & a_ChunkInterface, int a_RelX, int a_RelY, int a_RelZ, const cChunk & a_Chunk);
|
||||||
|
@ -334,7 +334,7 @@ void cItemHandler::OnBlockDestroyed(cWorld * a_World, cPlayer * a_Player, const
|
|||||||
{
|
{
|
||||||
cChunkInterface ChunkInterface(a_World->GetChunkMap());
|
cChunkInterface ChunkInterface(a_World->GetChunkMap());
|
||||||
cBlockInServerPluginInterface PluginInterface(*a_World);
|
cBlockInServerPluginInterface PluginInterface(*a_World);
|
||||||
Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block), a_Player->GetEquippedItem().m_Enchantments.GetLevel(cEnchantments::enchSilkTouch) > 0);
|
Handler->DropBlock(ChunkInterface, *a_World, PluginInterface, a_Player, a_BlockX, a_BlockY, a_BlockZ, CanHarvestBlock(Block));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!cBlockInfo::IsOneHitDig(Block))
|
if (!cBlockInfo::IsOneHitDig(Block))
|
||||||
|
@ -283,7 +283,7 @@ void cMonster::Tick(float a_Dt, cChunk & a_Chunk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Vector3f Distance = m_Destination - GetPosition();
|
Vector3d Distance = m_Destination - GetPosition();
|
||||||
if (!ReachedDestination() && !ReachedFinalDestination()) // If we haven't reached any sort of destination, move
|
if (!ReachedDestination() && !ReachedFinalDestination()) // If we haven't reached any sort of destination, move
|
||||||
{
|
{
|
||||||
Distance.y = 0;
|
Distance.y = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user