summaryrefslogtreecommitdiffstats
path: root/src/Entities/ArrowEntity.cpp
diff options
context:
space:
mode:
authorMasy98 <masy@antheruscraft.de>2014-09-01 21:30:45 +0200
committerMasy98 <masy@antheruscraft.de>2014-09-01 21:30:45 +0200
commitcc9acd13b90c2dff21b6a7b7d4db57780aba0fc7 (patch)
treede161c8abb3a9fb961b794e4d4cf255102b83715 /src/Entities/ArrowEntity.cpp
parentFixed spacing and light gray wool name! (diff)
parentMerge pull request #1368 from mc-server/coverityFixes (diff)
downloadcuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar.gz
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar.bz2
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar.lz
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar.xz
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.tar.zst
cuberite-cc9acd13b90c2dff21b6a7b7d4db57780aba0fc7.zip
Diffstat (limited to '')
-rw-r--r--src/Entities/ArrowEntity.cpp37
1 files changed, 36 insertions, 1 deletions
diff --git a/src/Entities/ArrowEntity.cpp b/src/Entities/ArrowEntity.cpp
index 913519c4c..954e0a267 100644
--- a/src/Entities/ArrowEntity.cpp
+++ b/src/Entities/ArrowEntity.cpp
@@ -90,6 +90,13 @@ void cArrowEntity::OnHitSolidBlock(const Vector3d & a_HitPos, eBlockFace a_HitFa
// Broadcast arrow hit sound
m_World->BroadcastSoundEffect("random.bowhit", (double)X, (double)Y, (double)Z, 0.5f, (float)(0.75 + ((float)((GetUniqueID() * 23) % 32)) / 64));
+
+ if ((m_World->GetBlock(Hit) == E_BLOCK_TNT) && IsOnFire())
+ {
+ m_World->SetBlock(X, Y, Z, E_BLOCK_AIR, 0);
+ m_World->SpawnPrimedTNT(X, Y, Z);
+ }
+
}
@@ -103,8 +110,36 @@ void cArrowEntity::OnHitEntity(cEntity & a_EntityHit, const Vector3d & a_HitPos)
{
Damage += m_World->GetTickRandomNumber(Damage / 2 + 2);
}
- a_EntityHit.TakeDamage(dtRangedAttack, this, Damage, 1);
+
+ int PowerLevel = m_CreatorData.m_Enchantments.GetLevel(cEnchantments::enchPower);
+ if (PowerLevel > 0)
+ {
+ int ExtraDamage = (int)ceil(0.25 * (PowerLevel + 1));
+ Damage += ExtraDamage;
+ }
+
+ int KnockbackAmount = 1;
+ int PunchLevel = m_CreatorData.m_Enchantments.GetLevel(cEnchantments::enchPunch);
+ if (PunchLevel > 0)
+ {
+ Vector3d LookVector = GetLookVector();
+ Vector3f FinalSpeed = Vector3f(0, 0, 0);
+ switch (PunchLevel)
+ {
+ case 1: FinalSpeed = LookVector * Vector3d(5, 0.3, 5); break;
+ case 2: FinalSpeed = LookVector * Vector3d(8, 0.3, 8); break;
+ default: break;
+ }
+ a_EntityHit.SetSpeed(FinalSpeed);
+ }
+
+ a_EntityHit.TakeDamage(dtRangedAttack, this, Damage, KnockbackAmount);
+ if (IsOnFire() && !a_EntityHit.IsSubmerged() && !a_EntityHit.IsSwimming())
+ {
+ a_EntityHit.StartBurning(100);
+ }
+
// Broadcast successful hit sound
GetWorld()->BroadcastSoundEffect("random.successful_hit", GetPosX(), GetPosY(), GetPosZ(), 0.5, (float)(0.75 + ((float)((GetUniqueID() * 23) % 32)) / 64));