diff options
author | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-01-13 00:23:36 +0100 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2014-01-13 00:23:36 +0100 |
commit | edefa27a48e2b5e7c82e74ca0e924172181fb098 (patch) | |
tree | 5d0a89e0bf234ee80adbdfd83e1d104008339edd /src/Entities/Player.cpp | |
parent | Fixed wire, rail, and pressure plate unpowering (diff) | |
download | cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar.gz cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar.bz2 cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar.lz cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar.xz cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.tar.zst cuberite-edefa27a48e2b5e7c82e74ca0e924172181fb098.zip |
Diffstat (limited to 'src/Entities/Player.cpp')
-rw-r--r-- | src/Entities/Player.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/Entities/Player.cpp b/src/Entities/Player.cpp index bc92790aa..cdedb0c5a 100644 --- a/src/Entities/Player.cpp +++ b/src/Entities/Player.cpp @@ -1884,3 +1884,29 @@ void cPlayer::ApplyFoodExhaustionFromMovement() + +void cPlayer::Detach() +{ + super::Detach(); + int PosX = (int)floor(GetPosX()); + int PosY = (int)floor(GetPosY()); + int PosZ = (int)floor(GetPosZ()); + + // Search for a position within an area to teleport player after detachment + // Position must be solid land, and occupied by a nonsolid block + // If nothing found, player remains where they are + for (int x = PosX - 2; x <= (PosX + 2); ++x) + { + for (int y = PosY; y <= (PosY + 3); ++y) + { + for (int z = PosZ - 2; z <= (PosZ + 2); ++z) + { + if (!g_BlockIsSolid[m_World->GetBlock(x, y, z)] && g_BlockIsSolid[m_World->GetBlock(x, y - 1, z)]) + { + TeleportToCoords(x, y, z); + return; + } + } + } + } +}
\ No newline at end of file |