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.