diff options
author | Mattes D <github@xoft.cz> | 2014-12-24 07:20:17 +0100 |
---|---|---|
committer | Mattes D <github@xoft.cz> | 2014-12-24 07:20:17 +0100 |
commit | ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0 (patch) | |
tree | 445feea29fb0a2228cd8187821a1bf8e519c5807 /src/Items/ItemBed.h | |
parent | Added Vector3::TurnCW() and Vector3::TurnCCW() (diff) | |
download | cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar.gz cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar.bz2 cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar.lz cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar.xz cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.tar.zst cuberite-ccdf03daaf880dd0c89a03b50c11eb083ee1cfb0.zip |
Diffstat (limited to '')
-rw-r--r-- | src/Items/ItemBed.h | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/Items/ItemBed.h b/src/Items/ItemBed.h index 94a14cf16..77d51d744 100644 --- a/src/Items/ItemBed.h +++ b/src/Items/ItemBed.h @@ -24,30 +24,36 @@ public: return true; } - virtual bool GetPlacementBlockTypeMeta( - cWorld * a_World, cPlayer * a_Player, + + virtual bool OnPlayerPlace( + cWorld & a_World, cPlayer & a_Player, const cItem & a_EquippedItem, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, - int a_CursorX, int a_CursorY, int a_CursorZ, - BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta + int a_CursorX, int a_CursorY, int a_CursorZ ) override { + // Can only be placed on the floor: if (a_BlockFace != BLOCK_FACE_TOP) { - // Can only be placed on the floor return false; } + AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace); - a_BlockMeta = cBlockBedHandler::RotationToMetaData(a_Player->GetYaw()); + // The "foot" block: + sSetBlockVector blks; + NIBBLETYPE BlockMeta = cBlockBedHandler::RotationToMetaData(a_Player.GetYaw()); + blks.emplace_back(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_BED, BlockMeta); - // Check if there is empty space for the foot section: - Vector3i Direction = cBlockBedHandler::MetaDataToDirection(a_BlockMeta); - if (a_World->GetBlock(a_BlockX + Direction.x, a_BlockY, a_BlockZ + Direction.z) != E_BLOCK_AIR) + // Check if there is empty space for the "head" block: + // (Vanilla only allows beds to be placed into air) + Vector3i Direction = cBlockBedHandler::MetaDataToDirection(BlockMeta); + if (a_World.GetBlock(a_BlockX + Direction.x, a_BlockY, a_BlockZ + Direction.z) != E_BLOCK_AIR) { return false; } + blks.emplace_back(a_BlockX + Direction.x, a_BlockY, a_BlockZ + Direction.z, E_BLOCK_BED, BlockMeta | 0x08); - a_BlockType = E_BLOCK_BED; - return true; + // Place both bed blocks: + return a_Player.PlaceBlocks(blks); } } ; |