# IObjectEntity

| Methods        | Properties   |
| -------------- | ------------ |
| GetAge         | Type         |
| HasLineOfSight | Object       |
| LookAt         | EntityId     |
| LookAtSmooth   | Position     |
| MoveTo         | HasDespawned |
| MoveToRange    |              |
| Follow         |              |

## Properties

### Type

Denotes the type of this object, e.g.: ItemStack, Boat, Minecart. The full list of types can be found in [OQ.MineBot.PluginBase.Classes.Entity.Objects.ObjectTypes](https://github.com/OnlyQubes/OQ.MineBot.PluginBase/blob/master/Classes/Entity/Objects/IWorldObjects.cs).

###

### *Object (legacy)*

This variable should be casted to a more specific type by checking the Type variable and casting based on that. A full list of types that this can be casted to can be found [here](https://github.com/OnlyQubes/OQ.MineBot.PluginBase/tree/master/Classes/Entity/Objects/List). This will expose more relevant variables to the object, such as ProjectileObject has the entityId of the entity that shot it.

```csharp
// Example: casting based on Type
if(theObject.Type == ObjectTypes.Snowball)
    Console.WriteLine($"Entity with id {((ProjectileObject)theObject).shooterId} threw a snowball.");
```

## Methods

### GetAge

Returns the number of ticks that this object has existed for. This starts counting up as soon as this object is sent to the bot by the server (time since render). Each tick in this case refers to a Minecraft tick, which is 50ms per tick.

```csharp
int GetAge();
```

###

### HasLineOfSight

Returns whether the bot has direct line of sight to this object. This **only works if the object is within 64 blocks of the bot**. You can optionally specify a specific body part to test against (default is BodyParts.Body).

```csharp
bool HasLineOfSight(BodyParts bodyPart = BodyParts.Body);
```

###

### LookAt

Rotates the bots head to look at the object. This can be used to look at a specific part of the object, such as the head, feet, or the body (default is BodyParts.Body).\
Returns a Task that lasts around 1 tick, which is how long it takes the server to update the players rotation.

```csharp
Task LookAt(BodyParts bodyPart = BodyParts.Body);
```

### LookAtSmooth

Smoothly (slowly, per multiple ticks) rotates the bots head to look at the object. This can be used to look at a specific part of the object, such as the head, feet, or the body (default is BodyParts.Body).\
You should await for this function to complete, as the rotation time is dynamic. You can optionally specify the look speed, however it is recommended to leave it as 'auto'.

```csharp
Task LookAtSmooth(BodyParts bodyPart = BodyParts.Body, LookSpeed speed = LookSpeed.auto
```

###

### MoveTo

Attempts to move the location of this player. This is a wrapper function for [Player.MoveTo](https://docs.minecraftbot.com/api/context/player#moveto), for more information check that.

```csharp
IMoveTask MoveTo();
```

### MoveToRange

Attempts to move the bot into the specified range of this player. You must specify the max distance that we can be from this player to still be considered in range. This is a wrapper function for [Player.MoveToRange](https://docs.minecraftbot.com/api/context/player#movetorange), for more information check that.

```csharp
IMoveTask MoveToRange(int maxRange, MapOptions options = null);
```

### Follow

Attempts to move the location of this object, if the object is moved then the path is recalculated and updated. This is a wrapper function for [Player.FollowEntity](https://docs.minecraftbot.com/api/context/player#followentity), for more information check that.

```csharp
IMoveTask Follow(MapOptions options = null)
IMoveTask Follow(int maxRange, MapOptions options = null)
IMoveTask Follow(int maxRange, int minRange, MapOptions options = null)
```
