1
0
cuberite-2a/src/Blocks/BlockCauldron.h

146 lines
2.9 KiB
C
Raw Normal View History

#pragma once
#include "BlockHandler.h"
class cBlockCauldronHandler :
public cBlockHandler
{
2020-04-13 16:38:06 +00:00
using Super = cBlockHandler;
public:
cBlockCauldronHandler(BLOCKTYPE a_BlockType):
2020-04-13 16:38:06 +00:00
Super(a_BlockType)
{
}
virtual cItems ConvertToPickups(NIBBLETYPE a_BlockMeta, cBlockEntity * a_BlockEntity, const cEntity * a_Digger, const cItem * a_Tool) override
{
return cItem(E_ITEM_CAULDRON, 1, 0);
}
2017-07-31 20:17:52 +00:00
virtual bool OnUse(cChunkInterface & a_ChunkInterface, cWorldInterface & a_WorldInterface, cPlayer & a_Player, int a_BlockX, int a_BlockY, int a_BlockZ, eBlockFace a_BlockFace, int a_CursorX, int a_CursorY, int a_CursorZ) override
{
NIBBLETYPE Meta = a_ChunkInterface.GetBlockMeta({a_BlockX, a_BlockY, a_BlockZ});
auto EquippedItem = a_Player.GetEquippedItem();
switch (EquippedItem.m_ItemType)
{
case E_ITEM_BUCKET:
{
if (Meta == 3)
{
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, 0);
// Give new bucket, filled with fluid when the gamemode is not creative:
if (!a_Player.IsGameModeCreative())
{
a_Player.ReplaceOneEquippedItemTossRest(cItem(E_ITEM_WATER_BUCKET));
}
}
break;
}
case E_ITEM_WATER_BUCKET:
{
2014-02-20 16:45:18 +00:00
if (Meta < 3)
{
2014-02-20 19:58:23 +00:00
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, 3);
// Give empty bucket back when the gamemode is not creative:
2017-07-31 20:17:52 +00:00
if (!a_Player.IsGameModeCreative())
2014-02-20 19:58:23 +00:00
{
a_Player.ReplaceOneEquippedItemTossRest(cItem(E_ITEM_BUCKET));
2014-02-20 19:58:23 +00:00
}
2014-02-20 16:45:18 +00:00
}
break;
}
case E_ITEM_GLASS_BOTTLE:
{
2014-02-20 16:45:18 +00:00
if (Meta > 0)
{
2014-02-20 19:58:23 +00:00
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, --Meta);
// Give new potion when the gamemode is not creative:
if (!a_Player.IsGameModeCreative())
{
a_Player.ReplaceOneEquippedItemTossRest(cItem(E_ITEM_POTION));
}
}
break;
}
case E_ITEM_POTION:
{
// Refill cauldron with water bottles.
if ((Meta < 3) && (EquippedItem.m_ItemDamage == 0))
{
a_ChunkInterface.SetBlockMeta(Vector3i(a_BlockX, a_BlockY, a_BlockZ), ++Meta);
// Give empty bottle when the gamemode is not creative:
if (!a_Player.IsGameModeCreative())
{
a_Player.ReplaceOneEquippedItemTossRest(cItem(E_ITEM_GLASS_BOTTLE));
}
}
}
}
return true;
}
virtual bool IsUseable() override
{
return true;
}
2014-05-29 15:58:40 +00:00
virtual void OnUpdate(
cChunkInterface & a_ChunkInterface,
cWorldInterface & a_WorldInterface,
cBlockPluginInterface & a_PluginInterface,
cChunk & a_Chunk,
const Vector3i a_RelPos
) override
2014-05-29 15:58:40 +00:00
{
auto WorldPos = a_Chunk.RelativeToAbsolute(a_RelPos);
if (!a_WorldInterface.IsWeatherWetAtXYZ(WorldPos.addedY(1)))
2014-05-29 15:58:40 +00:00
{
2014-06-14 09:14:04 +00:00
// It's not raining at our current location or we do not have a direct view of the sky
2014-05-29 15:58:40 +00:00
return;
}
auto Meta = a_Chunk.GetMeta(a_RelPos);
2014-05-29 15:58:40 +00:00
if (Meta < 3)
{
a_Chunk.SetMeta(a_RelPos, Meta + 1);
2014-05-29 15:58:40 +00:00
}
}
2015-06-30 14:50:15 +00:00
2015-06-30 14:50:15 +00:00
virtual ColourID GetMapBaseColourID(NIBBLETYPE a_Meta) override
{
UNUSED(a_Meta);
return 21;
}
} ;