diff --git a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs index 9bcaf327d4..4f24415364 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandManagementModule.cs @@ -367,10 +367,18 @@ namespace OpenSim.Region.CoreModules.World.Land private void ForceAvatarToPosition(ScenePresence avatar, Vector3? position) { if (m_scene.Permissions.IsGod(avatar.UUID)) return; - if (position.HasValue) - { - forcedPosition[avatar.ControllingClient.AgentId] = (Vector3)position; - } + + if (!position.HasValue) + return; + + bool isFlying = avatar.PhysicsActor.Flying; + avatar.RemoveFromPhysicalScene(); + + avatar.AbsolutePosition = (Vector3)position; + + avatar.AddToPhysicalScene(isFlying); + + forcedPosition[avatar.ControllingClient.AgentId] = (Vector3)position; } public void SendYouAreRestrictedNotice(ScenePresence avatar) diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index a1ca9c512a..1d7bf4c42f 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -1128,7 +1128,7 @@ namespace OpenSim.Region.Framework.Scenes /// /// Removes physics plugin scene representation of this agent if it exists. /// - private void RemoveFromPhysicalScene() + public void RemoveFromPhysicalScene() { if (PhysicsActor != null) {