---
description: How to use the basic Ability interface
---

# Ability

### The Ability Key

All custom Origins-Reborn abilities need to implement the `Ability` interface, or another interface that extends it.

It has a single, basic method that must be implemented, `getKey` - this returns the key that is used to give your custom ability to an origin.



Example:

```
public class ExampleCustomAbility implements Ability {
    @Override
    public @NotNull Key getKey() {
        return Key.key("my_cool_addon", "my_ability");
    }
}
```

This will give your ability the key `my_cool_addon:my_ability`



### Ability Checks

Next, to run a piece of code dependant on whether a player has an ability, you can use the `runForAbility` method like this:

```
public class ExampleCustomAbility implements Ability, Listener {
    @Override
    public @NotNull Key getKey() {
        return Key.key("my_cool_addon", "my_ability");
    }

    @EventHandler
    public void onPlayerJump(PlayerJumpEvent event) {
        runForAbility(event.getPlayer(), player -> {
            player.damage(1);
            player.sendMessage(Component.text("You took damage!"));
        });
    }
}
```

This means any player who jumps with the ability will take damage, and receive the message "You took damage!" in chat.

You can also use the method `hasAbility` to check if a player has an ability, returning a boolean value, e.g.&#x20;

`boolean player_has_power = hasAbility(event.getPlayer())`&#x20;
