Terra Addon Loading#

This page serves as an explanation of the addon loading process in Terra. None of the information on this page is strictly necessary for developing a Terra addon, so feel free to skim. However, knowing how the addon loading process works can be helpful.

The Terra addon loading process can be divided into 2 main steps:

1. Bootstrap Addon Loading#

The only addons Terra itself is capable of loading are Bootstrap Addons. The bootstrap addon loader is an extremely minimal addon loader; it checks the JAR Manifest of all discovered bootstrap addons (from the addons/bootstrap directory) for the Terra-Bootstrap-Addon-Entry-Point attribute, then attempts to load and instantiate the BootstrapBaseAddon-implementing class specified in the attribute.

Bootstrap Addon Initialization#

After all bootstrap addons are loaded, the #initialize method is invoked on each. During initialization, bootstrap addons load additional addons, but does not initialize them.

2. Addon Initialization#

After the bootstrap addons have loaded their addons, the freshly loaded addons must be initialized.

Dependency Sorting#

First, addons’ dependencies are inspected. If any dependencies are missing, any invalid versions are found, or any circular dependencies arise, loading fails.

Addons are then sorted into a directional acyclic graph based on their dependencies. The graph is used to determine the order in which addons are loaded, to ensure dependencies are loaded before dependents.

Initialization#

After the order to load addons is determined, addons can finally be initialized.

Dependency Injection#

Terra’s addon system makes use of a simple annotation-based dependency injection framework to reduce boilerplate. When addons are initialised, the Platform instance is injected to any valid, annotated fields.