+ scriptapi_luaentity_rightclick(L, m_id, clicker);
+}
+
+void LuaEntitySAO::setPos(v3f pos)
+{
+ m_base_position = pos;
+ sendPosition(false, true);
+}
+
+void LuaEntitySAO::moveTo(v3f pos, bool continuous)
+{
+ m_base_position = pos;
+ if(!continuous)
+ sendPosition(true, true);
+}
+
+float LuaEntitySAO::getMinimumSavedMovement()
+{
+ return 0.1 * BS;
+}
+
+void LuaEntitySAO::setVelocity(v3f velocity)
+{
+ m_velocity = velocity;
+}
+
+void LuaEntitySAO::setAcceleration(v3f acceleration)
+{
+ m_acceleration = acceleration;
+}
+
+v3f LuaEntitySAO::getAcceleration()
+{
+ return m_acceleration;
+}
+
+void LuaEntitySAO::setTextureMod(const std::string &mod)
+{
+ std::ostringstream os(std::ios::binary);
+ // command (1 = set texture modification)
+ writeU8(os, 1);
+ // parameters
+ os<<serializeString(mod);
+ // create message and add to list
+ ActiveObjectMessage aom(getId(), false, os.str());
+ m_messages_out.push_back(aom);
+}
+
+void LuaEntitySAO::setSprite(v2s16 p, int num_frames, float framelength,
+ bool select_horiz_by_yawpitch)
+{
+ std::ostringstream os(std::ios::binary);
+ // command (2 = set sprite)
+ writeU8(os, 2);
+ // parameters
+ writeV2S16(os, p);
+ writeU16(os, num_frames);
+ writeF1000(os, framelength);
+ writeU8(os, select_horiz_by_yawpitch);
+ // create message and add to list
+ ActiveObjectMessage aom(getId(), false, os.str());
+ m_messages_out.push_back(aom);
+}
+
+void LuaEntitySAO::sendPosition(bool do_interpolate, bool is_movement_end)
+{
+ m_last_sent_move_precision = m_base_position.getDistanceFrom(
+ m_last_sent_position);
+ m_last_sent_position_timer = 0;
+ m_last_sent_yaw = m_yaw;
+ m_last_sent_position = m_base_position;
+ m_last_sent_velocity = m_velocity;
+ //m_last_sent_acceleration = m_acceleration;
+
+ float update_interval = m_env->getSendRecommendedInterval();
+
+ std::ostringstream os(std::ios::binary);
+ // command (0 = update position)
+ writeU8(os, 0);
+
+ // do_interpolate
+ writeU8(os, do_interpolate);
+ // pos
+ writeV3F1000(os, m_base_position);
+ // velocity
+ writeV3F1000(os, m_velocity);
+ // acceleration
+ writeV3F1000(os, m_acceleration);
+ // yaw
+ writeF1000(os, m_yaw);
+ // is_end_position (for interpolation)
+ writeU8(os, is_movement_end);
+ // update_interval (for interpolation)
+ writeF1000(os, update_interval);
+
+ // create message and add to list
+ ActiveObjectMessage aom(getId(), false, os.str());
+ m_messages_out.push_back(aom);