Files
cuberite-2a/src/Items/ItemLighter.h
T

84 lines
1.7 KiB
C++
Raw Normal View History

2013-07-29 12:13:03 +01:00
#pragma once
#include "ItemHandler.h"
#include "../World.h"
2013-08-19 11:39:13 +02:00
#include "../Entities/Player.h"
2013-07-29 12:13:03 +01:00
class cItemLighterHandler :
public cItemHandler
{
public:
cItemLighterHandler(int a_ItemType) :
cItemHandler(a_ItemType)
{
}
virtual bool OnItemUse(
cWorld * a_World, cPlayer * a_Player, cBlockPluginInterface & a_PluginInterface, const cItem & a_Item,
int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace
) override
2013-07-29 12:13:03 +01:00
{
if (a_BlockFace < 0)
{
return false;
}
2016-02-05 23:45:45 +02:00
2014-03-14 23:52:51 +01:00
if (!a_Player->IsGameModeCreative())
{
switch (m_ItemType)
{
case E_ITEM_FLINT_AND_STEEL:
{
a_Player->UseEquippedItem();
break;
}
case E_ITEM_FIRE_CHARGE:
{
a_Player->GetInventory().RemoveOneEquippedItem();
break;
}
default:
{
ASSERT(!"Unknown Lighter Item!");
}
}
}
2013-07-29 12:13:03 +01:00
switch (a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ))
{
case E_BLOCK_TNT:
{
// Activate the TNT:
a_World->BroadcastSoundEffect("entity.tnt.primed", Vector3d(a_BlockX, a_BlockY, a_BlockZ), 1.0f, 1.0f);
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_AIR, 0);
a_World->SpawnPrimedTNT({a_BlockX + 0.5, a_BlockY + 0.5, a_BlockZ + 0.5}); // 80 ticks to boom
2013-07-29 12:13:03 +01:00
break;
}
default:
{
2015-05-09 09:25:09 +02:00
// Light a fire next to / on top of the block if air:
2013-07-29 12:13:03 +01:00
AddFaceDirection(a_BlockX, a_BlockY, a_BlockZ, a_BlockFace);
if ((a_BlockY < 0) || (a_BlockY >= cChunkDef::Height))
{
break;
}
2013-08-23 18:13:54 +01:00
if (a_World->GetBlock(a_BlockX, a_BlockY, a_BlockZ) == E_BLOCK_AIR)
{
a_World->SetBlock(a_BlockX, a_BlockY, a_BlockZ, E_BLOCK_FIRE, 0);
a_World->BroadcastSoundEffect("item.flintandsteel.use", Vector3d(a_BlockX, a_BlockY, a_BlockZ), 1.0F, 1.04F);
2013-08-23 18:13:54 +01:00
break;
}
2013-07-29 12:13:03 +01:00
}
}
return false;
}
} ;