summaryrefslogtreecommitdiffstats
path: root/src/Blocks
diff options
context:
space:
mode:
Diffstat (limited to 'src/Blocks')
-rw-r--r--src/Blocks/BlockCauldron.h40
1 files changed, 35 insertions, 5 deletions
diff --git a/src/Blocks/BlockCauldron.h b/src/Blocks/BlockCauldron.h
index 5b45b2828..d6ef721ad 100644
--- a/src/Blocks/BlockCauldron.h
+++ b/src/Blocks/BlockCauldron.h
@@ -27,17 +27,31 @@ public:
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});
- switch (a_Player.GetEquippedItem().m_ItemType)
+ 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:
{
if (Meta < 3)
{
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, 3);
+ // Give empty bucket back when the gamemode is not creative:
if (!a_Player.IsGameModeCreative())
{
- a_Player.GetInventory().RemoveOneEquippedItem();
- a_Player.GetInventory().AddItem(cItem(E_ITEM_BUCKET));
+ a_Player.ReplaceOneEquippedItemTossRest(cItem(E_ITEM_BUCKET));
}
}
break;
@@ -47,11 +61,27 @@ public:
if (Meta > 0)
{
a_ChunkInterface.SetBlockMeta(a_BlockX, a_BlockY, a_BlockZ, --Meta);
- a_Player.GetInventory().RemoveOneEquippedItem();
- a_Player.GetInventory().AddItem(cItem(E_ITEM_POTION));
+ // 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;
}