summaryrefslogtreecommitdiffstats
path: root/src/Items/ItemSlab.h
diff options
context:
space:
mode:
authorMattes D <github@xoft.cz>2015-04-23 00:54:59 +0200
committerMattes D <github@xoft.cz>2015-04-23 00:54:59 +0200
commit5f0a78200bfb9bfd9593d5c821d1495836d9520e (patch)
treed8f72455d48bd901479d972db0649199be791e5f /src/Items/ItemSlab.h
parentMerge pull request #1883 from mc-server/NarrowWindowID (diff)
parentFix slab placing (diff)
downloadcuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar.gz
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar.bz2
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar.lz
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar.xz
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.tar.zst
cuberite-5f0a78200bfb9bfd9593d5c821d1495836d9520e.zip
Diffstat (limited to 'src/Items/ItemSlab.h')
-rw-r--r--src/Items/ItemSlab.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/Items/ItemSlab.h b/src/Items/ItemSlab.h
index b0b5ce005..3a78cc016 100644
--- a/src/Items/ItemSlab.h
+++ b/src/Items/ItemSlab.h
@@ -39,10 +39,15 @@ public:
int a_CursorX, int a_CursorY, int a_CursorZ
) override
{
+ // Prepare sound effect
+ AString PlaceSound = cBlockInfo::GetPlaceSound(m_ItemType);
+ float Volume = 1.0f, Pitch = 0.8f;
+
// Special slab handling - placing a slab onto another slab produces a dblslab instead:
BLOCKTYPE ClickedBlockType;
NIBBLETYPE ClickedBlockMeta;
a_World.GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, ClickedBlockType, ClickedBlockMeta);
+ // If clicked on a half slab directly
if (
(ClickedBlockType == m_ItemType) && // Placing the same slab material
((ClickedBlockMeta & 0x07) == a_EquippedItem.m_ItemDamage) // Placing the same slab sub-kind (and existing slab is single)
@@ -54,6 +59,7 @@ public:
((ClickedBlockMeta & 0x08) == 0)
)
{
+ a_World.BroadcastSoundEffect(PlaceSound, a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5, Volume, Pitch);
return a_Player.PlaceBlock(a_BlockX, a_BlockY, a_BlockZ, m_DoubleSlabBlockType, ClickedBlockMeta & 0x07);
}
@@ -63,11 +69,28 @@ public:
((ClickedBlockMeta & 0x08) != 0)
)
{
+ a_World.BroadcastSoundEffect(PlaceSound, a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5, Volume, Pitch);
return a_Player.PlaceBlock(a_BlockX, a_BlockY, a_BlockZ, m_DoubleSlabBlockType, ClickedBlockMeta & 0x07);
}
}
+ // Checking the type of block that should be placed
+ AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace);
+ BLOCKTYPE PlaceBlockType;
+ NIBBLETYPE PlaceBlockMeta;
+ a_World.GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, PlaceBlockType, PlaceBlockMeta);
+ // If it's a slab combine into a doubleslab (means that clicked on side, top or bottom of a block adjacent to a half slab)
+ if (
+ (PlaceBlockType == m_ItemType) && // Placing the same slab material
+ ((PlaceBlockMeta & 0x07) == a_EquippedItem.m_ItemDamage) // Placing the same slab sub-kind (and existing slab is single)
+ )
+ {
+ a_World.BroadcastSoundEffect(PlaceSound, a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5, Volume, Pitch);
+ return a_Player.PlaceBlock(a_BlockX, a_BlockY, a_BlockZ, m_DoubleSlabBlockType, PlaceBlockMeta & 0x07);
+ }
+
// The slabs didn't combine, use the default handler to place the slab:
+ AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, true);
bool res = super::OnPlayerPlace(a_World, a_Player, a_EquippedItem, a_BlockX, a_BlockY, a_BlockZ, a_BlockFace, a_CursorX, a_CursorY, a_CursorZ);
/*