From a62b2b1be2103d7de2fd66c7304b7473e369be3c Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Wed, 5 May 2021 14:25:10 +0100 Subject: Move item placement into item handlers (#5184) * Move item placement into item handlers + Add appropriate CanBeAt checks in cPlayer::PlaceBlocks, into which all placement handlers call. * Partly addresses #5157 * Fixes #4878 * Fixes #2919 * Fixes #4629 * Fixes #4239 * Fixes #4849 Co-authored-by: changyong guo Co-authored-by: Xotheus Co-authored-by: Krist Pregracke * Review fixes * Update APIDesc.lua * Rename Co-authored-by: changyong guo Co-authored-by: Xotheus Co-authored-by: Krist Pregracke --- src/Blocks/BlockTrapdoor.h | 68 ---------------------------------------------- 1 file changed, 68 deletions(-) (limited to 'src/Blocks/BlockTrapdoor.h') diff --git a/src/Blocks/BlockTrapdoor.h b/src/Blocks/BlockTrapdoor.h index cef7fb6e9..7f6f70e1e 100644 --- a/src/Blocks/BlockTrapdoor.h +++ b/src/Blocks/BlockTrapdoor.h @@ -71,74 +71,6 @@ private: - virtual bool GetPlacementBlockTypeMeta( - cChunkInterface & a_ChunkInterface, - cPlayer & a_Player, - const Vector3i a_PlacedBlockPos, - eBlockFace a_ClickedBlockFace, - const Vector3i a_CursorPos, - BLOCKTYPE & a_BlockType, NIBBLETYPE & a_BlockMeta - ) const override - { - if (a_ClickedBlockFace == BLOCK_FACE_YP) - { - // Trapdoor is placed on top of a block. - // Engage yaw rotation to determine hinge direction: - return Super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_PlacedBlockPos, a_ClickedBlockFace, a_CursorPos, a_BlockType, a_BlockMeta); - } - else if (a_ClickedBlockFace == BLOCK_FACE_YM) - { - // Trapdoor is placed on bottom of a block. - // Engage yaw rotation to determine hinge direction: - if (!Super::GetPlacementBlockTypeMeta(a_ChunkInterface, a_Player, a_PlacedBlockPos, a_ClickedBlockFace, a_CursorPos, a_BlockType, a_BlockMeta)) - { - return false; - } - - // Toggle 'Move up half-block' bit on: - a_BlockMeta |= 0x8; - - return true; - } - - // Placement on block sides; hinge direction is determined by which side was clicked: - a_BlockType = m_BlockType; - a_BlockMeta = BlockFaceToMetaData(a_ClickedBlockFace); - - if (a_CursorPos.y > 7) - { - // Trapdoor is placed on a higher half of a vertical block. - // Toggle 'Move up half-block' bit on: - a_BlockMeta |= 0x8; - } - - return true; - } - - - - - - inline static NIBBLETYPE BlockFaceToMetaData(eBlockFace a_BlockFace) - { - switch (a_BlockFace) - { - case BLOCK_FACE_ZP: return 0x1; - case BLOCK_FACE_ZM: return 0x0; - case BLOCK_FACE_XP: return 0x3; - case BLOCK_FACE_XM: return 0x2; - default: - { - ASSERT(!"Unhandled block face!"); - return 0; - } - } - } - - - - - inline static eBlockFace BlockMetaDataToBlockFace(NIBBLETYPE a_Meta) { switch (a_Meta & 0x3) -- cgit v1.2.3