cf87169737
This makes the API more orthogonal and is easier to use in the plugins. Also changes in the inventory are now propagated to the needed places (armor updates to BroadcastEntityEquipment etc.) even when the inventory is changed by a plugin. git-svn-id: http://mc-server.googlecode.com/svn/trunk@1503 0a769ca7-a7f5-676a-18bf-c427514a06d6
53 lines
1.2 KiB
C++
53 lines
1.2 KiB
C++
|
|
#pragma once
|
|
|
|
#include "ItemHandler.h"
|
|
#include "../World.h"
|
|
|
|
|
|
|
|
|
|
|
|
class cItemSlabHandler : public cItemHandler
|
|
{
|
|
public:
|
|
cItemSlabHandler(int a_ItemType)
|
|
: cItemHandler(a_ItemType)
|
|
{
|
|
|
|
}
|
|
|
|
virtual bool OnItemUse(cWorld * a_World, cPlayer * a_Player, const cItem & a_Item, int a_BlockX, int a_BlockY, int a_BlockZ, char a_Dir) override
|
|
{
|
|
BLOCKTYPE Block;
|
|
NIBBLETYPE Meta;
|
|
a_World->GetBlockTypeMeta(a_BlockX, a_BlockY, a_BlockZ, Block, Meta);
|
|
|
|
if (
|
|
((a_Dir == 0) || (a_Dir == 1)) // Only when clicking on top or on bottom of the block
|
|
&& ((Block == E_BLOCK_WOODEN_SLAB) || (Block == E_BLOCK_STONE_SLAB)) // It is a slab
|
|
&& (Block == a_Item.m_ItemType) // Same slab
|
|
&& ((Meta & 0x7) == (a_Item.m_ItemDamage & 0x7))) // Same Texture
|
|
{
|
|
if (a_Player->GetGameMode() == eGameMode_Creative)
|
|
{
|
|
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, Block - 1, Meta); // Block - 1 simple hack to save one if statement
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
if (a_Player->GetInventory().RemoveOneEquippedItem())
|
|
{
|
|
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, Block - 1, Meta); // Block - 1 simple hack to save one if statement
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
} ;
|
|
|
|
|
|
|
|
|