diff options
author | Howaner <franzi.moos@googlemail.com> | 2014-04-26 00:34:42 +0200 |
---|---|---|
committer | Howaner <franzi.moos@googlemail.com> | 2014-04-26 00:34:42 +0200 |
commit | 7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730 (patch) | |
tree | bc4a0c201f8d6bd2b9f3fb24cca8d14c5cc271ba /src | |
parent | Add entity invulnerable (diff) | |
parent | Merge pull request #920 from axisd/master (diff) | |
download | cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar.gz cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar.bz2 cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar.lz cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar.xz cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.tar.zst cuberite-7fd9fe9d5fa3a4e94704d983aa6a7a4d4fea2730.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/Entities/Entity.cpp | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/Entities/Entity.cpp b/src/Entities/Entity.cpp index 4403ab161..0af4eafde 100644 --- a/src/Entities/Entity.cpp +++ b/src/Entities/Entity.cpp @@ -333,9 +333,38 @@ bool cEntity::DoTakeDamage(TakeDamageInfo & a_TDI) m_Health = 0; } - if (IsMob() || IsPlayer()) // Knockback for only players and mobs + if ((IsMob() || IsPlayer()) && (a_TDI.Attacker != NULL)) // Knockback for only players and mobs { - AddSpeed(a_TDI.Knockback * 2); + int KnockbackLevel = 0; + if (a_TDI.Attacker->GetEquippedWeapon().m_ItemType == E_ITEM_BOW) + { + KnockbackLevel = a_TDI.Attacker->GetEquippedWeapon().m_Enchantments.GetLevel(cEnchantments::enchPunch); + } + else + { + KnockbackLevel = a_TDI.Attacker->GetEquippedWeapon().m_Enchantments.GetLevel(cEnchantments::enchKnockback); + } + + Vector3d additionalSpeed(0, 0, 0); + switch (KnockbackLevel) + { + case 1: + { + additionalSpeed.Set(5, .3, 5); + break; + } + case 2: + { + additionalSpeed.Set(8, .3, 8); + break; + } + default: + { + additionalSpeed.Set(2, .3, 2); + break; + } + } + AddSpeed(a_TDI.Knockback * additionalSpeed); } m_World->BroadcastEntityStatus(*this, esGenericHurt); @@ -788,14 +817,12 @@ void cEntity::TickBurning(cChunk & a_Chunk) // Remember the current burning state: bool HasBeenBurning = (m_TicksLeftBurning > 0); - if (GetWorld()->GetWeather() == eWeather_Rain) + if (m_World->IsWeatherWet()) { - if (HasBeenBurning) + if (POSY_TOINT > m_World->GetHeight(POSX_TOINT, POSZ_TOINT)) { m_TicksLeftBurning = 0; - OnFinishedBurning(); - } - return; + } } // Do the burning damage: |