diff options
author | peterbell10 <peterbell10@live.co.uk> | 2017-07-07 16:37:53 +0200 |
---|---|---|
committer | Lukas Pioch <lukas@zgow.de> | 2017-07-07 16:37:53 +0200 |
commit | bbf5bec817c6c9824155c15d34806db152d5ed43 (patch) | |
tree | 80f9532ae5814da4c168dbf7138ea9a289fc4a8c /src/Blocks/BlockBigFlower.h | |
parent | Added bed entity (#3823) (diff) | |
download | cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar.gz cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar.bz2 cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar.lz cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar.xz cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.tar.zst cuberite-bbf5bec817c6c9824155c15d34806db152d5ed43.zip |
Diffstat (limited to 'src/Blocks/BlockBigFlower.h')
-rw-r--r-- | src/Blocks/BlockBigFlower.h | 31 |
1 files changed, 28 insertions, 3 deletions
diff --git a/src/Blocks/BlockBigFlower.h b/src/Blocks/BlockBigFlower.h index 3b3065f87..96139d656 100644 --- a/src/Blocks/BlockBigFlower.h +++ b/src/Blocks/BlockBigFlower.h @@ -18,19 +18,39 @@ public: { } - virtual bool DoesIgnoreBuildCollision(cPlayer * a_Player, NIBBLETYPE a_Meta) override + virtual bool DoesIgnoreBuildCollision(cChunkInterface & a_ChunkInterface, Vector3i a_Pos, cPlayer & a_Player, NIBBLETYPE a_Meta) override { - return (((a_Meta & E_META_BIG_FLOWER_DOUBLE_TALL_GRASS) != 0) || (a_Meta & E_META_BIG_FLOWER_LARGE_FERN) != 0); + if (IsMetaTopPart(a_Meta)) + { + BLOCKTYPE BottomType; + if ( + (a_Pos.y < 1) || + !a_ChunkInterface.GetBlockTypeMeta(a_Pos.x, a_Pos.y - 1, a_Pos.z, BottomType, a_Meta) || + (BottomType != E_BLOCK_BIG_FLOWER) + ) + { + // Can't find the flower meta so assume grass + return true; + } + } + + NIBBLETYPE FlowerMeta = a_Meta & 0x07; + return ( + (FlowerMeta == E_META_BIG_FLOWER_DOUBLE_TALL_GRASS) || + (FlowerMeta == E_META_BIG_FLOWER_LARGE_FERN) + ); } 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); int AlternateY = a_BlockY; + int BottomY = a_BlockY; if (Meta & 0x8) { --AlternateY; + --BottomY; } else { @@ -39,13 +59,18 @@ public: // also destroy the other block if it has a valid height and is a big flower if (cChunkDef::IsValidHeight(AlternateY) && a_ChunkInterface.GetBlock(a_BlockX, AlternateY, a_BlockZ) == E_BLOCK_BIG_FLOWER) { - super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, a_BlockY, a_BlockZ, a_CanDrop); + super::DropBlock(a_ChunkInterface, a_WorldInterface, a_BlockPluginInterface, a_Digger, a_BlockX, BottomY, a_BlockZ, a_CanDrop); a_ChunkInterface.FastSetBlock(a_BlockX, AlternateY, a_BlockZ, E_BLOCK_AIR, 0); } } virtual void ConvertToPickups(cItems & a_Pickups, NIBBLETYPE a_BlockMeta) override { + if (IsMetaTopPart(a_BlockMeta)) + { + return; // No way to tell flower type + } + NIBBLETYPE Meta = a_BlockMeta & 0x7; if (Meta == E_META_BIG_FLOWER_DOUBLE_TALL_GRASS) { |