summaryrefslogtreecommitdiffstats
path: root/source/Blocks
diff options
context:
space:
mode:
authormadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-10-22 20:00:05 +0200
committermadmaxoft@gmail.com <madmaxoft@gmail.com@0a769ca7-a7f5-676a-18bf-c427514a06d6>2012-10-22 20:00:05 +0200
commit793ae5359de3680ea0b58fa37f07c81d2605ab12 (patch)
treeda4b9d407b6188de363a0b67b43d7d133cfc0da1 /source/Blocks
parentMade DeepSnow remove flowers and mushrooms while snowing. (diff)
downloadcuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar.gz
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar.bz2
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar.lz
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar.xz
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.tar.zst
cuberite-793ae5359de3680ea0b58fa37f07c81d2605ab12.zip
Diffstat (limited to 'source/Blocks')
-rw-r--r--source/Blocks/BlockVine.h51
1 files changed, 44 insertions, 7 deletions
diff --git a/source/Blocks/BlockVine.h b/source/Blocks/BlockVine.h
index 3485f29c5..01aecbe0d 100644
--- a/source/Blocks/BlockVine.h
+++ b/source/Blocks/BlockVine.h
@@ -16,19 +16,50 @@ public:
: cBlockHandler(a_BlockType)
{
}
-
-
- virtual bool DoesIgnoreBuildCollision(void) override
- {
- return true;
- }
-
virtual void PlaceBlock(cWorld * a_World, cPlayer * a_Player, NIBBLETYPE a_BlockMeta, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) override
{
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, m_BlockType, cVine::DirectionToMetaData(a_Dir));
OnPlacedByPlayer(a_World, a_Player, a_BlockX, a_BlockY, a_BlockZ, a_Dir);
}
+
+
+ virtual bool CanBePlacedAt(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) override
+ {
+ if (
+ (a_World->GetBlock( a_BlockX, a_BlockY+1, a_BlockZ ) == E_BLOCK_VINES) &&
+ (cVine::MetaDataToDirection(a_World->GetBlockMeta( a_BlockX, a_BlockY+1, a_BlockZ )) == a_Dir)
+ )
+ {
+ return true;
+ }
+
+ if ((a_World->GetBlock( a_BlockX, a_BlockY+1, a_BlockZ ) != E_BLOCK_AIR))
+ {
+ AddDirection( a_BlockX, a_BlockY, a_BlockZ, a_Dir, true );
+ if(a_World->GetBlock( a_BlockX, a_BlockY, a_BlockZ ) == E_BLOCK_AIR){
+ AddDirection( a_BlockX, a_BlockY, a_BlockZ, a_Dir, false );
+ a_World->FastSetBlock( a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_VINES, 0);
+ }
+ return true;
+ }
+
+ AddDirection( a_BlockX, a_BlockY, a_BlockZ, a_Dir, true );
+
+ return a_World->GetBlock( a_BlockX, a_BlockY, a_BlockZ ) != E_BLOCK_AIR;
+ }
+
+
+ virtual bool CanBeAt(cWorld * a_World, int a_BlockX, int a_BlockY, int a_BlockZ) override
+ {
+ char Dir = cVine::MetaDataToDirection(a_World->GetBlockMeta( a_BlockX, a_BlockY, a_BlockZ));
+ return CanBePlacedAt(a_World, a_BlockX, a_BlockY, a_BlockZ, Dir);
+ }
+
+ virtual bool DoesIgnoreBuildCollision(void) override
+ {
+ return true;
+ }
virtual bool DoesAllowBlockOnTop(void) override
@@ -41,6 +72,12 @@ public:
{
return "step.grass";
}
+
+
+ bool DoesDropOnUnsuitable(void)
+ {
+ return false;
+ }
} ;