diff --git a/src/clientenvironment.cpp b/src/clientenvironment.cpp index af00586c5..8de073258 100644 --- a/src/clientenvironment.cpp +++ b/src/clientenvironment.cpp @@ -32,6 +32,7 @@ with this program; if not, write to the Free Software Foundation, Inc., #include "raycast.h" #include "voxelalgorithms.h" #include "settings.h" +#include "content_cao.h" #include #include "client/renderingengine.h" @@ -207,6 +208,8 @@ void ClientEnvironment::step(float dtime) //std::cout<<"Looped "<getCAO() && lplayer->getCAO()->isImmortal(); + for (const CollisionInfo &info : player_collisions) { v3f speed_diff = info.new_speed - info.old_speed;; // Handle only fall damage @@ -227,7 +230,7 @@ void ClientEnvironment::step(float dtime) pre_factor = 1.0 + (float)addp/100.0; } float speed = pre_factor * speed_diff.getLength(); - if (speed > tolerance) { + if (speed > tolerance && !player_immortal) { f32 damage_f = (speed - tolerance) / BS * post_factor; u8 damage = (u8)MYMIN(damage_f + 0.5, 255); if (damage != 0) { diff --git a/src/content_cao.cpp b/src/content_cao.cpp index a8b4ae2e1..affa092e7 100644 --- a/src/content_cao.cpp +++ b/src/content_cao.cpp @@ -360,6 +360,11 @@ v3f GenericCAO::getPosition() return pos_translator.vect_show; } +const bool GenericCAO::isImmortal() +{ + return itemgroup_get(getGroups(), "immortal"); +} + scene::ISceneNode* GenericCAO::getSceneNode() { if (m_meshnode) { diff --git a/src/content_cao.h b/src/content_cao.h index 575aad241..7e946efb7 100644 --- a/src/content_cao.h +++ b/src/content_cao.h @@ -124,7 +124,10 @@ public: { return ACTIVEOBJECT_TYPE_GENERIC; } - + inline const ItemGroupList &getGroups() const + { + return m_armor_groups; + } void initialize(const std::string &data); void processInitData(const std::string &data); @@ -143,6 +146,8 @@ public: return m_yaw; } + const bool isImmortal(); + scene::ISceneNode *getSceneNode(); scene::IAnimatedMeshSceneNode *getAnimatedMeshSceneNode();