Extension Points
Beyond the addon API, IgniteSky exposes a small set of service provider interfaces (SPIs) for the integrations people most often need. Every one is a typed service registered through Bukkit's services manager, so there is no reflection anywhere.
WorthSource: feed island value from a shop
If you already price blocks in a shop plugin, register a WorthSource and set level.worth-sync to BUY or SELL. IgniteSky reads each block's price through the SPI and falls back to block-values for anything the shop does not price.
Bukkit.getServicesManager().register(
com.ignitedev.ignitesky.api.worth.WorthSource.class,
myShopSource,
context().getPlugin(),
org.bukkit.plugin.ServicePriority.Normal);level:
worth-sync: SELLSee Island Levels & Worth for the player side.
SlimeWorldProvider: host worlds in Slime format
To store per island worlds in Slime format, set a mode's hosting strategy to SWM and register a SlimeWorldProvider. The bridge depends on the ASWM API directly. IgniteSky calls provisionWorld(name, seed, natural) when it needs a new island world, and falls back to a plain folder copy if no provider is registered.
Bukkit.getServicesManager().register(
com.ignitedev.ignitesky.api.world.SlimeWorldProvider.class,
myAswmBridge,
context().getPlugin(),
org.bukkit.plugin.ServicePriority.Normal);MigrationImporter: add an import source
The migration system is open too. Implement MigrationImporter to teach IgniteSky how to read another plugin's data: give it an id, a description, a default source location, and a parse method that returns a list of islands. The built-in superior, bentobox and ignitesky importers use exactly this interface.
The principle behind all of them
Every extension point here is an interface you implement and a service you register. IgniteSky calls your code through the interface; it never reaches into your plugin, and your plugin never reaches into its internals. That is what keeps integrations stable across versions, on both sides.