From cdc452916e3ec7e61f4a1ad822666192593b4b08 Mon Sep 17 00:00:00 2001 From: Alexander Harkness Date: Thu, 2 Apr 2020 12:42:15 +0000 Subject: Replace buckets to the selected hotbar slot, rather than the first available. (#4580) * Replace buckets to the selected hotbar slot, rather than the first available. Replicates vanilla behaviour, as well as being more logical. * Refactor cInventory::AddItem. Behaviour is now documented * Add new cInventory::ReplaceOneEquippedItem and ::SetEquippedItem methods * Return empty potion to the same slot after drinking * Replace buckets correctly in other situations, not simply water and lava Uses the new ReplaceOneEquippedItem method * Correct collecting water from source block with bottle * Add cPlayer::ReplaceOneEquippedItemTossRest method * Handle stacked filled buckets (in theory) Use new cPlayer::ReplaceOneEquippedItemTossRest method --- src/Entities/Player.cpp | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/Entities/Player.cpp') diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index b5d7f7c83..02cb7378d 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -1959,6 +1959,25 @@ void cPlayer::TossEquippedItem(char a_Amount) +void cPlayer::ReplaceOneEquippedItemTossRest(const cItem & a_Item) +{ + auto PlacedCount = GetInventory().ReplaceOneEquippedItem(a_Item); + char ItemCountToToss = a_Item.m_ItemCount - static_cast(PlacedCount); + + if (ItemCountToToss == 0) + { + return; + } + + cItem Pickup = a_Item; + Pickup.m_ItemCount = ItemCountToToss; + TossPickup(Pickup); +} + + + + + void cPlayer::TossHeldItem(char a_Amount) { cItems Drops; -- cgit v1.2.3