summaryrefslogtreecommitdiffstats
path: root/src/Items/ItemRedstoneDust.h
diff options
context:
space:
mode:
authorHowaner <franzi.moos@googlemail.com>2015-01-25 00:57:20 +0100
committerHowaner <franzi.moos@googlemail.com>2015-01-25 00:57:20 +0100
commit6678863f7f7c0fd29bc81e13144f0f054b0162eb (patch)
treea2ce3bb46e396f50f4742711864d9e0327df6457 /src/Items/ItemRedstoneDust.h
parentAdded sponge. (diff)
parentGamosocm support (diff)
downloadcuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar.gz
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar.bz2
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar.lz
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar.xz
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.tar.zst
cuberite-6678863f7f7c0fd29bc81e13144f0f054b0162eb.zip
Diffstat (limited to '')
-rw-r--r--src/Items/ItemRedstoneDust.h37
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;
+ }
} ;