1
0
cuberite-2a/source/items/ItemBucket.h
lapayo94@gmail.com 14dce23845 A new Block handling system :o
It was really a lot of work :D
Took me the complete weekend :D

Would really like to here your opinion on this =)
The aim of this is to put all the actions for one block in one place so it is not spread around the source. (ToPickup, Action in cWorld, Action in cChunk, Action here, action there :D)

git-svn-id: http://mc-server.googlecode.com/svn/trunk@671 0a769ca7-a7f5-676a-18bf-c427514a06d6
2012-07-15 20:36:34 +00:00

75 lines
1.9 KiB
C++

#pragma once
#include "Item.h"
#include "../cWorld.h"
class cItemBucketHandler : public cItemHandler
{
public:
cItemBucketHandler(int a_ItemID)
: cItemHandler(a_ItemID)
{
}
virtual bool OnItemUse(cWorld *a_World, cPlayer *a_Player, cItem *a_Item, int a_X, int a_Y, int a_Z, char a_Dir)
{
switch(m_ItemID)
{
case E_ITEM_BUCKET:
{
AddDirection(a_X, a_Y, a_Z, a_Dir);
BLOCKTYPE ClickedBlock = a_World->GetBlock(a_X, a_Y, a_Z);
LOG("Bucket Clicked BlockID: %d", ClickedBlock);
ENUM_ITEM_ID NewItem = E_ITEM_EMPTY;
switch (ClickedBlock)
{
case E_BLOCK_WATER:
case E_BLOCK_STATIONARY_WATER:
NewItem = E_ITEM_WATER_BUCKET;
break;
case E_BLOCK_LAVA:
case E_BLOCK_STATIONARY_LAVA:
NewItem = E_ITEM_LAVA_BUCKET;
break;
}
if (NewItem != E_ITEM_EMPTY
&& (a_Player->GetGameMode() == 1 || (a_Player->GetInventory().RemoveItem(cItem(a_Item->m_ItemID, 1)))))
{
//Give New Bucket
a_Player->GetInventory().AddItem(cItem(NewItem, 1));
//remove water block
a_Player->GetWorld()->SetBlock(a_X, a_Y, a_Z, E_BLOCK_AIR, 0);
return true;
}
}
break;
case E_ITEM_WATER_BUCKET:
case E_ITEM_LAVA_BUCKET:
{
BLOCKTYPE NewBlock = (m_ItemID == E_ITEM_LAVA_BUCKET) ? E_BLOCK_LAVA : E_BLOCK_WATER;
AddDirection(a_X, a_Y, a_Z, a_Dir);
if(a_World->GetBlock(a_X, a_Y, a_Z) == E_BLOCK_AIR)
{
if ((a_Player->GetGameMode() == 1) || (a_Player->GetInventory().RemoveItem(cItem(a_Item->m_ItemID, 1))))
{
a_World->SetBlock(a_X, a_Y, a_Z, NewBlock, 0);
if (a_Player->GetGameMode() == 1)
{
break; //No new Bucket for creative players
}
a_Player->GetInventory().AddItem(cItem(E_ITEM_BUCKET, 1));
return true;
}
}
}
break;
}
return false;
}
};