summaryrefslogtreecommitdiffstats
path: root/src/Entities/Player.cpp
diff options
context:
space:
mode:
authorTiger Wang <ziwei.tiger@hotmail.co.uk>2014-01-13 00:23:36 +0100
committerTiger Wang <ziwei.tiger@hotmail.co.uk>2014-01-13 00:23:36 +0100
commitedefa27a48e2b5e7c82e74ca0e924172181fb098 (patch)
tree5d0a89e0bf234ee80adbdfd83e1d104008339edd /src/Entities/Player.cpp
parentFixed wire, rail, and pressure plate unpowering (diff)
downloadcuberite-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.cpp26
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