summaryrefslogtreecommitdiffstats
path: root/src/Entities/Player.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Entities/Player.cpp')
-rw-r--r--src/Entities/Player.cpp23
1 files changed, 20 insertions, 3 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp
index b923a094e..0fa8254ce 100644
--- a/src/Entities/Player.cpp
+++ b/src/Entities/Player.cpp
@@ -252,6 +252,11 @@ void cPlayer::Tick(float a_Dt, cChunk & a_Chunk)
m_World->SendPlayerList(this);
m_LastPlayerListTime = t1.GetNowTime();
}
+
+ if (IsFlying())
+ {
+ m_LastGroundHeight = (float)GetPosY();
+ }
}
@@ -452,10 +457,16 @@ void cPlayer::SetTouchGround(bool a_bTouchGround)
if (m_LastJumpHeight > m_LastGroundHeight) Damage++;
m_LastJumpHeight = (float)GetPosY();
- if ((Damage > 0) && (!IsGameModeCreative()))
+ if (Damage > 0)
{
- TakeDamage(dtFalling, NULL, Damage, Damage, 0);
- }
+ if (!IsGameModeCreative())
+ {
+ TakeDamage(dtFalling, NULL, Damage, Damage, 0);
+ }
+
+ // Mojang uses floor() to get X and Z positions, instead of just casting it to an (int)
+ GetWorld()->BroadcastSoundParticleEffect(2006, (int)floor(GetPosX()), (int)GetPosY() - 1, (int)floor(GetPosZ()), Damage /* Used as particle effect speed modifier */);
+ }
m_LastGroundHeight = (float)GetPosY();
}
@@ -979,6 +990,12 @@ void cPlayer::SetGameMode(eGameMode a_GameMode)
m_GameMode = a_GameMode;
m_ClientHandle->SendGameMode(a_GameMode);
+
+ if (!IsGameModeCreative())
+ {
+ SetFlying(false);
+ SetCanFly(false);
+ }
}