diff --git a/Minecraft.Client/ServerPlayer.cpp b/Minecraft.Client/ServerPlayer.cpp index 03eb1e0f..ebf76ec0 100644 --- a/Minecraft.Client/ServerPlayer.cpp +++ b/Minecraft.Client/ServerPlayer.cpp @@ -595,6 +595,7 @@ void ServerPlayer::die(DamageSource *source) bool ServerPlayer::hurt(DamageSource *dmgSource, float dmg) { if (isInvulnerable()) return false; + if (gameMode == nullptr||gameMode->isCreative()) return false; // 4J: Not relevant to console servers // Allow falldamage on dedicated pvpservers -- so people cannot cheat their way out of 'fall traps' diff --git a/Minecraft.Client/ServerPlayerGameMode.cpp b/Minecraft.Client/ServerPlayerGameMode.cpp index a237c9f9..ffba1501 100644 --- a/Minecraft.Client/ServerPlayerGameMode.cpp +++ b/Minecraft.Client/ServerPlayerGameMode.cpp @@ -56,11 +56,10 @@ bool ServerPlayerGameMode::isSurvival() return gameModeForPlayer->isSurvival(); } -bool ServerPlayerGameMode::isCreative() -{ - return gameModeForPlayer->isCreative(); +bool ServerPlayerGameMode::isCreative() { + if (!this || !gameModeForPlayer) return false; + return gameModeForPlayer->isCreative(); } - void ServerPlayerGameMode::updateGameMode(GameType *gameType) { if (gameModeForPlayer == GameType::NOT_SET) diff --git a/Minecraft.World/Player.cpp b/Minecraft.World/Player.cpp index 5227d7a8..2b40b1ea 100644 --- a/Minecraft.World/Player.cpp +++ b/Minecraft.World/Player.cpp @@ -1384,6 +1384,7 @@ void Player::setDefaultHeadHeight() bool Player::hurt(DamageSource *source, float dmg) { if (isInvulnerable()) return false; + if ( hasInvulnerablePrivilege() || (abilities.invulnerable && !source->isBypassInvul()) ) return false; // 4J-JEV: Fix for PSVita: #3987 - [IN GAME] The user can take damage/die, when attempting to re-enter fly mode when falling from a height.