From 17486c785331e809f5294fee40367b1590e0d36b Mon Sep 17 00:00:00 2001 From: faketruth Date: Sat, 29 Sep 2012 20:43:42 +0000 Subject: Beds can be slept in now (it doesn't change the time though) git-svn-id: http://mc-server.googlecode.com/svn/trunk@911 0a769ca7-a7f5-676a-18bf-c427514a06d6 --- source/Blocks/BlockBed.h | 68 +++++------------------------------------------- 1 file changed, 7 insertions(+), 61 deletions(-) (limited to 'source/Blocks/BlockBed.h') diff --git a/source/Blocks/BlockBed.h b/source/Blocks/BlockBed.h index cbef5bb4d..b7b055aa8 100644 --- a/source/Blocks/BlockBed.h +++ b/source/Blocks/BlockBed.h @@ -10,64 +10,18 @@ public: cBlockBedHandler(BLOCKTYPE a_BlockID) : cBlockHandler(a_BlockID) { - - } - - - - - - virtual void PlaceBlock(cWorld *a_World, cPlayer *a_Player, NIBBLETYPE a_BlockMeta, int a_X, int a_Y, int a_Z, char a_Dir) override - { - if( a_Dir != 1 ) // Can only be placed on the floor - return; - - NIBBLETYPE Meta = RotationToMetaData( a_Player->GetRotation() ); - Vector3i Direction = MetaDataToDirection( Meta ); - - if (a_World->GetBlock(a_X+Direction.x, a_Y, a_Z+Direction.z) != E_BLOCK_AIR) - { - return; - } - - a_World->SetBlock(a_X, a_Y, a_Z, E_BLOCK_BED, Meta); - a_World->SetBlock(a_X + Direction.x, a_Y, a_Z + Direction.z, E_BLOCK_BED, Meta | 0x8); - - OnPlacedByPlayer(a_World, a_Player, a_X, a_Y, a_Z, a_Dir); } + virtual void PlaceBlock(cWorld *a_World, cPlayer *a_Player, NIBBLETYPE a_BlockMeta, int a_X, int a_Y, int a_Z, char a_Dir) override; + virtual void OnDestroyed(cWorld *a_World, int a_X, int a_Y, int a_Z) override; + virtual void OnUse(cWorld *a_World, cPlayer *a_Player, int a_X, int a_Y, int a_Z) override; - - - virtual void OnDestroyed(cWorld *a_World, int a_X, int a_Y, int a_Z) override + virtual bool IsUseable() override { - char OldMeta = a_World->GetBlockMeta(a_X, a_Y, a_Z); - - Vector3i ThisPos( a_X, a_Y, a_Z ); - Vector3i Direction = MetaDataToDirection( OldMeta & 0x7 ); - if (OldMeta & 0x8) - { - // Was pillow - if (a_World->GetBlock(ThisPos - Direction) == E_BLOCK_BED) - { - a_World->FastSetBlock(ThisPos - Direction, E_BLOCK_AIR, 0); - } - } - else - { - // Was foot end - if (a_World->GetBlock(ThisPos + Direction) == E_BLOCK_BED) - { - a_World->FastSetBlock(ThisPos + Direction, E_BLOCK_AIR, 0); - } - } + return true; } - - - - - + virtual int GetDropID() override { return E_ITEM_BED; @@ -78,10 +32,6 @@ public: return 0; } - - - - virtual bool AllowBlockOnTop() override { return false; @@ -90,7 +40,7 @@ public: - + // Bed specific helper functions static NIBBLETYPE RotationToMetaData( float a_Rotation ) { a_Rotation += 180 + (180/4); // So its not aligned with axis @@ -101,10 +51,6 @@ public: return ((char)a_Rotation+2) % 4; } - - - - static Vector3i MetaDataToDirection( NIBBLETYPE a_MetaData ) { switch( a_MetaData ) -- cgit v1.2.3