# How to

## The systems it provides
We will go by them as follows
- Attributes
- Item Interfaces
- Animator
- Task Provider


## Attributes
This is the CORE of your animals, you can extend this class if you want. <p></p>
The attributes hold the following by default:
- AnimalName
- ModId
- EntityAttributeProperties
- EntityBaseProperties

**See [**attributes**](attributes) for a more indepth guide for attributes.**

## Item Interfaces
This is a tool that is only useful to you if you need to automatically register items

By default, the item interface does nothing.

**See [**items**](items) for a more indepth guide for item interfaces.**

## Animator
This is an object you can drive the animations into

By default, it has Client and Server sided animations (server sends packets to client)

**See [**animator**](animator) for a more indepth guide for animators.**

## Task Provider

This is how the animal behaves.

By default, there are no provided tasks in Travelers-Lib.

**See [**task providers**](tasks) for a more indepth guide for task providers.**


## How to register the actual animal?

This depends, if you've followed the guide above its as simple as option 1.

<CodeTabs>
    ```java !!tabs Option 1
    public static ExampleAnimal exampleAnimal;

    public static void init() {
        exampleAnimal = new ExampleAnimal();
    }
    ```
    ```java !!tabs Option 2
    public static ExampleAnimal exampleAnimal;

    public static void init() {
        exampleAnimal = register(new ExampleAnimal());
    }

    public static<A extends SmartAnimalBase, T extends TravelersAnimal<A>> T register(T entity) {
        TravelersAnimalRegistry.register(entity);
        return entity;
    }
    ```
</CodeTabs>


That is it!

The animals rendering gets registered by travelers, so you are good to go!