Properly fixed snow height, fixes #98 and #264

This commit is contained in:
Tiger Wang
2013-11-30 00:31:21 +00:00
parent 8d88c8f26f
commit 0e0baa940a
3 changed files with 53 additions and 25 deletions
+22 -6
View File
@@ -25,21 +25,37 @@ public:
) override
{
a_BlockType = m_BlockType;
NIBBLETYPE Meta = a_World->GetBlockMeta(Vector3i(a_BlockX, a_BlockY, a_BlockZ));
if ((Meta < 7) && (Meta != 0)) // Is height at maximum (7) or at mininum (0)? Don't do anything if so
BLOCKTYPE BlockBeforePlacement;
NIBBLETYPE MetaBeforePlacement;
a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, BlockBeforePlacement, MetaBeforePlacement);
if ((BlockBeforePlacement == E_BLOCK_SNOW) && (MetaBeforePlacement < 7))
{
Meta++;
// Only increment if:
// A snow block was already there (not first time placement) AND
// Height is smaller than 7, the maximum possible height
MetaBeforePlacement++;
}
a_BlockMeta = Meta;
a_BlockMeta = MetaBeforePlacement;
return true;
}
virtual bool DoesIgnoreBuildCollision(void) override
virtual bool DoesIgnoreBuildCollision(cPlayer * a_Player, NIBBLETYPE a_Meta) override
{
return true;
if ((a_Player->GetEquippedItem().m_ItemType == E_BLOCK_SNOW) && (a_Meta < 7))
{
return true; // If a player is holding a (thin) snow block and it's size can be increased, return collision ignored
}
if (a_Meta == 0)
{
return true; // If at normal snowfall height (lowest), we ignore collision
}
return false;
}