From 3ff57559e36d3254c64e334fbe3bdd47398fe16f Mon Sep 17 00:00:00 2001 From: x12xx12x <44411062+12xx12@users.noreply.github.com> Date: Thu, 2 Dec 2021 00:31:10 +0100 Subject: ItemHandler initialisation is a constant expression (#5344) * Transition to non-pointer item handler * That is my destructor - I decide when I leave this world * I declare your destruction private and you final --- src/Entities/Entity.cpp | 2 +- src/Entities/Player.cpp | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/Entities') diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index bf4b9372c..0bb8b97bc 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -406,7 +406,7 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) { cPlayer * Player = static_cast(a_TDI.Attacker); - Player->GetEquippedItem().GetHandler()->OnEntityAttack(Player, this); + Player->GetEquippedItem().GetHandler().OnEntityAttack(Player, this); // Whether an enchantment boosted this attack's damage. bool MagicalCriticalHit = false; diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index e1caef7f9..1d3bad306 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -525,12 +525,12 @@ void cPlayer::FinishEating(void) // consume the item: cItem Item(GetEquippedItem()); Item.m_ItemCount = 1; - cItemHandler * ItemHandler = cItemHandler::GetItemHandler(Item.m_ItemType); - if (!ItemHandler->EatItem(this, &Item)) + auto & ItemHandler = Item.GetHandler(); + if (!ItemHandler.EatItem(this, &Item)) { return; } - ItemHandler->OnFoodEaten(m_World, this, &Item); + ItemHandler.OnFoodEaten(m_World, this, &Item); } @@ -2035,7 +2035,7 @@ void cPlayer::UseEquippedItem(cItemHandler::eDurabilityLostAction a_Action) cItem Item = GetEquippedItem(); // Get base damage for action type: - short Dmg = cItemHandler::GetItemHandler(Item)->GetDurabilityLossByAction(a_Action); + short Dmg = Item.GetHandler().GetDurabilityLossByAction(a_Action); UseEquippedItem(Dmg); } @@ -2613,10 +2613,10 @@ float cPlayer::GetDigSpeed(BLOCKTYPE a_Block) // Based on: https://minecraft.gamepedia.com/Breaking#Speed // Get the base speed multiplier of the equipped tool for the mined block - float MiningSpeed = GetEquippedItem().GetHandler()->GetBlockBreakingStrength(a_Block); + float MiningSpeed = GetEquippedItem().GetHandler().GetBlockBreakingStrength(a_Block); // If we can harvest the block then we can apply material and enchantment bonuses - if (GetEquippedItem().GetHandler()->CanHarvestBlock(a_Block)) + if (GetEquippedItem().GetHandler().CanHarvestBlock(a_Block)) { if (MiningSpeed > 1.0f) // If the base multiplier for this block is greater than 1, now we can check enchantments { @@ -2683,7 +2683,7 @@ float cPlayer::GetMiningProgressPerTick(BLOCKTYPE a_Block) return 1; } - const bool CanHarvest = GetEquippedItem().GetHandler()->CanHarvestBlock(a_Block); + const bool CanHarvest = GetEquippedItem().GetHandler().CanHarvestBlock(a_Block); const float BlockHardness = cBlockInfo::GetHardness(a_Block) * (CanHarvest ? 1.5f : 5.0f); ASSERT(BlockHardness > 0); // Can't divide by 0 or less, IsOneHitDig should have returned true -- cgit v1.2.3