diff options
author | Mattes D <github@xoft.cz> | 2014-12-24 19:44:15 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2014-12-24 19:44:15 +0100 |
commit | f07784b92f9e402706afce148ecc50430832ae16 (patch) | |
tree | fba1596ca7d59153645e2cf2a1b8f70cfc4892ab /src/Items/ItemRedstoneDust.h | |
parent | Replaced a std::hash specialization with explicit type. (diff) | |
download | cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar.gz cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar.bz2 cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar.lz cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar.xz cuberite-f07784b92f9e402706afce148ecc50430832ae16.tar.zst cuberite-f07784b92f9e402706afce148ecc50430832ae16.zip |
Diffstat (limited to 'src/Items/ItemRedstoneDust.h')
-rw-r--r-- | src/Items/ItemRedstoneDust.h | 37 |
1 files changed, 36 insertions, 1 deletions
diff --git a/src/Items/ItemRedstoneDust.h b/src/Items/ItemRedstoneDust.h index a2289239c..6d5fb521f 100644 --- a/src/Items/ItemRedstoneDust.h +++ b/src/Items/ItemRedstoneDust.h @@ -27,7 +27,20 @@ public: BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta ) override { - if (!cBlockInfo::FullyOccupiesVoxel(a_World->GetBlock(a_BlockX, a_BlockY - 1, a_BlockZ))) // Some solid blocks, such as cocoa beans, are not suitable for dust + // Check if coords are out of range: + if ((a_BlockY <= 0) || (a_BlockY >= cChunkDef::Height)) + { + return false; + } + + // Check the block below, if it supports dust on top of it: + BLOCKTYPE BlockType; + NIBBLETYPE BlockMeta; + if (!a_World->GetBlockTypeMeta(a_BlockX, a_BlockY - 1, a_BlockZ, BlockType, BlockMeta)) + { + return false; + } + if (!IsBlockTypeUnderSuitable(BlockType, BlockMeta)) { return false; } @@ -36,6 +49,28 @@ public: a_BlockMeta = 0; return true; } + + + /** Returns true if the specified block type / meta is suitable to have redstone dust on top of it. */ + static bool IsBlockTypeUnderSuitable(BLOCKTYPE a_BlockType, NIBBLETYPE a_BlockMeta) + { + if (cBlockInfo::FullyOccupiesVoxel(a_BlockType)) + { + return true; + } + + switch (a_BlockType) + { + case E_BLOCK_NEW_STONE_SLAB: + case E_BLOCK_WOODEN_SLAB: + case E_BLOCK_STONE_SLAB: + { + // Slabs can support redstone if they're upside down: + return ((a_BlockMeta & 0x08) != 0); + } + } + return false; + } } ; |