> For the complete documentation index, see [llms.txt](https://docs.pentafloat.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.pentafloat.com/getting-started/custom-commands.md).

# Custom commands

The `[Command]` attribute turns any method or property into a command, and will become available for execution in the command field upon recompilation.

## How to create a command <a href="#how-to-create-a-command" id="how-to-create-a-command"></a>

{% tabs %}
{% tab title="Static example" %}

```csharp
using UnityEngine;
using Ghostlike.Commands;

public static class NumberCommands
{
    [Command]
    public static int RandomNumber(int from, int to)
    {
        return Random.Range(from, to);
    }
}
```

The method can be executed immediately by typing: `randomnumber 0 10` in the command field.
{% endtab %}

{% tab title="Non-static example" %}

```csharp
using UnityEngine;
using Ghostlike.Commands;

public class Player : MonoBehaviour
{
    [SerializeField] private float maxHealth;
    private float currentHealth;

    [Command]
    public int Heal(int amount)
    {
        currentHealth += amount;
        currentHealth = Mathf.Clamp(currentHealth, 0, maxHealth);
    }
}
```

Contrary to static methods, a non-static method requires an instance in order to be invoked.

Instances are found automatically with `Object.FindObjectsByType`. This means there is no additional setup required on your part.

Executing the command like this: `heal 10` will heal all instances of `Player` found in the scene. A name can be specified in order to execute the command only on instances with the specified name. It can be specified at the end of the input, prefixed with `@`. Like so: `heal 10 @MyPlayer`.
{% endtab %}
{% endtabs %}
