From 793ae5359de3680ea0b58fa37f07c81d2605ab12 Mon Sep 17 00:00:00 2001 From: "madmaxoft@gmail.com" Date: Mon, 22 Oct 2012 18:00:05 +0000 Subject: Vine decay (patch contributed by funmaker) git-svn-id: http://mc-server.googlecode.com/svn/trunk@1002 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Blocks/BlockVine.h | 51 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 7 deletions(-) (limited to 'source/Blocks/BlockVine.h') 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; + } } ; -- cgit v1.2.3