summaryrefslogtreecommitdiffstats
path: root/src/Blocks/BlockCactus.h
diff options
context:
space:
mode:
authorSamuel Barney <samjbarney@gmail.com>2015-08-19 19:05:30 +0200
committerSamuel Barney <samjbarney@gmail.com>2015-08-19 19:05:30 +0200
commitb5ed23d2a6696586b70b11a1bed51f4565079e5d (patch)
treed4c4ebe5a88eaeba8ce9d53122c9eb92e297870c /src/Blocks/BlockCactus.h
parentMerge pull request #2439 from cuberite/AppveyorYml (diff)
parent* Logic for handling plant growth has been centralized into cBlockPlant, and all growable plants now inherit from it. (diff)
downloadcuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.gz
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.bz2
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.lz
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.xz
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.tar.zst
cuberite-b5ed23d2a6696586b70b11a1bed51f4565079e5d.zip
Diffstat (limited to 'src/Blocks/BlockCactus.h')
-rw-r--r--src/Blocks/BlockCactus.h25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/Blocks/BlockCactus.h b/src/Blocks/BlockCactus.h
index cb6cecc7b..29e86d085 100644
--- a/src/Blocks/BlockCactus.h
+++ b/src/Blocks/BlockCactus.h
@@ -1,18 +1,19 @@
#pragma once
-#include "BlockHandler.h"
+#include "BlockPlant.h"
class cBlockCactusHandler :
- public cBlockHandler
+ public cBlockPlant
{
+ typedef cBlockPlant Super;
public:
cBlockCactusHandler(BLOCKTYPE a_BlockType)
- : cBlockHandler(a_BlockType)
+ : Super(a_BlockType, false)
{
}
@@ -64,7 +65,10 @@ public:
virtual void OnUpdate(cChunkInterface & cChunkInterface, cWorldInterface & a_WorldInterface, cBlockPluginInterface & a_PluginInterface, cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override
{
- a_Chunk.GetWorld()->GrowCactus(a_RelX + a_Chunk.GetPosX() * cChunkDef::Width, a_RelY, a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width, 1);
+ if (CanGrow(a_Chunk, a_RelX, a_RelY, a_RelZ) == paGrowth)
+ {
+ a_Chunk.GetWorld()->GrowCactus(a_RelX + a_Chunk.GetPosX() * cChunkDef::Width, a_RelY, a_RelZ + a_Chunk.GetPosZ() * cChunkDef::Width, 1);
+ }
}
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
@@ -72,6 +76,19 @@ public:
UNUSED(a_Meta);
return 7;
}
+
+protected:
+
+ virtual PlantAction CanGrow(cChunk & a_Chunk, int a_RelX, int a_RelY, int a_RelZ) override
+ {
+ auto Action = paStay;
+ if (((a_RelY + 1) < cChunkDef::Height) && (a_Chunk.GetBlock(a_RelX, a_RelY + 1, a_RelZ) == E_BLOCK_AIR))
+ {
+ Action = Super::CanGrow(a_Chunk, a_RelX, a_RelY, a_RelZ);
+ }
+
+ return Action;
+ }
} ;