Registering power types
Writing a new power type in Java and registering it with Apoli.
Actions & conditions
Adding your own actions and conditions for any power's JSON, and running data pack ones from your own code.
Contexts
The objects passed to actions and conditions, and how to reach the entity, level, target, stack or block through them.
Aliasing legacy JSON
Accepting old type IDs, renamed fields and injected defaults without touching your codec.
Custom data types
Reusable JSON value shapes built from codecs and shared across your powers.
The Origins API
Reading a player's origin and layers from Java, listing an origin's powers, and granting or revoking one.
Grave inscriptions
Adding a line of text to a player's grave from your addon, with You're in Grave Danger, Gravestones or the GraveStone Mod.