2012-09-23 18:09:57 -04:00
|
|
|
|
2012-07-15 16:36:34 -04:00
|
|
|
#pragma once
|
|
|
|
|
2012-09-23 18:09:57 -04:00
|
|
|
#include "ItemHandler.h"
|
|
|
|
#include "../World.h"
|
2012-07-15 16:36:34 -04:00
|
|
|
|
|
|
|
class cItemBucketHandler : public cItemHandler
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
cItemBucketHandler(int a_ItemID)
|
|
|
|
: cItemHandler(a_ItemID)
|
|
|
|
{
|
|
|
|
|
|
|
|
}
|
|
|
|
|
2012-07-16 15:20:37 -04:00
|
|
|
virtual bool OnItemUse(cWorld *a_World, cPlayer *a_Player, cItem *a_Item, int a_X, int a_Y, int a_Z, char a_Dir) override
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
|
|
|
switch(m_ItemID)
|
|
|
|
{
|
2012-08-17 06:54:13 -04:00
|
|
|
case E_ITEM_BUCKET:
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
2012-08-17 06:54:13 -04:00
|
|
|
if (a_Dir >= 0)
|
|
|
|
{
|
|
|
|
AddDirection(a_X, a_Y, a_Z, a_Dir);
|
|
|
|
}
|
2012-07-15 16:36:34 -04:00
|
|
|
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)
|
|
|
|
{
|
2012-08-17 06:54:13 -04:00
|
|
|
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;
|
|
|
|
}
|
2012-07-15 16:36:34 -04:00
|
|
|
}
|
2012-07-17 10:33:51 -04:00
|
|
|
cItem Item(a_Item->m_ItemID, 1);
|
2012-08-17 06:54:13 -04:00
|
|
|
if (
|
|
|
|
(NewItem != E_ITEM_EMPTY) &&
|
|
|
|
(
|
|
|
|
((a_Player->GetGameMode() == 1) ||
|
|
|
|
a_Player->GetInventory().RemoveItem(Item))
|
|
|
|
)
|
|
|
|
)
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
2012-08-17 06:54:13 -04:00
|
|
|
// Give New Bucket
|
2012-07-17 10:33:51 -04:00
|
|
|
cItem Item(NewItem, 1);
|
|
|
|
a_Player->GetInventory().AddItem(Item);
|
2012-08-17 06:54:13 -04:00
|
|
|
// Remove water / lava block
|
2012-07-15 16:36:34 -04:00
|
|
|
a_Player->GetWorld()->SetBlock(a_X, a_Y, a_Z, E_BLOCK_AIR, 0);
|
|
|
|
return true;
|
|
|
|
}
|
2012-08-17 06:54:13 -04:00
|
|
|
break;
|
2012-07-15 16:36:34 -04:00
|
|
|
}
|
2012-08-17 06:54:13 -04:00
|
|
|
|
|
|
|
case E_ITEM_WATER_BUCKET:
|
|
|
|
case E_ITEM_LAVA_BUCKET:
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
|
|
|
BLOCKTYPE NewBlock = (m_ItemID == E_ITEM_LAVA_BUCKET) ? E_BLOCK_LAVA : E_BLOCK_WATER;
|
2012-08-17 06:54:13 -04:00
|
|
|
if (a_Dir >= 0)
|
|
|
|
{
|
|
|
|
AddDirection(a_X, a_Y, a_Z, a_Dir);
|
2012-10-14 13:03:18 -04:00
|
|
|
if (a_World->GetBlock(a_X, a_Y, a_Z) == E_BLOCK_AIR)
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
2012-10-14 13:03:18 -04:00
|
|
|
cItem Item(a_Item->m_ItemID, 1);
|
|
|
|
if ((a_Player->GetGameMode() == 1) || (a_Player->GetInventory().RemoveItem(Item)))
|
2012-07-15 16:36:34 -04:00
|
|
|
{
|
2012-10-14 13:03:18 -04:00
|
|
|
a_World->SetBlock(a_X, a_Y, a_Z, NewBlock, 0);
|
|
|
|
|
|
|
|
if (a_Player->GetGameMode() == 1)
|
|
|
|
{
|
|
|
|
break; //No new Bucket for creative players
|
|
|
|
}
|
|
|
|
cItem Item(E_ITEM_BUCKET, 1);
|
|
|
|
a_Player->GetInventory().AddItem(Item);
|
|
|
|
return true;
|
2012-07-15 16:36:34 -04:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|